2015-05-18 24 views
11

Tôi gặp sự cố khi tạo một người gửi thư đơn giản trong một dự án ASP NET 5.Sử dụng System.Net.Mail trong dự án ASP NET MVC 6

Ở đây phương pháp:

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); 
    } 

Tôi đã bao gồm phụ thuộc 'System.Net.Mail', nhưng một tooltip nói rằng thư viện có sẵn trong DNX 4.5.1 nhưng không phải trong DNX Lõi 5.0, và dự án sẽ không biên dịch.

Trong project.json của tôi ở đó là:

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

Tôi không tin rằng 'SmtpClient' đang được chuyển sang .Net Core. (Bạn có thể sử dụng http: //packagesearch.azurewebsites.net/để tìm các gói NuGet mới và không có gói nào.) Bạn có cần .Net Core? –

+1

Không bạn nói đúng: vì nó được đưa vào mặc định trong các mẫu dự án, tôi nghĩ tôi cần nó, nhưng nó hoạt động tốt mà không có nó. Cảm ơn ! –

+0

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

Trả lời

5

Tôi không tin rằng SmtpClient đang được chuyển đến Net Core. (Bạn có thể sử dụng số unofficial reverse package lookup để tìm gói NuGet mới và không có gói nào.)

Vì bạn không cần .Net Core, bạn có thể xóa mục nhập dnxcore50 từ frameworks trong project.json của mình.

11

Tính đến hôm nay, bây giờ có thể gửi email về dnxcore50 ngoài net451 (và rất nhiều nền tảng khác) sử dụng MailKit

Tôi đang sử dụng rc1 của ASP.NET 5 và tôi đã thêm những phụ thuộc vào project.json tôi để mang lại trong nugets cần

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

vì vậy, việc thiếu System.Net.Mail trong dnxcore50 không còn là một vấn đề, thư viện MailKit thực sự là nhiều hơn nữa tính năng phong phú hơn bất kỳ của hệ thống cũ. Công cụ Net.Mail.

Rất lớn Cảm ơn Jeffrey Stedfast vì đã nỗ lực hết sức mình.

+2

Mũ tắt cho Jeffrey Stedfast, nhưng công việc của anh ấy không cần thiết. E-mail là một phần quan trọng của hầu hết các ứng dụng web: Xác nhận đăng ký, khôi phục mật khẩu, thông báo phản hồi diễn đàn, xác nhận đơn hàng, v.v. Thực tế là chúng tôi đang ở trong RC mà không có cổng của các lớp thư là hơi thất vọng. Nếu một nhà phát triển duy nhất có thể viết MailKit, làm thế nào một đội ngũ trí óc sáng sủa của Microsoft làm việc trên ASP.net không chuyển mã cũ? Để cản trở Linux/OSX là lựa chọn thay thế khả thi? Tôi đang đào rất nhiều chức năng/tính năng mới, nhưng điều này có vẻ như một thiếu sót khá nghiêm trọng. – Sam

+4

@Sam không để có được vào cuộc thảo luận kéo dài ở đây trên Stack tràn, nhưng tôi nghĩ câu ngạn ngữ: * Làm thế nào để bạn ăn một con voi? Mỗi lần cắn một lần * chắc chắn áp dụng cho công việc mà Microsoft đang thực hiện trên .NET Core. – ahsteele

+0

Xem .Net Core backlog trên GitHub: https://github.com/dotnet/corefx/issues/1006 –

1

Đối với NET Lõi hãy chắc chắn để có được MailKit bằng cách cập nhật project.json để thêm nó như là một sự phụ thuộc ...

"MailKit": "~1.6.0" 

Xem MailKit trên GitHub cho một ví dụ hoàn chỉnh: https://github.com/jstedfast/MailKit

0

Nếu bạn đã thiết lập dự án của mình trong Visual Studio 2017, sau đó giải pháp này sẽ hoạt động:

  1. Chỉnh sửa tệp .csproj của dự án của bạn. Nhấn chuột phải vào tên dự án và chọn 'Edit Project1.csproj' (trong trường hợp tên dự án của bạn là Project1). Tệp XML của dự án sẽ mở ra. Thay đổi 'TargetFramework' thành net452 và thêm một thẻ 'RuntimeIdentifier' với giá trị win7-x86. Vì vậy, nó trông như thế này:

    [PropertyGroup] [TargetFramework] net452 [/ TargetFramework] [RuntimeIdentifier] win7-x86 [/ RuntimeIdentifier] [/ PropertyGroup]

(thay thế tất cả dấu ngoặc bij 'ít hơn' và 'lớn hơn' dấu hiệu) Dự án của bạn sẽ được liên kết với .NET Framework 4.5.2 và tất cả các thư viện sẽ có sẵn sau đó, bao gồm không gian tên System.NET.Mail.

Đối với tôi, đây là giải pháp làm việc ... :-)

Các vấn đề liên quan