CÔNG NGHỆ THÔNG TIN >> BÀI VIẾT CHỌN LỌC

Làm thế nào để gửi email trong Asp.Net Core 6 sử dụng thư viện MailKit và MimeKit

Đăng lúc: 03:01 PM - 27/12/2023 bởi Charles Chung - 755

Trong bài viết này tôi sẽ hướng dẫn các bạn cách gửi email trong Asp.Net core 6 sử dụng thư viện MailKit và MimeKit

Giới thiệu

Để gửi mail trong .NET các bạn có thể sử dụng SmtpClient trong namespace System.Net.Mail, tuy nhiên đây là công nghệ cũ giờ đây chúng ta có thể sử dụng bộ công cụ hỗ trợ gửi mail mới là MailKit.

Ví dụ demo gửi mail trong asp.net core 6 sử dụng MailKit và MimeKit

Bước 1: Tạo project Asp.net Core MVC 6

Bước 2: Cài MailKit MimeKit (bản 3.5 nhé)

Bước 3: Mở file appsetting.json bổ sung thêm đoạn cấu hình sau vào nhé

 "MailSettings": {
    "Server": "smtp.gmail.com",
    "Port": 587,
    "SenderName": "CharlesChung",
    "SenderEmail": "charleschung@bachkhoa-aptech.com",
    "Password": "pass mail cua ban"
  }

Bước 4: Trong thư mục Models tạo các lớp và giao diện như sau

MailSettings.cs (lớp biểu diễn thông tin cấu hình email trong appsettings.json)

1
2
3
4
5
6
7
8
public class MailSettings
{
        public string Server { get; set; }
        public int Port { get; set; }
        public string SenderName { get; set; }
        public string SenderEmail { get; set; }
        public string Password { get; set; }
}

 

MailData.cs (lớp biểu diễn thông tin dữ liệu của 1 email sẽ gửi đi)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
public class MailData
{
        [DisplayName("Địa chỉ email người nhận")]
        public string ReceiverEmail { get; set; }
        [DisplayName("Tên người nhận")]
        public string ReceiverName { get; set; }
        [DisplayName("Tiêu đề")]
        public string Title { get; set; }
        [DisplayName("Nội dung")]
        public string Body { get; set; }
}

 

IMailService.cs ( giao diện khai báo nghiệp vụ gửi mail)

1
2
3
4
 public interface IMailService
{
    bool SendMail(MailData mailData);
}

 

MailService.cs thực thi từ giao diện IMailService ( lớp xử lý nghiệp vụ gửi mail)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class MailService : IMailService
    {
        private readonly MailSettings _mailSettings;

        //injection MailSetting vào lớp này để dùng
        public MailService(IOptions<MailSettings> mailSettingsOptions)
        {
            _mailSettings = mailSettingsOptions.Value;
        }
        // xử lý gửi mail
        public bool SendMail(MailData mailData)
        {
            //Tạo 1 đối tượng MimeMessage dùng xong thì tự hủy
            using (MimeMessage emailMessage = new MimeMessage())
            {
                //Tạo 1 địa chỉ mail người gửi
                MailboxAddress emailFrom = new MailboxAddress(_mailSettings.SenderName, _mailSettings.SenderEmail);
                //add địa chỉ mail người gửi vào mimemessage
                emailMessage.From.Add(emailFrom);
                //tạo 1 địa chỉ mail người nhận
                MailboxAddress emailTo = new MailboxAddress(mailData.ReceiverName, mailData.ReceiverEmail);
                //add địa chỉ mail người nhận vào mimemessage
                emailMessage.To.Add(emailTo);
                //thêm mail CC và BCC nếu cần
                //emailMessage.Cc.Add(new MailboxAddress("Cc Receiver", "cc@example.com"));
                //emailMessage.Bcc.Add(new MailboxAddress("Bcc Receiver", "bcc@example.com"));
                //Gán tiêu đề mail
                emailMessage.Subject = mailData.Title;
                //Tạo đối tượng chứa nội dung mail
                BodyBuilder emailBodyBuilder = new BodyBuilder();
                emailBodyBuilder.TextBody = mailData.Body;
                //Gán nội dung mail vào mimemessage
                emailMessage.Body = emailBodyBuilder.ToMessageBody();
                //tạo đối tượng SmtpClient từ Mailkit.Net.Smtp namespace, không dùng  System.Net.Mail nhé
                using (SmtpClient mailClient = new SmtpClient())
                {
                    //Kết nối tới server smtp.gmail
                    mailClient.Connect(_mailSettings.Server, _mailSettings.Port, MailKit.Security.SecureSocketOptions.StartTls);
                    //đăng nhập
                    mailClient.Authenticate(_mailSettings.SenderEmail, _mailSettings.Password);
                    //gửi mail
                    mailClient.Send(emailMessage);
                    //ngắt kết nối
                    mailClient.Disconnect(true);
                }
            }
            return true;
        }
    }

 

Mở tệp Program.cs và bổ sung các dòng 4,5,6,7 nhé 

1
2
3
4
5
6
7
8
9
// Add services to the container.
builder.Services.AddControllersWithViews();

//load thông tin cấu hình và lưu vào đối tượng MailSetting
builder.Services.Configure<MailSettings>(builder.Configuration.GetSection("MailSettings"));
//add dependency inject cho MailService
builder.Services.AddTransient<IMailService, MailService>();

var app = builder.Build();

 

Bước 5: Trong thư mục Controllers tạo lớp MailController.cs để test gửi mail

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
public class MailController : Controller
{
        private readonly IMailService _mailService;
        //injecting IMailService vào constructor
        public MailController(IMailService _MailService)
        {
            _mailService = _MailService;
        }
        public IActionResult CreateMail()
        {
            return View();
        }
        [HttpPost]
        public IActionResult SendMail(MailData mailData)
        {
            _mailService.SendMail(mailData);
            return View();
        }
}

 

Bước 6: Tạo view CreateMail và SendMail

CreateMail.cshtml (Form gửi mail)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@model AspNetCoreSendMail.Models.MailData
@{
    ViewData["Title"] = "Gửi mail";
}
<h1>Gửi mail</h1>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="SendMail">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="ReceiverEmail" class="control-label"></label>
                <input asp-for="ReceiverEmail" class="form-control" />
                <span asp-validation-for="ReceiverEmail" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="ReceiverName" class="control-label"></label>
                <input asp-for="ReceiverName" class="form-control" />
                <span asp-validation-for="ReceiverName" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Title" class="control-label"></label>
                <input asp-for="Title" class="form-control" />
                <span asp-validation-for="Title" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Body" class="control-label"></label>
                <input asp-for="Body" class="form-control" />
                <span asp-validation-for="Body" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

 

SendMail.cshtml (kết quả gửi mail bạn gõ vào dòng thông báo thành công nhé)

Bước 7: Chạy ứng dụng và kiểm tra kết quả

Lưu ý: Để có thể sử dụng tài khoản gmail để gửi mail bạn cần phải thiết lập tính năng kém bảo mật trong tài khoản gmail của bạn theo các bước sau:

Link tải source code

Mọi thắc mắc xin liên hệ thầy Charles Chung để được giải đáp

 

thay lời cảm ơn!

QUẢNG CÁO - TIẾP THỊ