Programmering

Sådan sendes e-mails i ASP.NET Core

Du har ofte behov for at sende e-mails via din ansøgning. Du kan drage fordel af MailKit NuGet-pakken til at sende e-mails i ASP.NET Core. MailKit er et open source-mailklientbibliotek, der kan bruges i .NET- eller .NET Core-applikationer, der kører på Windows-, Linux- eller Mac-systemer. Denne artikel præsenterer en diskussion af, hvordan vi kan bruge MailKit NuGet-pakken til at sende e-mails i ASP.NET Core.

For at arbejde med kodeeksemplerne i denne artikel skal du have Visual Studio 2019 installeret i dit system. Hvis du ikke allerede har en kopi, kan du downloade Visual Studio 2019 her.

Opret et ASP.NET Core API-projekt

Lad os først starte med at oprette et ASP.NET Core-projekt i Visual Studio. Forudsat at Visual Studio 2019 er installeret i dit system, skal du følge trinene beskrevet nedenfor for at oprette et nyt ASP.NET Core-projekt i Visual Studio.

  1. Start Visual Studio IDE.
  2. Klik på "Opret nyt projekt."
  3. I vinduet "Opret nyt projekt" skal du vælge "ASP.NET Core Web Application" fra listen over skabeloner, der vises.
  4. Klik på Næste.
  5. I vinduet "Konfigurer dit nye projekt", der vises nedenfor, skal du angive navnet og placeringen for det nye projekt.
  6. Klik på Opret.
  7. I vinduet "Opret ny ASP.Net Core-webapplikation" skal du vælge .NET Core som runtime og ASP.NET Core 2.2 (eller nyere) fra rullelisten øverst. Jeg bruger ASP.NET Core 3.0 her.
  8. Vælg “API” som projektskabelon for at oprette en ny ASP.NET Core API-applikation.
  9. Sørg for, at afkrydsningsfelterne "Aktivér Docker-support" og "Konfigurer til HTTPS" ikke er markeret, da vi ikke bruger disse funktioner her.
  10. Sørg for, at godkendelse er indstillet som "Ingen godkendelse", da vi heller ikke bruger godkendelse.
  11. Klik på Opret.

Dette opretter et nyt ASP.NET Core API-projekt i Visual Studio. Vælg Controllers-løsningsmappen i vinduet Solution Explorer, og klik på "Tilføj -> Controller ..." for at oprette en ny controller med navnet DefaultController. Vi bruger dette projekt i de efterfølgende afsnit i denne artikel.

Installer MailKit NuGet-pakken

For at arbejde med MailKit skal du installere MailKit-pakken fra NuGet. Du kan gøre dette enten via NuGet pakkehåndtering inde i Visual Studio 2019 IDE eller ved at udføre følgende kommando på NuGet pakkehåndteringskonsol:

Install-pakke NETCore.MailKit

Du skal også tilføje referencer til følgende navneområder i din kode:

ved hjælp af MailKit.Net.Smtp;

ved hjælp af MimeKit;

Angiv e-mail-konfigurationsmetadata i ASP.NET Core

Følgende kodestykke viser, hvordan du kan specificere e-mail-konfigurationsoplysningerne i filen appsettings.json.

"NotificationMetadata": {

"Afsender": "[email protected]",

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

"Modtager": "[email protected]",

"Havn": 465,

"Brugernavn": "[email protected]",

"Adgangskode": "angiv din adgangskode her"

  }

For at læse e-mail-konfigurationsdataene drager vi fordel af følgende klasse.

offentlig klasse NotificationMetadata

    {

offentlig streng Afsender {get; sæt; }

public string Reciever {get; sæt; }

offentlig streng SmtpServer {get; sæt; }

offentlig int Port {get; sæt; }

public string UserName {get; sæt; }

public string Adgangskode {get; sæt; }

    }

Sådan kan du læse e-mail-konfigurationsdataene fra appsettings.json-filen i en forekomst af NotificationMetadata-klassen.

offentlig ugyldighed ConfigureServices (IServiceCollection-tjenester)

{

var notificationMetadata =

Configuration.GetSection ("NotificationMetadata").

Få();

services.AddSingleton (notifikationsmetadata);

services.AddControllers ();

}

Opret en forekomst af klassen EmailMessage i ASP.NET Core

Opret en ny klasse med navnet EmailMessage med følgende kode:

offentlig klasse EmailMessage

    {

offentlig MailboxAddress-afsender {get; sæt; }

offentlig MailboxAddress-modtager {get; sæt; }

public string Emne {get; sæt; }

public string Content {get; sæt; }

    }

Opret en forekomst af MimeMessage-klassen i ASP.NET Core

Den følgende metode illustrerer, hvordan du kan oprette en MimeMessage-forekomst fra en forekomst af vores brugerdefinerede klasse EmailMessage.

privat MimeMessage OpretMimeMessageFromEmailMessage (EmailMessage besked)

{

var mimeMessage = ny MimeMessage ();

mimeMessage.From.Add (besked.Sender);

mimeMessage.To.Add (besked.Reciever);

mimeMessage.Subject = besked.Subject;

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

{Text = message.Content};

returner mimeMessage;

}

Send e-mails synkront ved hjælp af MailKit i ASP.NET Core

For at sende en e-mail er vi nødt til at drage fordel af klassen SmtpClient vedrørende MailKit.Net.Smtp-navneområdet. Følgende kodestykke illustrerer, hvordan dette kan gøres.

ved hjælp af (SmtpClient smtpClient = ny SmtpClient ())

{

smtpClient.Connect (_notificationMetadata.SmtpServer,

_notificationMetadata.Port, sand);

smtpClient.Authenticate (_notificationMetadata.UserName,

_notificationMetadata.Password);

smtpClient.Send (mimeMessage);

smtpClient.Disconnect (sand);

}

Her er den komplette kode for Get-handlingsmetoden i vores StandardController-klasse for din bekvemmelighed.

public string Get ()

{

EmailMessage-meddelelse = ny EmailMessage ();

message.Sender = ny MailboxAddress ("Selv", _notificationMetadata.Sender);

message.Reciever = ny MailboxAddress ("Selv", _notificationMetadata.Reciever);

message.Subject = "Velkommen";

message.Content = "Hej verden!";

var mimeMessage = OpretE-mailMessage (besked);

ved hjælp af (SmtpClient smtpClient = ny SmtpClient ())

 {

smtpClient.Connect (_notificationMetadata.SmtpServer,

_notificationMetadata.Port, sand);

smtpClient.Authenticate (_notificationMetadata.UserName,

_notificationMetadata.Password);

smtpClient.Send (mimeMessage);

smtpClient.Disconnect (sand);

  }

returner "E-mail sendt med succes";

}

Send e-mails asynkront ved hjælp af MailKit i ASP.NET Core

Følgende kodestykke illustrerer en asynkron version af den kode, vi lige har skrevet for at sende e-mails synkront.

ved hjælp af (SmtpClient smtpClient = ny SmtpClient ())

 {

afventer smtpClient.ConnectAsync (_notificationMetadata.SmtpServer,

_notificationMetadata.Port, sand);

afventer smtpClient.AuthenticateAsync (_notificationMetadata.UserName,

_notificationMetadata.Password);

afventer smtpClient.SendAsync (mimeMessage);

afventer smtpClient.DisconnectAsync (sand);

 }

Endelig bemærk, at MailKit også giver dig mulighed for at sende e-mails ved hjælp af skabeloner og endda e-mails, der har vedhæftede filer. Jeg vil demonstrere de ekstra funktioner i MailKit i en fremtidig artikel her.