So senden Sie E-Mails in ASP.NET Core

Sie müssen häufig E-Mails über Ihre Anwendung senden. Sie können das MailKit NuGet-Paket nutzen, um E-Mails in ASP.NET Core zu senden. MailKit ist eine Open Source-Mail-Client-Bibliothek, die in .NET- oder .NET Core-Anwendungen verwendet werden kann, die auf Windows-, Linux- oder Mac-Systemen ausgeführt werden. Dieser Artikel enthält eine Diskussion darüber, wie wir das MailKit NuGet-Paket zum Senden von E-Mails in ASP.NET Core verwenden können.

Um mit den in diesem Artikel bereitgestellten Codebeispielen arbeiten zu können, muss Visual Studio 2019 auf Ihrem System installiert sein. Wenn Sie noch keine Kopie haben, können Sie Visual Studio 2019 hier herunterladen. 

Erstellen Sie ein ASP.NET Core API-Projekt

Zunächst erstellen wir ein ASP.NET Core-Projekt in Visual Studio. Angenommen, Visual Studio 2019 ist auf Ihrem System installiert, führen Sie die folgenden Schritte aus, um ein neues ASP.NET Core-Projekt in Visual Studio zu erstellen.

  1. Starten Sie die Visual Studio-IDE.
  2. Klicken Sie auf "Neues Projekt erstellen".
  3. Wählen Sie im Fenster "Neues Projekt erstellen" aus der Liste der angezeigten Vorlagen "ASP.NET Core-Webanwendung" aus.
  4. Weiter klicken.
  5. Geben Sie im nächsten Fenster "Konfigurieren Sie Ihr neues Projekt" den Namen und den Speicherort für das neue Projekt an.
  6. Klicken Sie auf Erstellen.
  7. Wählen Sie im Fenster "Neue ASP.Net Core-Webanwendung erstellen" .NET Core als Laufzeit und ASP.NET Core 2.2 (oder höher) aus der Dropdown-Liste oben aus. Ich werde hier ASP.NET Core 3.0 verwenden.
  8. Wählen Sie "API" als Projektvorlage aus, um eine neue ASP.NET Core API-Anwendung zu erstellen. 
  9. Stellen Sie sicher, dass die Kontrollkästchen "Docker-Unterstützung aktivieren" und "Für HTTPS konfigurieren" deaktiviert sind, da diese Funktionen hier nicht verwendet werden.
  10. Stellen Sie sicher, dass die Authentifizierung auf "Keine Authentifizierung" eingestellt ist, da wir auch keine Authentifizierung verwenden.
  11. Klicken Sie auf Erstellen. 

Dadurch wird ein neues ASP.NET Core API-Projekt in Visual Studio erstellt. Wählen Sie im Projektmappen-Explorer den Lösungsordner "Controller" aus und klicken Sie auf "Hinzufügen -> Controller ...", um einen neuen Controller mit dem Namen "DefaultController" zu erstellen. Wir werden dieses Projekt in den folgenden Abschnitten dieses Artikels verwenden.

Installieren Sie das MailKit NuGet-Paket

Um mit MailKit arbeiten zu können, sollten Sie das MailKit-Paket von NuGet installieren. Sie können dies entweder über den NuGet-Paketmanager in der Visual Studio 2019-IDE oder durch Ausführen des folgenden Befehls in der NuGet-Paketmanagerkonsole tun:

Installationspaket NETCore.MailKit

Sie müssen außerdem Verweise auf die folgenden Namespaces in Ihrem Code hinzufügen:

using MailKit.Net.Smtp;

mit MimeKit;

Geben Sie E-Mail-Konfigurationsmetadaten in ASP.NET Core an

Das folgende Codefragment zeigt, wie Sie die E-Mail-Konfigurationsdetails in der Datei appsettings.json angeben können.

"NotificationMetadata": {

    "Absender": "[email protected]",

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

    "Empfänger": "Empfä[email protected]",

    "Port": 465,

    "Benutzername": "[email protected]",

    "Passwort": "Geben Sie hier Ihr Passwort ein"

  }}

Zum Lesen der E-Mail-Konfigurationsdaten verwenden wir die folgende Klasse.

öffentliche Klasse NotificationMetadata

    {

        öffentlicher String Sender {get; einstellen; }}

        public string Reciever {get; einstellen; }}

        öffentlicher String SmtpServer {get; einstellen; }}

        public int Port {get; einstellen; }}

        öffentliche Zeichenfolge UserName {get; einstellen; }}

        öffentlicher String Passwort {get; einstellen; }}

    }}

So können Sie die E-Mail-Konfigurationsdaten aus der Datei appsettings.json in eine Instanz der NotificationMetadata-Klasse lesen.

public void ConfigureServices (IServiceCollection-Dienste)

{

     var notificationMetadata =

     Configuration.GetSection ("NotificationMetadata").

     Bekommen();

     services.AddSingleton (notificationMetadata);

     services.AddControllers ();

}}

Erstellen Sie eine Instanz der EmailMessage-Klasse in ASP.NET Core

Erstellen Sie eine neue Klasse mit dem Namen EmailMessage mit dem folgenden Code:

öffentliche Klasse EmailMessage

    {

        public MailboxAddress Sender {get; einstellen; }}

        public MailboxAddress Reciever {get; einstellen; }}

        öffentlicher String Betreff {get; einstellen; }}

        öffentlicher String Inhalt {get; einstellen; }}

    }}

Erstellen Sie eine Instanz der MimeMessage-Klasse in ASP.NET Core

Die folgende Methode zeigt, wie Sie eine MimeMessage-Instanz aus einer Instanz unserer benutzerdefinierten Klasse EmailMessage erstellen können.

private MimeMessage CreateMimeMessageFromEmailMessage (EmailMessage-Nachricht)

{

     var mimeMessage = new MimeMessage ();

     mimeMessage.From.Add (message.Sender);

     mimeMessage.To.Add (message.Reciever);

     mimeMessage.Subject = message.Subject;

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

     {Text = message.Content};

     return mimeMessage;

}}

Senden Sie E-Mails synchron mit MailKit in ASP.NET Core

Um eine E-Mail zu versenden, müssen wir die SmtpClient-Klasse nutzen, die sich auf den MailKit.Net.Smtp-Namespace bezieht. Das folgende Codefragment zeigt, wie dies getan werden kann.

using (SmtpClient smtpClient = neuer SmtpClient ())

{

  smtpClient.Connect (_notificationMetadata.SmtpServer,

  _notificationMetadata.Port, true);

  smtpClient.Authenticate (_notificationMetadata.UserName,

  _notificationMetadata.Password);

  smtpClient.Send (mimeMessage);

  smtpClient.Disconnect (true);

}}

Hier finden Sie den vollständigen Code der Get-Aktionsmethode unserer DefaultController-Klasse.

öffentlicher String Get ()

{

EmailMessage message = new EmailMessage ();

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

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

message.Subject = "Willkommen";

message.Content = "Hallo Welt!";

var mimeMessage = CreateEmailMessage (Nachricht);

using (SmtpClient smtpClient = neuer SmtpClient ())

 {

    smtpClient.Connect (_notificationMetadata.SmtpServer,

    _notificationMetadata.Port, true);

    smtpClient.Authenticate (_notificationMetadata.UserName,

    _notificationMetadata.Password);

    smtpClient.Send (mimeMessage);

    smtpClient.Disconnect (true);

  }}

 return "E-Mail erfolgreich gesendet";

}}

Senden Sie E-Mails asynchron mit MailKit in ASP.NET Core

Das folgende Codefragment zeigt eine asynchrone Version des Codes, den wir gerade geschrieben haben, um E-Mails synchron zu senden.

using (SmtpClient smtpClient = neuer SmtpClient ())

 {

      Warten Sie auf smtpClient.ConnectAsync (_notificationMetadata.SmtpServer,

      _notificationMetadata.Port, true);

      Warten Sie auf smtpClient.AuthenticateAsync (_notificationMetadata.UserName,

      _notificationMetadata.Password);

      warte auf smtpClient.SendAsync (mimeMessage);

      warte auf smtpClient.DisconnectAsync (true);

 }}

Beachten Sie schließlich, dass Sie mit MailKit auch E-Mails mithilfe von Vorlagen und sogar E-Mails mit Anhängen senden können. Ich werde die zusätzlichen Funktionen von MailKit in einem zukünftigen Artikel hier demonstrieren.