Kako poslati e-poštu u ASP.NET Core

Često ćete imati potrebu za slanjem e-pošte putem aplikacije. Možete iskoristiti paket MailKit NuGet za slanje e-pošte u ASP.NET Core. MailKit je knjižnica klijenta pošte otvorenog koda koja se može koristiti u programima .NET ili .NET Core koji rade na sustavima Windows, Linux ili Mac. Ovaj članak predstavlja raspravu o tome kako možemo koristiti paket MailKit NuGet za slanje e-pošte u ASP.NET Core.

Da biste radili s primjerima koda iz ovog članka, u sustavu biste trebali instalirati Visual Studio 2019. Ako još nemate kopiju, ovdje možete preuzeti Visual Studio 2019. 

Stvorite projekt ASP.NET Core API

Prvo, kreirajmo ASP.NET Core projekt u Visual Studiju. Pod pretpostavkom da je Visual Studio 2019 instaliran u vašem sustavu, slijedite korake opisane u nastavku da biste u Visual Studiou stvorili novi ASP.NET Core projekt.

  1. Pokrenite Visual Studio IDE.
  2. Kliknite "Stvori novi projekt".
  3. U prozoru "Stvori novi projekt" s popisa predložaka odaberite "ASP.NET Core Web Application".
  4. Kliknite Dalje.
  5. U sljedećem prozoru "Konfiguriranje novog projekta" navedite naziv i mjesto za novi projekt.
  6. Kliknite Stvori.
  7. U prozoru "Stvori novu web-aplikaciju ASP.Net Core" odaberite .NET Core kao vrijeme izvođenja i ASP.NET Core 2.2 (ili noviju) s padajućeg popisa na vrhu. Ovdje ću koristiti ASP.NET Core 3.0.
  8. Odaberite "API" kao predložak projekta da biste stvorili novu aplikaciju ASP.NET Core API. 
  9. Obavezno označite potvrdne okvire "Omogući podršku za Docker" i "Konfiguriraj za HTTPS" jer ovdje nećemo koristiti te značajke.
  10. Provjerite je li provjera autentičnosti postavljena na "Bez provjere autentičnosti" jer ni mi nećemo koristiti provjeru autentičnosti.
  11. Kliknite Stvori. 

To će stvoriti novi ASP.NET Core API projekt u Visual Studiju. Odaberite mapu rješenja Controllers u prozoru Solution Explorer i kliknite "Dodaj -> Controller ..." da biste stvorili novi kontroler nazvan DefaultController. Ovaj projekt koristit ćemo u sljedećim odjeljcima ovog članka.

Instalirajte paket MailKit NuGet

Da biste radili s MailKitom, trebali biste instalirati paket MailKit iz NuGet-a. To možete učiniti putem upravitelja paketa NuGet unutar IDE-a Visual Studio 2019 ili izvršavanjem sljedeće naredbe na konzoli upravitelja paketa NuGet:

Instalacijski paket NETCore.MailKit

Također ćete morati dodati reference na sljedeće prostore imena u svom kodu:

pomoću MailKit.Net.Smtp;

pomoću MimeKita;

Navedite metapodatke o konfiguraciji e-pošte u ASP.NET Core

Sljedeći isječak koda pokazuje kako možete odrediti detalje o konfiguraciji e-pošte u datoteci appsettings.json.

"NotificationMetadata": {

    "Pošiljatelj": "[email protected]",

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

    "Primatelj": "[email protected]",

    "Luka": 465,

    "Korisničko ime": "[email protected]",

    "Password": "ovdje navedite lozinku"

  }

Za čitanje podataka o konfiguraciji e-pošte iskoristit ćemo prednost sljedeće klase.

javna klasa NotificationMetadata

    {

        javni niz Pošiljatelj {get; postavljen; }

        javni niz primatelj {get; postavljen; }

        javni niz SmtpServer {get; postavljen; }

        javni int Port {get; postavljen; }

        javni niz UserName {get; postavljen; }

        javni niz Lozinka {get; postavljen; }

    }

Evo kako možete pročitati podatke o konfiguraciji e-pošte iz datoteke appsettings.json u instancu klase NotificationMetadata.

javna praznina ConfigureServices (usluge IServiceCollection)

{

     var notificationMetadata =

     Configuration.GetSection ("NotificationMetadata").

     Dobiti();

     services.AddSingleton (notificationMetadata);

     services.AddControllers ();

}

Stvorite instancu klase EmailMessage u ASP.NET Core

Stvorite novu klasu nazvanu EmailMessage sa sljedećim kodom:

javna klasa EmailMessage

    {

        javni poštanski pretinac Pošiljatelj adrese {get; postavljen; }

        javni poštanski pretinac Primatelj adrese {get; postavljen; }

        javni niz Predmet {get; postavljen; }

        javni niz Sadržaj {get; postavljen; }

    }

Stvorite instancu klase MimeMessage u ASP.NET Core

Sljedeća metoda ilustrira kako možete stvoriti instancu MimeMessage iz instance naše prilagođene klase EmailMessage.

privatna MimeMessage CreateMimeMessageFromEmailMessage (poruka e-pošte)

{

     var mimeMessage = novo MimeMessage ();

     mimeMessage.From.Add (message.Sender);

     mimeMessage.To.Add (message.Reciever);

     mimeMessage.Subject = message.Subject;

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

     {Tekst = message.Content};

     povratak mimeMessage;

}

Šaljite e-poštu sinkrono koristeći MailKit u ASP.NET Core

Da bismo poslali e-poštu, moramo iskoristiti klasu SmtpClient koja se odnosi na prostor imena MailKit.Net.Smtp. Sljedeći isječak koda ilustrira kako se to može učiniti.

pomoću (SmtpClient smtpClient = novi SmtpClient ())

{

  smtpClient.Connect (_notificationMetadata.SmtpServer,

  _notificationMetadata.Port, true);

  smtpClient.Authenticate (_notificationMetadata.UserName,

  _notificationMetadata.Password);

  smtpClient.Send (mimeMessage);

  smtpClient.Disconnect (true);

}

Evo potpunog koda metode Dohvati radnju naše klase DefaultController radi vaše udobnosti.

javni niz Get ()

{

Poruka EmailMessage = nova EmailMessage ();

message.Sender = nova adresa poštanskog sandučića ("Self", _notificationMetadata.Sender);

message.Reciever = nova adresa poštanskog sandučića ("Self", _notificationMetadata.Reciever);

message.Subject = "Dobrodošli";

message.Content = "Pozdrav svijetu!";

var mimeMessage = CreateEmailMessage (poruka);

pomoću (SmtpClient smtpClient = novi SmtpClient ())

 {

    smtpClient.Connect (_notificationMetadata.SmtpServer,

    _notificationMetadata.Port, true);

    smtpClient.Authenticate (_notificationMetadata.UserName,

    _notificationMetadata.Password);

    smtpClient.Send (mimeMessage);

    smtpClient.Disconnect (true);

  }

 return "E-pošta uspješno poslana";

}

Šaljite e-poštu asinkrono koristeći MailKit u ASP.NET Core

Sljedeći isječak koda ilustrira asinkronu verziju koda koji smo upravo napisali za sinkrono slanje e-pošte.

pomoću (SmtpClient smtpClient = novi SmtpClient ())

 {

      čeka smtpClient.ConnectAsync (_notificationMetadata.SmtpServer,

      _notificationMetadata.Port, true);

      čeka smtpClient.AuthenticateAsync (_notificationMetadata.UserName,

      _notificationMetadata.Password);

      čeka smtpClient.SendAsync (mimeMessage);

      čeka smtpClient.DisconnectAsync (istina);

 }

Na kraju, imajte na umu da MailKit također omogućuje slanje e-pošte pomoću predložaka, pa čak i e-pošte s privitcima. Dodatne značajke MailKita pokazat ću u sljedećem članku ovdje.