Cara menghantar e-mel dalam ASP.NET Core

Anda sering kali perlu menghantar e-mel melalui aplikasi anda. Anda boleh memanfaatkan pakej MailKit NuGet untuk menghantar e-mel di ASP.NET Core. MailKit adalah pustaka pelanggan mel sumber terbuka yang dapat digunakan dalam aplikasi .NET atau .NET Core yang dijalankan pada sistem Windows, Linux, atau Mac. Artikel ini memaparkan perbincangan mengenai bagaimana kita dapat menggunakan pakej MailKit NuGet untuk menghantar e-mel di ASP.NET Core.

Untuk bekerja dengan contoh kod yang disediakan dalam artikel ini, anda harus memasang Visual Studio 2019 di sistem anda. Sekiranya anda belum mempunyai salinannya, anda boleh memuat turun Visual Studio 2019 di sini. 

Buat projek ASP.NET Core API

Pertama, mari buat projek Teras ASP.NET di Visual Studio. Dengan mengandaikan Visual Studio 2019 dipasang di sistem anda, ikuti langkah-langkah yang digariskan di bawah untuk membuat projek Teras ASP.NET baru di Visual Studio.

  1. Lancarkan ID Studio Visual.
  2. Klik pada "Buat projek baru."
  3. Di tetingkap "Buat projek baru", pilih "Aplikasi Web Inti ASP.NET" dari senarai templat yang dipaparkan.
  4. Klik Seterusnya.
  5. Di tetingkap "Konfigurasikan projek baru anda" yang ditunjukkan di sebelah, tentukan nama dan lokasi untuk projek baru.
  6. Klik Buat.
  7. Di tetingkap "Buat Aplikasi Web ASP.Net Core Baru", pilih .NET Core sebagai runtime dan ASP.NET Core 2.2 (atau lebih baru) dari senarai drop-down di bahagian atas. Saya akan menggunakan ASP.NET Core 3.0 di sini.
  8. Pilih "API" sebagai templat projek untuk membuat aplikasi ASP.NET Core API baru. 
  9. Pastikan bahawa kotak centang "Aktifkan Docker Support" dan "Configure for HTTPS" tidak dicentang kerana kami tidak akan menggunakan fitur tersebut di sini.
  10. Pastikan bahawa Pengesahan ditetapkan sebagai "Tanpa Pengesahan" kerana kami juga tidak akan menggunakan pengesahan.
  11. Klik Buat. 

Ini akan membuat projek ASP.NET Core API baru di Visual Studio. Pilih folder penyelesaian Pengawal di tetingkap Penyelesaian Penyelesaian dan klik "Tambah -> Pengawal ..." untuk membuat pengawal baru bernama DefaultController. Kami akan menggunakan projek ini di bahagian seterusnya artikel ini.

Pasang pakej MailKit NuGet

Untuk bekerja dengan MailKit, anda harus memasang pakej MailKit dari NuGet. Anda boleh melakukannya sama ada melalui pengurus pakej NuGet di dalam Visual Studio 2019 IDE, atau dengan melaksanakan perintah berikut di konsol pengurus pakej NuGet:

Pasang-Pakej NETCore.MailKit

Anda juga perlu menambahkan rujukan ke ruang nama berikut dalam kod anda:

menggunakan MailKit.Net.Smtp;

menggunakan MimeKit;

Tentukan metadata konfigurasi e-mel dalam ASP.NET Core

Coretan kod berikut menunjukkan bagaimana anda dapat menentukan butiran konfigurasi e-mel dalam fail appsettings.json.

"NotificationMetadata": {

    "Pengirim": "[email protected]",

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

    "Penerima": "[email protected]",

    "Pelabuhan": 465,

    "Nama Pengguna": "[email protected]",

    "Kata Laluan": "nyatakan kata laluan anda di sini"

  }

Untuk membaca data konfigurasi e-mel, kami akan memanfaatkan kelas berikut.

NotifikasiMetadata kelas awam

    {

        rentetan awam Sender {get; menetapkan; }

        Penerima rentetan awam {get; menetapkan; }

        rentetan awam SmtpServer {get; menetapkan; }

        Pelabuhan int awam {get; menetapkan; }

        rentetan awamNama Pengguna {get; menetapkan; }

        kata laluan rentetan awam {get; menetapkan; }

    }

Inilah cara anda dapat membaca data konfigurasi e-mel dari fail appsettings.json ke dalam kelas NotificationMetadata.

kekosongan awam ConfigureServices (perkhidmatan IServiceCollection)

{

     var notificationMetadata =

     Konfigurasi.GetSection ("NotificationMetadata").

     Dapatkan ();

     perkhidmatan.AddSingleton (notificationMetadata);

     perkhidmatan.AddControllers ();

}

Buat contoh kelas EmailMessage di ASP.NET Core

Buat kelas baru bernama EmailMessage dengan kod berikut:

e-mel kelas awam

    {

        Pengirim Peti Surat awam pengirim {get; menetapkan; }

        Penerima Alamat Surat Mel awam {get; menetapkan; }

        Subjek rentetan awam {get; menetapkan; }

        Kandungan rentetan awam {get; menetapkan; }

    }

Buat contoh kelas MimeMessage di ASP.NET Core

Kaedah berikut menggambarkan bagaimana anda dapat membuat instance MimeMessage dari instance EmailMessage kelas tersuai kami.

peribadi MimeMessage CreateMimeMessageFromEmailMessage (mesej EmailMessage)

{

     var mimeMessage = MimeMessage baru ();

     mimeMessage.From.Add (message.Sender);

     mimeMessage.To.Add (message.Reciever);

     mimeMessage.Subject = message.Subject;

     mimeMessage.Body = Bahagian Teks baru (MimeKit.Text.TextFormat.Text)

     {Teks = mesej.Kandungan};

     kembalikan mimeMessage;

}

Hantarkan e-mel secara serentak menggunakan MailKit di ASP.NET Core

Untuk menghantar e-mel, kita perlu memanfaatkan kelas SmtpClient yang berkaitan dengan ruang nama MailKit.Net.Smtp. Coretan kod berikut menggambarkan bagaimana ini dapat dilakukan.

menggunakan (SmtpClient smtpClient = SmtpClient baru ())

{

  smtpClient.Connect (_notificationMetadata.SmtpServer,

  _notificationMetadata.Port, true);

  smtpClient.Authenticate (_notificationMetadata.UserName,

  _notificationMetadata.Password);

  smtpClient.Send (mimeMessage);

  smtpClient.Disconnect (benar);

}

Berikut adalah kod lengkap kaedah Get action dari kelas DefaultController kami untuk kemudahan anda.

rentetan awam Dapatkan ()

{

Mesej EmailMessage = EmailMessage baru ();

message.Sender = Alamat Surat Mel baru ("Diri", _notificationMetadata.Sender);

message.Reciever = Alamat Peti Surat baru ("Diri", _notificationMetadata.Reciever);

message.Subject = "Selamat Datang";

message.Content = "Hello World!";

var mimeMessage = CreateEmailMessage (mesej);

menggunakan (SmtpClient smtpClient = SmtpClient baru ())

 {

    smtpClient.Connect (_notificationMetadata.SmtpServer,

    _notificationMetadata.Port, true);

    smtpClient.Authenticate (_notificationMetadata.UserName,

    _notificationMetadata.Password);

    smtpClient.Send (mimeMessage);

    smtpClient.Disconnect (benar);

  }

 kembali "E-mel berjaya dihantar";

}

Hantar e-mel secara serentak menggunakan MailKit di ASP.NET Core

Coretan kod berikut menggambarkan versi kod tidak segerak yang baru kita tulis untuk menghantar e-mel secara serentak.

menggunakan (SmtpClient smtpClient = SmtpClient baru ())

 {

      tunggu smtpClient.ConnectAsync (_notificationMetadata.SmtpServer,

      _notificationMetadata.Port, true);

      tunggu smtpClient.AuthenticateAsync (_notificationMetadata.UserName,

      _notificationMetadata.Password);

      tunggu smtpClient.SendAsync (mimeMessage);

      tunggu smtpClient.DisconnectAsync (benar);

 }

Akhirnya, perhatikan bahawa MailKit juga membolehkan anda menghantar e-mel menggunakan templat dan juga e-mel yang mempunyai lampiran. Saya akan menunjukkan ciri tambahan MailKit dalam artikel akan datang di sini.