Programování

Jak odesílat e-maily v ASP.NET Core

Často budete muset posílat e-maily prostřednictvím své aplikace. Balíček MailKit NuGet můžete využít k odesílání e-mailů v ASP.NET Core. MailKit je klientská knihovna poštovního klienta s otevřeným zdrojovým kódem, kterou lze použít v aplikacích .NET nebo .NET Core spuštěných v systémech Windows, Linux nebo Mac. Tento článek představuje diskusi o tom, jak můžeme použít balíček MailKit NuGet k odesílání e-mailů v ASP.NET Core.

Chcete-li pracovat s příklady kódu uvedenými v tomto článku, měli byste mít ve svém systému nainstalovanou Visual Studio 2019. Pokud ještě nemáte kopii, můžete si stáhnout Visual Studio 2019 zde.

Vytvořte projekt rozhraní API ASP.NET Core

Nejprve si vytvořme projekt ASP.NET Core v sadě Visual Studio. Za předpokladu, že je ve vašem systému nainstalovaná sada Visual Studio 2019, postupujte podle níže uvedených kroků a vytvořte nový projekt ASP.NET Core v sadě Visual Studio.

  1. Spusťte Visual Studio IDE.
  2. Klikněte na „Vytvořit nový projekt“.
  3. V okně „Vytvořit nový projekt“ vyberte ze zobrazeného seznamu šablon „Webová aplikace ASP.NET Core“.
  4. Klikněte na Další.
  5. V dalším okně „Konfigurace nového projektu“ zadejte název a umístění nového projektu.
  6. Klikněte na Vytvořit.
  7. V okně „Vytvořit novou webovou aplikaci ASP.Net Core“ vyberte v rozevíracím seznamu nahoře jako běhové prostředí .NET Core a ASP.NET Core 2.2 (nebo novější). Budu zde používat ASP.NET Core 3.0.
  8. Vyberte „API“ jako šablonu projektu a vytvořte novou aplikaci API ASP.NET Core.
  9. Ujistěte se, že políčka „Povolit podporu Dockeru“ a „Konfigurovat pro HTTPS“ nejsou zaškrtnuta, protože zde tyto funkce nebudeme používat.
  10. Ujistěte se, že je ověřování nastaveno na „Žádné ověřování“, protože také nebudeme používat ověřování.
  11. Klikněte na Vytvořit.

Tím se vytvoří nový projekt rozhraní API ASP.NET Core v sadě Visual Studio. Vyberte složku řešení Controllers v okně Solution Explorer a kliknutím na „Přidat -> Controller ...“ vytvořte nový řadič s názvem DefaultController. Tento projekt použijeme v následujících částech tohoto článku.

Nainstalujte balíček NuKet MailKit

Chcete-li pracovat s MailKit, měli byste nainstalovat balíček MailKit z NuGet. Můžete to udělat buď prostřednictvím správce balíčků NuGet uvnitř IDE sady Visual Studio 2019, nebo provedením následujícího příkazu v konzole správce balíčků NuGet:

Instalační balíček NETCore.MailKit

Budete také muset přidat odkazy na následující jmenné prostory ve vašem kódu:

pomocí MailKit.Net.Smtp;

pomocí MimeKit;

Zadejte metadata konfigurace e-mailu v ASP.NET Core

Následující fragment kódu ukazuje, jak můžete zadat podrobnosti konfigurace e-mailu v souboru appsettings.json.

"NotificationMetadata": {

"Sender": "[email protected]",

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

"Reciever": "[email protected]",

"Port": 465,

"Username": "[email protected]",

"Password": "zde zadejte své heslo"

  }

Abychom si mohli přečíst údaje o konfiguraci e-mailu, využijeme výhody následující třídy.

veřejná třída NotificationMetadata

    {

public string Sender {get; soubor; }

public string Reciever {get; soubor; }

public string SmtpServer {get; soubor; }

public int Port {get; soubor; }

veřejný řetězec UserName {get; soubor; }

public string Heslo {get; soubor; }

    }

Zde je návod, jak si můžete přečíst data konfigurace e-mailu ze souboru appsettings.json do instance třídy NotificationMetadata.

public void ConfigureServices (služby IServiceCollection)

{

var notificationMetadata =

Configuration.GetSection ("NotificationMetadata").

Dostat();

services.AddSingleton (notificationMetadata);

services.AddControllers ();

}

Vytvořte instanci třídy EmailMessage v ASP.NET Core

Vytvořte novou třídu s názvem EmailMessage s následujícím kódem:

veřejná třída EmailMessage

    {

public MailboxAddress Sender {get; soubor; }

public MailboxAddress Reciever {get; soubor; }

public string Předmět {get; soubor; }

public string Obsah {get; soubor; }

    }

Vytvořte instanci třídy MimeMessage třídy v ASP.NET Core

Následující metoda ukazuje, jak můžete vytvořit instanci MimeMessage z instance naší vlastní třídy EmailMessage.

soukromá MimeMessage CreateMimeMessageFromEmailMessage (e-mailová zpráva)

{

var mimeMessage = nový MimeMessage ();

mimeMessage.From.Add (message.Sender);

mimeMessage.To.Add (message.Reciever);

mimeMessage.Subject = message.Subject;

mimeMessage.Body = nový TextPart (MimeKit.Text.TextFormat.Text)

{Text = message.Content};

vrátit mimeMessage;

}

Odesílejte e-maily synchronně pomocí MailKit v ASP.NET Core

Chcete-li odeslat e-mail, musíme využít třídu SmtpClient týkající se oboru názvů MailKit.Net.Smtp. Následující fragment kódu ukazuje, jak toho lze dosáhnout.

pomocí (SmtpClient smtpClient = nový SmtpClient ())

{

smtpClient.Connect (_notificationMetadata.SmtpServer,

_notificationMetadata.Port, true);

smtpClient.Authenticate (_notificationMetadata.UserName,

_notificationMetadata.Password);

smtpClient.Send (mimeMessage);

smtpClient.Disconnect (true);

}

Tady je kompletní kód metody Get akce naší třídy DefaultController pro vaše pohodlí.

veřejný řetězec Get ()

{

Zpráva EmailMessage = nová EmailMessage ();

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

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

message.Subject = "Vítejte";

message.Content = "Ahoj světe!";

var mimeMessage = CreateEmailMessage (zpráva);

pomocí (SmtpClient smtpClient = nový SmtpClient ())

 {

smtpClient.Connect (_notificationMetadata.SmtpServer,

_notificationMetadata.Port, true);

smtpClient.Authenticate (_notificationMetadata.UserName,

_notificationMetadata.Password);

smtpClient.Send (mimeMessage);

smtpClient.Disconnect (true);

  }

vrátit "E-mail byl úspěšně odeslán";

}

Odesílejte e-maily asynchronně pomocí MailKit v ASP.NET Core

Následující fragment kódu ilustruje asynchronní verzi kódu, který jsme právě napsali k synchronnímu odesílání e-mailů.

pomocí (SmtpClient smtpClient = nový SmtpClient ())

 {

čekat smtpClient.ConnectAsync (_notificationMetadata.SmtpServer,

_notificationMetadata.Port, true);

čekat smtpClient.AuthenticateAsync (_notificationMetadata.UserName,

_notificationMetadata.Password);

čekat smtpClient.SendAsync (mimeMessage);

čekat smtpClient.DisconnectAsync (true);

 }

Nakonec si uvědomte, že MailKit také umožňuje posílat e-maily pomocí šablon a dokonce i e-mailů, které mají přílohy. V dalším článku zde ukážu další funkce MailKit.