2015-05-18 18 views
11

我無法在ASP NET 5項目中創建簡單的模擬郵件發件人。在ASP NET MVC 6項目中使用System.Net.Mail

這裏的方法:

public static Task SendMail(string Email, string Subject, string Body) 
    { 
     SmtpClient client = new SmtpClient(); 
     client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory; 
     client.PickupDirectoryLocation = "C:\\TMP"; 

     MailAddress from = new MailAddress("[email protected]", "Jane " + (char)0xD8 + " Clayton", System.Text.Encoding.UTF8); 
     MailAddress to = new MailAddress(Email); 

     MailMessage message = new MailMessage(from, to); 
     message.Body = Body; 
     message.BodyEncoding = System.Text.Encoding.UTF8; 
     message.Subject = Subject; 
     message.SubjectEncoding = System.Text.Encoding.UTF8; 

     client.Send(message); 
     message.Dispose(); 

     return Task.FromResult(0); 
    } 

我已經包括了依賴「System.Net.Mail」,但提示說,庫可在DNX 4.5.1但不是在DNX核心5.0,該項目不會編譯。

在我project.json有:

"frameworks": { 
    "dnx451": { }, 
    "dnxcore50": { } 
} 
+0

我不相信'SmtpClient'正在被移植到.NET的核心。 (您可以使用http://packagesearch.azurewebsites。net /找到新的NuGet包,而且沒有一個。)你需要.Net Core嗎? –

+1

不,你是對的:因爲它被默認包含在項目模板中,所以我認爲我需要它,但沒有它就能正常工作。謝謝 ! –

+0

見https://github.com/dotnet/corefx/issues/1006 –

回答

5

我不相信SmtpClient正在被移植到.NET的核心。 (您可以使用unofficial reverse package lookup找到新的NuGet包,並沒有一個。)

因爲你不需要對.NET核心,你可以刪除您frameworks在project.json的dnxcore50條目。

11

截至今天,現在可以使用MailKit

我使用ASP.NET 5 RC1發送電子郵件上dnxcore50除了net451(和許多其他平臺),我添加了這些依賴關係我project.json在需要nugets

"MimeKit": "1.3.0-beta1", 
"MailKit": "1.3.0-beta1" 

帶來所以在dnxcore50缺乏System.Net.Mail的不再是一個問題,MailKit庫實際上比任何舊系統更加豐富的功能。 Net.Mail的東西。

非常感謝Jeffrey Stedfast的辛勤工作。

+2

帽子給Jeffrey Stedfast,但他的工作不應該是必要的。電子郵件是大多數Web應用程序中的重要組成部分:註冊確認,密碼恢復,論壇響應通知,訂單確認等。我們處於RC而沒有郵件類端口的事實稍微令人失望。如果一個開發人員可以編寫MailKit,那麼在ASP.net上工作的一羣明智的微軟思維如何不能移植舊代碼?妨礙Linux/OSX作爲可行的替代方案?我正在挖掘很多新的功能/特性,但這似乎是一個非常嚴重的疏漏。 – Sam

+4

@Sam不會在Stack Overflow上進行冗長的討論,但我認爲這句格言:*你如何吃大象?一次一口,*當然適用於微軟在.NET Core上所做的工作。 – ahsteele

+0

查看GitHub上的.Net核心積壓:https://github.com/dotnet/corefx/issues/1006 –

1

對於.NET的核心務必通過更新project.json將其添加爲一個依賴獲得MailKit ...

"MailKit": "~1.6.0" 

見MailKit在GitHub上了一個完整的例子: https://github.com/jstedfast/MailKit

0

如果您已在Visual Studio 2017中設置您的項目,那麼此解決方案將工作:

  1. 編輯項目的.csproj文件。右鍵單擊項目名稱,然後選擇「編輯Project1.csproj」(以防您的項目名稱爲Project1)。項目的XML文件打開。將'TargetFramework'更改爲net452,並添加一個'RuntimeIdentifier'標籤,其值爲win7-x86。所以它看起來像這樣:

    [的PropertyGroup] [TargetFramework] net452 [/ TargetFramework] [RuntimeIdentifier] WIN7-86 [/ RuntimeIdentifier] [/的PropertyGroup]

(全部更換支架BIJ '小於'和'大於'的符號) 您的項目將鏈接到.NET Framework 4.5.2,然後所有庫都將可用,包括System.NET.Mail命名空間。

對於我來說,這是一個工作的解決方案... :-)