2016-10-08 39 views
5

używałem smtpclient dotychczas z ASP.NET MVC 5. Do testowania funkcjonalności wysłać e-mail na systemie lokalnym, używałem client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;wysyłanie e-maili do SpecifiedPickupDirectory z MailKit

Teraz chcę zrobić to samo w ASP .NET Core, który do tej pory nie ma klasy SmtpClient. Wszystkie wyszukiwania tego zakończyły się na MailKit. Użyłem ich kodu pocztowego, który działa dobrze w Gmailu.

Nie chcę wysyłać e-maili testowych za każdym razem i może być wiele scenariuszy w moim projekcie, w których muszę wysłać wiadomość e-mail. Jak korzystać z funkcji wysyłania poczty lokalnej za pomocą programu MailKit. Pomocne mogą być dowolne linki lub mały kod źródłowy. Dzięki

Odpowiedz

9

Nie jestem pewien na dokładniejszych szczegółach, jak działa SmtpDeliveryMethod.SpecifiedPickupDirectory i co dokładnie robi, ale podejrzewam, że może po prostu zapisać wiadomość w katalogu, w którym lokalny serwer Exchange okresowo sprawdza, czy poczta ma wysyłać.

Zakładając, że jest to przypadek, można zrobić coś takiego:

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

Powyższy kod urywek używa Guid.NewGuid() jako sposób generowania tymczasowego pliku, ale można użyć dowolnej metody chcesz (np mógłbyś również zdecydować się na użycie message.MessageId + ".eml").

W oparciu o Microsoft referencesource, gdy używany jest SpecifiedPickupDirectory, w rzeczywistości używają one także Guid.NewGuid().ToString() + ".eml", więc prawdopodobnie jest to właściwy sposób.

+0

Dziękuję za pracę nad "Mailkit" i tę odpowiedź. Działa dobrze. – vivek