Programovanie

Ako posielať e-maily v ASP.NET Core

Cez svoju aplikáciu budete často musieť posielať e-maily. Balík NuKet MailKit môžete využiť na odosielanie e-mailov v ASP.NET Core. MailKit je knižnica poštových klientov s otvoreným zdrojovým kódom, ktorú je možné použiť v aplikáciách .NET alebo .NET Core spustených v systémoch Windows, Linux alebo Mac. Tento článok predstavuje diskusiu o tom, ako môžeme použiť balík MailKit NuGet na odosielanie e-mailov v ASP.NET Core.

Ak chcete pracovať s príkladmi kódu uvedenými v tomto článku, mali by ste mať vo svojom systéme nainštalovanú aplikáciu Visual Studio 2019. Ak ešte nemáte kópiu, môžete si tu stiahnuť Visual Studio 2019.

Vytvorte projekt rozhrania ASP.NET Core API

Najprv si vytvoríme projekt ASP.NET Core v Visual Studio. Za predpokladu, že je vo vašom systéme nainštalované Visual Studio 2019, postupujte podľa krokov uvedených nižšie a vytvorte nový projekt ASP.NET Core v Visual Studio.

  1. Spustite Visual Studio IDE.
  2. Kliknite na „Vytvoriť nový projekt“.
  3. V okne „Vytvoriť nový projekt“ vyberte zo zobrazeného zoznamu šablón „Webová aplikácia ASP.NET Core“.
  4. Kliknite na Ďalej.
  5. V nasledujúcom okne „Konfigurácia nového projektu“ zadajte názov a umiestnenie nového projektu.
  6. Kliknite na tlačidlo Vytvoriť.
  7. V okne „Vytvoriť novú webovú aplikáciu ASP.Net Core“ vyberte z rozbaľovacieho zoznamu v hornej časti .NET Core ako runtime a ASP.NET Core 2.2 (alebo novší). Budem tu používať ASP.NET Core 3.0.
  8. Vyberte „API“ ako šablónu projektu a vytvorte novú aplikáciu API ASP.NET Core.
  9. Skontrolujte, či nie sú začiarknuté políčka „Povoliť podporu Docker“ a „Konfigurovať pre HTTPS“, pretože tu nebudeme tieto funkcie používať.
  10. Skontrolujte, či je overenie nastavené na „Bez overenia“, pretože tiež nebudeme používať overenie.
  11. Kliknite na tlačidlo Vytvoriť.

Týmto sa vytvorí nový projekt rozhrania ASP.NET Core API v Visual Studio. Vyberte priečinok Riešenie ovládačov v okne Prieskumníka riešení a kliknutím na „Pridať -> Ovládač ...“ vytvorte nový ovládač s názvom DefaultController. Tento projekt použijeme v ďalších častiach tohto článku.

Nainštalujte si balík MailKit NuGet

Ak chcete pracovať s MailKit, mali by ste si nainštalovať balíček MailKit z NuGet. Môžete to urobiť buď prostredníctvom správcu balíkov NuGet vo vnútri IDE Visual Studio 2019, alebo vykonaním nasledujúceho príkazu v konzole správcu balíkov NuGet:

Inštalačný balík NETCore.MailKit

Vo svojom kóde budete tiež musieť pridať odkazy na nasledujúce menné priestory:

pomocou MailKit.Net.Smtp;

pomocou MimeKit;

Zadajte metaúdaje konfigurácie e-mailu v ASP.NET Core

Nasledujúci úryvok kódu ukazuje, ako môžete určiť podrobnosti konfigurácie e-mailu v súbore appsettings.json.

"NotificationMetadata": {

"Sender": "[email protected]",

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

"Reciever": "[email protected]",

„Port“: 465,

"Username": "[email protected]",

"Heslo": "tu zadajte svoje heslo"

  }

Na prečítanie údajov o konfigurácii e-mailu využijeme výhody nasledujúcej triedy.

verejná trieda NotificationMetadata

    {

public string Sender {get; sada; }

public string Reciever {get; sada; }

public string SmtpServer {get; sada; }

public int Port {get; sada; }

verejný reťazec UserName {get; sada; }

verejný reťazec Heslo {get; sada; }

    }

Tu je príklad, ako si môžete prečítať údaje o konfigurácii e-mailu zo súboru appsettings.json do inštancie triedy NotificationMetadata.

public void ConfigureServices (služby IServiceCollection)

{

var notificationMetadata =

Configuration.GetSection ("NotificationMetadata").

Získať ();

services.AddSingleton (notificationMetadata);

services.AddControllers ();

}

Vytvorte inštanciu triedy EmailMessage v ASP.NET Core

Vytvorte novú triedu s názvom EmailMessage s nasledujúcim kódom:

verejná trieda EmailMessage

    {

public MailboxAddress Sender {get; sada; }

public MailboxAddress Reciever {get; sada; }

public string Predmet {get; sada; }

public string Obsah {get; sada; }

    }

Vytvorte inštanciu triedy MimeMessage v ASP.NET Core

Nasledujúca metóda ukazuje, ako môžete vytvoriť inštanciu MimeMessage z inštancie našej vlastnej triedy EmailMessage.

súkromná MimeMessage CreateMimeMessageFromEmailMessage (e-mailová sprá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átiť mimeMessage;

}

Posielajte e-maily synchronne pomocou MailKit v ASP.NET Core

Aby sme mohli poslať e-mail, musíme využiť výhodu triedy SmtpClient, ktorá sa týka menného priestoru MailKit.Net.Smtp. Nasledujúci úryvok kódu ilustruje, ako je to možné.

pomocou (SmtpClient smtpClient = nový SmtpClient ())

{

smtpClient.Connect (_notificationMetadata.SmtpServer,

_notificationMetadata.Port, true);

smtpClient.Authenticate (_notificationMetadata.UserName,

_notificationMetadata.Password);

smtpClient.Send (mimeMessage);

smtpClient.Disconnect (true);

}

Tu je pre vaše pohodlie kompletný kód metódy Get action našej triedy DefaultController.

verejný reťazec Get ()

{

Správa EmailMessage = nová EmailMessage ();

message.Sender = nová MailboxAddress ("Ja", _notificationMetadata.Sender);

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

message.Subject = "Vitajte";

message.Content = "Hello World!";

var mimeMessage = CreateEmailMessage (správa);

pomocou (SmtpClient smtpClient = nový SmtpClient ())

 {

smtpClient.Connect (_notificationMetadata.SmtpServer,

_notificationMetadata.Port, true);

smtpClient.Authenticate (_notificationMetadata.UserName,

_notificationMetadata.Password);

smtpClient.Send (mimeMessage);

smtpClient.Disconnect (true);

  }

vrátiť "E-mail bol úspešne odoslaný";

}

Posielajte e-maily asynchrónne pomocou MailKit v ASP.NET Core

Nasledujúci úryvok kódu ilustruje asynchrónnu verziu kódu, ktorý sme práve napísali na synchrónne odosielanie e-mailov.

pomocou (SmtpClient smtpClient = nový SmtpClient ())

 {

čaká smtpClient.ConnectAsync (_notificationMetadata.SmtpServer,

_notificationMetadata.Port, true);

čaká smtpClient.AuthenticateAsync (_notificationMetadata.UserName,

_notificationMetadata.Password);

await smtpClient.SendAsync (mimeMessage);

await smtpClient.DisconnectAsync (true);

 }

Na záver nezabudnite, že MailKit vám tiež umožňuje posielať e-maily pomocou šablón a dokonca aj e-mailov s prílohami. V ďalšom článku tu ukážem ďalšie funkcie MailKit.

$config[zx-auto] not found$config[zx-overlay] not found