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 - 1339Trong 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 và 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:
- Đăng nhập vào gmail
- Kích vào link sau: https://myaccount.google.com/lesssecureapps
- Rồi bật lên như hình dưới
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!
Các bài cũ hơn
- Resize hình ảnh sử dụng thư viện OpenCV trong Pyhton (10:57 AM - 25/12/2023)
- Cài đặt và sử dụng thư viện OpenCV trong Python với Visual Code (10:48 AM - 24/12/2023)
- Sinh mã số kế tiếp dựa vào một mẫu cho trước bằng C# hoặc Java (10:47 AM - 22/12/2023)
- Lambda Expression và Functional Interface trong java 8 (09:11 AM - 21/12/2023)
- Các loại inheritance trong Java-Cách nhận biết extends và implements (10:37 AM - 15/12/2023)