2016-10-08 59 views
5

Tôi đã sử dụng SmtpClient đến bây giờ với ASP.NET MVC 5. Đối với kiểm tra email gửi chức năng trên hệ thống địa phương, tôi đã sử dụng client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;Gửi Email đến SpecifiedPickupDirectory với MailKit

Bây giờ, tôi muốn làm những điều tương tự trong ASP .NET Core không có lớp SmtpClient được triển khai cho đến bây giờ. Tất cả tìm kiếm cho điều này đã kết thúc vào ngày MailKit. Tôi đã sử dụng mã gửi thư của họ đang hoạt động tốt với gmail.

Tôi không muốn gửi email thử nghiệm mỗi lần và có thể có nhiều kịch bản trong dự án của tôi nơi tôi cần gửi email. Tôi có thể sử dụng chức năng gửi email cục bộ bằng MailKit như thế nào. Bất kỳ liên kết hoặc mã nguồn nhỏ sẽ giúp đỡ. Cảm ơn

Trả lời

9

Tôi không chắc chắn chi tiết hơn về cách hoạt động của SmtpDeliveryMethod.SpecifiedPickupDirectory và nó hoạt động chính xác như thế nào, nhưng tôi nghi ngờ nó có thể lưu thư trong thư mục nơi máy chủ Exchange cục bộ kiểm tra định kỳ thư để gửi đi.

Giả sử đó là trường hợp, bạn có thể làm một cái gì đó như thế này:

void SaveToPickupDirectory (MimeMessage message, string pickupDirectory) 
{ 
    do { 
     // Note: this will require that you know where the specified pickup directory is. 
     var path = Path.Combine (pickupDirectory, Guid.NewGuid().ToString() + ".eml"); 

     if (File.Exists (path)) 
      continue; 

     try { 
      using (var stream = new FileStream (path, FileMode.CreateNew)) { 
       message.WriteTo (stream); 
       return; 
      } 
     } catch (IOException) { 
      // The file may have been created between our File.Exists() check and 
      // our attempt to create the stream. 
     } 
    } while (true); 
} 

Đoạn mã trên sử dụng Guid.NewGuid() như một cách để tạo ra một tên tập tin tạm thời, nhưng bạn có thể sử dụng bất cứ phương pháp nào bạn muốn (ví dụ như bạn có thể cũng chọn sử dụng message.MessageId + ".eml").

Dựa trên referencesource của Microsoft, khi SpecifiedPickupDirectory được sử dụng, chúng thực sự cũng sử dụng Guid.NewGuid().ToString() + ".eml", vì vậy đó có thể là cách để thực hiện.

+0

Cảm ơn công việc về "Mailkit" và câu trả lời này. Nó hoạt động tốt. – vivek

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