Programmering

Hvordan sende e-post i ASP.NET Core

Du vil ofte ha behov for å sende e-post gjennom søknaden din. Du kan dra nytte av MailKit NuGet-pakken for å sende e-post i ASP.NET Core. MailKit er et åpen kildekode-e-postklientbibliotek som kan brukes i .NET- eller .NET Core-applikasjoner som kjører på Windows-, Linux- eller Mac-systemer. Denne artikkelen presenterer en diskusjon om hvordan vi kan bruke MailKit NuGet-pakken til å sende e-post i ASP.NET Core.

For å jobbe med kodeeksemplene som er gitt i denne artikkelen, bør du ha Visual Studio 2019 installert på systemet ditt. Hvis du ikke allerede har en kopi, kan du laste ned Visual Studio 2019 her.

Opprett et ASP.NET Core API-prosjekt

Først og fremst, la oss lage et ASP.NET Core-prosjekt i Visual Studio. Forutsatt at Visual Studio 2019 er installert i systemet ditt, følger du trinnene som er beskrevet nedenfor for å opprette et nytt ASP.NET Core-prosjekt i Visual Studio.

  1. Start Visual Studio IDE.
  2. Klikk på "Opprett nytt prosjekt."
  3. I vinduet "Opprett nytt prosjekt" velger du "ASP.NET Core Web Application" fra listen over maler som vises.
  4. Klikk på Neste.
  5. I vinduet “Konfigurer ditt nye prosjekt” som vises, angir du navnet og stedet for det nye prosjektet.
  6. Klikk på Opprett.
  7. I vinduet "Create New ASP.Net Core Web Application" velger du .NET Core som kjøretid og ASP.NET Core 2.2 (eller nyere) fra rullegardinlisten øverst. Jeg bruker ASP.NET Core 3.0 her.
  8. Velg “API” som prosjektmal for å opprette et nytt ASP.NET Core API-program.
  9. Forsikre deg om at avmerkingsboksene "Aktiver Docker-støtte" og "Konfigurer for HTTPS" ikke er merket av da vi ikke bruker disse funksjonene her.
  10. Forsikre deg om at autentisering er angitt som “ingen godkjenning”, da vi heller ikke bruker autentisering.
  11. Klikk på Opprett.

Dette vil opprette et nytt ASP.NET Core API-prosjekt i Visual Studio. Velg Controllers-løsningsmappen i Solution Explorer-vinduet, og klikk "Legg til -> Controller ..." for å opprette en ny kontroller som heter DefaultController. Vi bruker dette prosjektet i de påfølgende delene av denne artikkelen.

Installer MailKit NuGet-pakken

For å jobbe med MailKit, bør du installere MailKit-pakken fra NuGet. Du kan gjøre dette enten via NuGet pakkebehandling i Visual Studio 2019 IDE, eller ved å utføre følgende kommando på NuGet pakkebehandler-konsoll:

Install-Package NETCore.MailKit

Du må også legge til referanser til følgende navneområder i koden din:

ved hjelp av MailKit.Net.Smtp;

ved hjelp av MimeKit;

Angi metadata for konfigurasjon av e-post i ASP.NET Core

Følgende kodebit viser hvordan du kan spesifisere e-postkonfigurasjonsdetaljene i filen appsettings.json.

"NotificationMetadata": {

"Avsender": "[email protected]",

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

"Mottaker": "[email protected]",

"Port": 465,

"Brukernavn": "[email protected]",

"Passord": "spesifiser passordet ditt her"

  }

For å lese e-postkonfigurasjonsdataene, vil vi dra nytte av følgende klasse.

offentlig klasse NotificationMetadata

    {

offentlig streng Avsender {get; sett; }

offentlig strengmottaker {get; sett; }

offentlig streng SmtpServer {get; sett; }

offentlig int Port {get; sett; }

offentlig streng UserName {get; sett; }

offentlig streng Passord {get; sett; }

    }

Slik kan du lese konfigurasjonsdataene for e-post fra appsettings.json-filen til en forekomst av NotificationMetadata-klassen.

offentlig ugyldighet ConfigureServices (IServiceCollection-tjenester)

{

var notificationMetadata =

Configuration.GetSection ("NotificationMetadata").

Få();

services.AddSingleton (notificationMetadata);

tjenester.AddControllers ();

}

Opprett en forekomst av klassen EmailMessage i ASP.NET Core

Opprett en ny klasse som heter EmailMessage med følgende kode:

offentlig klasse EmailMessage

    {

offentlig MailboxAddress Sender {get; sett; }

offentlig MailboxAddress-mottaker {get; sett; }

offentlig streng Emne {get; sett; }

public string Content {get; sett; }

    }

Opprett en forekomst av MimeMessage-klassen i ASP.NET Core

Følgende metode illustrerer hvordan du kan opprette en MimeMessage-forekomst fra en forekomst av vår egendefinerte klasse EmailMessage.

private MimeMessage CreateMimeMessageFromEmailMessage (EmailMessage message)

{

var mimeMessage = ny MimeMessage ();

mimeMessage.From.Add (melding.Sender);

mimeMessage.To.Add (melding. mottaker);

mimeMessage.Subject = melding.Subject;

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

{Text = message.Content};

return mimeMessage;

}

Send e-post synkront ved hjelp av MailKit i ASP.NET Core

For å sende ut en e-post må vi dra nytte av SmtpClient-klassen som gjelder MailKit.Net.Smtp-navneområdet. Følgende kodebit illustrerer hvordan dette kan gjøres.

bruker (SmtpClient smtpClient = ny SmtpClient ())

{

smtpClient.Connect (_notificationMetadata.SmtpServer,

_notificationMetadata.Port, true);

smtpClient.Authenticate (_notificationMetadata.UserName,

_notificationMetadata.Password);

smtpClient.Send (mimeMessage);

smtpClient.Disconnect (true);

}

Her er den komplette koden for Get-handlingsmetoden i vår StandardController-klasse for din bekvemmelighet.

offentlig streng Get ()

{

EmailMessage melding = ny EmailMessage ();

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

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

message.Subject = "Velkommen";

message.Content = "Hei verden!";

var mimeMessage = CreateEmailMessage (melding);

bruker (SmtpClient smtpClient = ny SmtpClient ())

 {

smtpClient.Connect (_notificationMetadata.SmtpServer,

_notificationMetadata.Port, true);

smtpClient.Authenticate (_notificationMetadata.UserName,

_notificationMetadata.Password);

smtpClient.Send (mimeMessage);

smtpClient.Disconnect (true);

  }

returner "E-post sendt vellykket";

}

Send e-post asynkront ved hjelp av MailKit i ASP.NET Core

Følgende kodebit illustrerer en asynkron versjon av koden vi nettopp skrev for å sende e-post synkront.

bruker (SmtpClient smtpClient = ny SmtpClient ())

 {

venter på smtpClient.ConnectAsync (_notificationMetadata.SmtpServer,

_notificationMetadata.Port, true);

venter på smtpClient.AuthenticateAsync (_notificationMetadata.UserName,

_notificationMetadata.Password);

venter på smtpClient.SendAsync (mimeMessage);

venter på smtpClient.DisconnectAsync (true);

 }

Til slutt, merk at MailKit også lar deg sende e-post ved hjelp av maler og til og med e-poster som har vedlegg. Jeg vil demonstrere tilleggsfunksjonene til MailKit i en fremtidig artikkel her.

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