Jak wysyłać wiadomości e-mail w ASP.NET Core

Często będziesz musiał wysyłać e-maile za pośrednictwem aplikacji. Możesz skorzystać z pakietu MailKit NuGet, aby wysyłać wiadomości e-mail w ASP.NET Core. MailKit to biblioteka klienta poczty typu open source, której można używać w aplikacjach .NET lub .NET Core działających w systemach Windows, Linux lub Mac. W tym artykule omówiono sposób, w jaki możemy używać pakietu MailKit NuGet do wysyłania wiadomości e-mail w ASP.NET Core.

Aby pracować z przykładami kodu przedstawionymi w tym artykule, w systemie powinien być zainstalowany program Visual Studio 2019. Jeśli nie masz jeszcze kopii, możesz pobrać program Visual Studio 2019 tutaj. 

Utwórz projekt interfejsu API ASP.NET Core

Po pierwsze, utwórzmy projekt ASP.NET Core w programie Visual Studio. Zakładając, że w systemie jest zainstalowany program Visual Studio 2019, wykonaj czynności opisane poniżej, aby utworzyć nowy projekt ASP.NET Core w programie Visual Studio.

  1. Uruchom środowisko IDE programu Visual Studio.
  2. Kliknij „Utwórz nowy projekt”.
  3. W oknie „Utwórz nowy projekt” wybierz „Aplikacja sieci Web ASP.NET Core” z wyświetlonej listy szablonów.
  4. Kliknij Następny.
  5. W oknie „Konfiguruj nowy projekt” pokazanym obok podaj nazwę i lokalizację nowego projektu.
  6. Kliknij Utwórz.
  7. W oknie „Tworzenie nowej aplikacji sieci Web ASP.Net Core” wybierz .NET Core jako środowisko wykonawcze i ASP.NET Core 2.2 (lub nowszy) z listy rozwijanej u góry. Będę tutaj używać ASP.NET Core 3.0.
  8. Wybierz „API” jako szablon projektu, aby utworzyć nową aplikację ASP.NET Core API. 
  9. Upewnij się, że pola wyboru „Włącz obsługę Dockera” i „Konfiguruj dla HTTPS” są odznaczone, ponieważ nie będziemy tutaj używać tych funkcji.
  10. Upewnij się, że uwierzytelnianie jest ustawione na „Brak uwierzytelniania”, ponieważ nie będziemy też używać uwierzytelniania.
  11. Kliknij Utwórz. 

Spowoduje to utworzenie nowego projektu interfejsu API ASP.NET Core w programie Visual Studio. Wybierz folder Controllers solution w oknie Solution Explorer i kliknij „Dodaj -> Kontroler…”, aby utworzyć nowy kontroler o nazwie DefaultController. Będziemy używać tego projektu w kolejnych sekcjach tego artykułu.

Zainstaluj pakiet MailKit NuGet

Aby pracować z MailKit, należy zainstalować pakiet MailKit z NuGet. Możesz to zrobić za pośrednictwem menedżera pakietów NuGet w środowisku IDE programu Visual Studio 2019 lub wykonując następujące polecenie w konsoli Menedżera pakietów NuGet:

Zainstaluj pakiet NETCore.MailKit

Będziesz także musiał dodać odwołania do następujących przestrzeni nazw w swoim kodzie:

using MailKit.Net.Smtp;

przy użyciu MimeKit;

Określ metadane konfiguracji poczty e-mail w ASP.NET Core

Poniższy fragment kodu pokazuje, jak można określić szczegóły konfiguracji poczty e-mail w pliku appsettings.json.

"NotificationMetadata": {

    "Nadawca": "[email protected]",

    "SmtpServer": "smtp.gmail.com",

    "Reciever": "[email protected]",

    „Port”: 465,

    "Nazwa użytkownika": "[email protected]",

    „Hasło”: „podaj tutaj swoje hasło”

  }

Aby odczytać dane konfiguracyjne poczty e-mail, skorzystamy z następującej klasy.

public class NotificationMetadata

    {

        public string Sender {get; zestaw; }

        public string Reciever {get; zestaw; }

        public string SmtpServer {get; zestaw; }

        public int Port {get; zestaw; }

        public string nazwa_użytkownika {get; zestaw; }

        public string Password {get; zestaw; }

    }

Oto, jak można odczytać dane konfiguracji poczty e-mail z pliku appsettings.json do wystąpienia klasy NotificationMetadata.

public void ConfigureServices (usługi IServiceCollection)

{

     var notificationMetadata =

     Configuration.GetSection ("NotificationMetadata").

     Dostać();

     services.AddSingleton (notificationMetadata);

     services.AddControllers ();

}

Utwórz wystąpienie klasy EmailMessage w ASP.NET Core

Utwórz nową klasę o nazwie EmailMessage z następującym kodem:

klasa publiczna EmailMessage

    {

        public MailboxAddress Sender {get; zestaw; }

        public MailboxAddress Reciever {get; zestaw; }

        public string Temat {get; zestaw; }

        public string Content {get; zestaw; }

    }

Utwórz wystąpienie klasy MimeMessage w ASP.NET Core

Poniższa metoda ilustruje, w jaki sposób można utworzyć wystąpienie MimeMessage na podstawie wystąpienia naszej niestandardowej klasy EmailMessage.

private MimeMessage CreateMimeMessageFromEmailMessage (wiadomość EmailMessage)

{

     var mimeMessage = new MimeMessage ();

     mimeMessage.From.Add (message.Sender);

     mimeMessage.To.Add (message.Reciever);

     mimeMessage.Subject = message.Subject;

     mimeMessage.Body = new TextPart (MimeKit.Text.TextFormat.Text)

     {Text = message.Content};

     return mimeMessage;

}

Wysyłaj wiadomości e-mail synchronicznie przy użyciu MailKit w ASP.NET Core

Aby wysłać wiadomość e-mail, musimy skorzystać z klasy SmtpClient odnoszącej się do przestrzeni nazw MailKit.Net.Smtp. Poniższy fragment kodu ilustruje, jak można to zrobić.

using (SmtpClient smtpClient = new SmtpClient ())

{

  smtpClient.Connect (_notificationMetadata.SmtpServer,

  _notificationMetadata.Port, true);

  smtpClient.Authenticate (_notificationMetadata.UserName,

  _notificationMetadata.Password);

  smtpClient.Send (mimeMessage);

  smtpClient.Disconnect (prawda);

}

Oto pełny kod metody Get action naszej klasy DefaultController dla Twojej wygody.

public string Get ()

{

EmailMessage message = nowy EmailMessage ();

message.Sender = new MailboxAddress ("Self", _notificationMetadata.Sender);

message.Reciever = new MailboxAddress ("Self", _notificationMetadata.Reciever);

message.Subject = "Witamy";

message.Content = "Witaj świecie!";

var mimeMessage = CreateEmailMessage (wiadomość);

using (SmtpClient smtpClient = new SmtpClient ())

 {

    smtpClient.Connect (_notificationMetadata.SmtpServer,

    _notificationMetadata.Port, true);

    smtpClient.Authenticate (_notificationMetadata.UserName,

    _notificationMetadata.Password);

    smtpClient.Send (mimeMessage);

    smtpClient.Disconnect (prawda);

  }

 return "E-mail wysłany pomyślnie";

}

Wysyłaj wiadomości e-mail asynchronicznie przy użyciu MailKit w ASP.NET Core

Poniższy fragment kodu ilustruje asynchroniczną wersję kodu, który właśnie napisaliśmy w celu synchronicznego wysyłania wiadomości e-mail.

using (SmtpClient smtpClient = new SmtpClient ())

 {

      await smtpClient.ConnectAsync (_notificationMetadata.SmtpServer,

      _notificationMetadata.Port, true);

      await smtpClient.AuthenticateAsync (_notificationMetadata.UserName,

      _notificationMetadata.Password);

      await smtpClient.SendAsync (mimeMessage);

      await smtpClient.DisconnectAsync (true);

 }

Na koniec pamiętaj, że MailKit umożliwia również wysyłanie wiadomości e-mail przy użyciu szablonów, a nawet wiadomości e-mail z załącznikami. W przyszłym artykule pokażę dodatkowe funkcje MailKit.