Cara mengirim email di ASP.NET Core

Anda akan sering memiliki kebutuhan untuk mengirim email melalui aplikasi Anda. Anda dapat memanfaatkan paket MailKit NuGet untuk mengirim email di ASP.NET Core. MailKit adalah pustaka klien email sumber terbuka yang dapat digunakan di aplikasi .NET atau .NET Core yang berjalan di sistem Windows, Linux, atau Mac. Artikel ini menyajikan diskusi tentang bagaimana kita dapat menggunakan paket MailKit NuGet untuk mengirim email di ASP.NET Core.

Untuk bekerja dengan contoh kode yang disediakan dalam artikel ini, Anda harus menginstal Visual Studio 2019 di sistem Anda. Jika Anda belum memiliki salinannya, Anda dapat mengunduh Visual Studio 2019 di sini. 

Buat proyek ASP.NET Core API

Pertama, mari buat proyek ASP.NET Core di Visual Studio. Dengan asumsi Visual Studio 2019 diinstal di sistem Anda, ikuti langkah-langkah yang diuraikan di bawah ini untuk membuat proyek ASP.NET Core baru di Visual Studio.

  1. Luncurkan Visual Studio IDE.
  2. Klik "Buat proyek baru".
  3. Di jendela "Buat proyek baru", pilih "Aplikasi Web Inti ASP.NET" dari daftar templat yang ditampilkan.
  4. Klik Next.
  5. Di jendela "Configure your new project" yang ditampilkan berikutnya, tentukan nama dan lokasi untuk proyek baru tersebut.
  6. Klik Buat.
  7. Di jendela "Buat Aplikasi Web ASP.Net Core Baru", pilih .NET Core sebagai runtime dan ASP.NET Core 2.2 (atau yang lebih baru) dari daftar drop-down di bagian atas. Saya akan menggunakan ASP.NET Core 3.0 di sini.
  8. Pilih "API" sebagai template proyek untuk membuat aplikasi ASP.NET Core API baru. 
  9. Pastikan kotak centang "Aktifkan Dukungan Docker" dan "Konfigurasi untuk HTTPS" tidak dicentang karena kami tidak akan menggunakan fitur tersebut di sini.
  10. Pastikan Autentikasi disetel sebagai "Tanpa Autentikasi" karena kami juga tidak akan menggunakan autentikasi.
  11. Klik Buat. 

Ini akan membuat proyek ASP.NET Core API baru di Visual Studio. Pilih folder solusi Controllers di jendela Solution Explorer dan klik “Add -> Controller…” untuk membuat controller baru bernama DefaultController. Kami akan menggunakan proyek ini di bagian selanjutnya dari artikel ini.

Instal paket MailKit NuGet

Untuk bekerja dengan MailKit, Anda harus menginstal paket MailKit dari NuGet. Anda dapat melakukan ini baik melalui manajer paket NuGet di dalam Visual Studio 2019 IDE, atau dengan menjalankan perintah berikut di konsol manajer paket NuGet:

Instal-Paket NETCore.MailKit

Anda juga perlu menambahkan referensi ke ruang nama berikut di kode Anda:

menggunakan MailKit.Net.Smtp;

menggunakan MimeKit;

Tentukan metadata konfigurasi email di ASP.NET Core

Cuplikan kode berikut menunjukkan bagaimana Anda dapat menentukan detail konfigurasi email di file appsettings.json.

"NotificationMetadata": {

    "Sender": "[email protected]",

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

    "Penerima": "[email protected]",

    "Port": 465,

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

    "Password": "tentukan sandi Anda di sini"

  }

Untuk membaca data konfigurasi email, kita akan memanfaatkan kelas berikut.

kelas publik NotificationMetadata

    {

        public string Sender {get; set; }

        public string Reciever {get; set; }

        string publik SmtpServer {get; set; }

        Public int Port {get; set; }

        public string UserName {get; set; }

        public string Password {get; set; }

    }

Berikut cara membaca data konfigurasi email dari file appsettings.json menjadi instance kelas NotificationMetadata.

public void ConfigureServices (layanan IServiceCollection)

{

     var notificationMetadata =

     Configuration.GetSection ("NotificationMetadata").

     Dapatkan();

     services.AddSingleton (notificationMetadata);

     services.AddControllers ();

}

Buat contoh kelas EmailMessage di ASP.NET Core

Buat kelas baru bernama EmailMessage dengan kode berikut:

kelas publik EmailMessage

    {

        public MailboxAddress Sender {get; set; }

        public MailboxAddress Reciever {get; set; }

        public string Subject {get; set; }

        Konten string publik {get; set; }

    }

Buat contoh kelas MimeMessage di ASP.NET Core

Metode berikut mengilustrasikan bagaimana Anda dapat membuat instance MimeMessage dari instance kelas EmailMessage kustom kami.

private MimeMessage CreateMimeMessageFromEmailMessage (pesan EmailMessage)

{

     var mimeMessage = new MimeMessage ();

     mimeMessage.From.Add (message.Sender);

     mimeMessage.To.Add (message.Reciever);

     mimeMessage.Subject = message.Subject;

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

     {Text = message.Content};

     kembali mimeMessage;

}

Kirim email secara sinkron menggunakan MailKit di ASP.NET Core

Untuk mengirim email, kita perlu memanfaatkan kelas SmtpClient yang berkaitan dengan namespace MailKit.Net.Smtp. Cuplikan kode berikut menggambarkan bagaimana hal ini dapat dilakukan.

menggunakan (SmtpClient smtpClient = new SmtpClient ())

{

  smtpClient.Connect (_notificationMetadata.SmtpServer,

  _notificationMetadata.Port, true);

  smtpClient.Authenticate (_notificationMetadata.UserName,

  _notificationMetadata.Password);

  smtpClient.Send (mimeMessage);

  smtpClient.Disconnect (true);

}

Berikut adalah kode lengkap dari metode Get action dari kelas DefaultController kami untuk kenyamanan Anda.

string publik Get ()

{

Pesan EmailMessage = EmailMessage baru ();

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

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

message.Subject = "Selamat Datang";

message.Content = "Halo Dunia!";

var mimeMessage = CreateEmailMessage (pesan);

menggunakan (SmtpClient smtpClient = new SmtpClient ())

 {

    smtpClient.Connect (_notificationMetadata.SmtpServer,

    _notificationMetadata.Port, true);

    smtpClient.Authenticate (_notificationMetadata.UserName,

    _notificationMetadata.Password);

    smtpClient.Send (mimeMessage);

    smtpClient.Disconnect (true);

  }

 mengembalikan "Email berhasil dikirim";

}

Kirim email secara asinkron menggunakan MailKit di ASP.NET Core

Potongan kode berikut mengilustrasikan versi asinkron dari kode yang baru saja kita tulis untuk mengirim email secara sinkron.

menggunakan (SmtpClient smtpClient = new SmtpClient ())

 {

      menunggu smtpClient.ConnectAsync (_notificationMetadata.SmtpServer,

      _notificationMetadata.Port, true);

      menunggu smtpClient.AuthenticateAsync (_notificationMetadata.UserName,

      _notificationMetadata.Password);

      menunggu smtpClient.SendAsync (mimeMessage);

      menunggu smtpClient.DisconnectAsync (true);

 }

Terakhir, perhatikan bahwa MailKit juga memungkinkan Anda mengirim email menggunakan templat dan bahkan email yang memiliki lampiran. Saya akan mendemonstrasikan fitur tambahan MailKit dalam artikel mendatang di sini.