Gửi email là một yêu cầu phổ biến trong các ứng dụng web ASP.NET Core. Trong bài viết này, chúng ta sẽ tìm hiểu cách gửi email có tệp đính kèm bằng cách sử dụng open source component phổ biến - MailKit.
![]() |
Hướng dẫn code chức năng gửi mail trong .NET Core |
Các bước thực hiện code chức năng gửi mail sẽ tóm gọn trong 5 bước đơn giản sau đây:
1. Cài đặt MailKit NuGet package
MailKit có sẵn trong NuGet package. Nhấp chuột phải vào project của bạn và nhấp vào Manage NuGet packages. Sau đó, tìm kiếm MailKit.
![]() |
Cài đặt MailKit NuGet package |
Sau khi đã cài đặt xong, bạn có thể dễ dàng sử dụng package này bằng cách import chúng vào code:
using MailKit.Net.Smtp;
using MimeKit;
2. Chuẩn bị email để gửi
Sau bạn đã thêm MailKit vào project .NET Core, bây giờ chúng ta sẽ xây dựng email message mà chúng ta muốn gửi. Như bạn đã biết, một email bao gồm một số thứ như người gửi, người nhận, nội dung thư, hoặc các file đính kèm...
Và những thứ đó cũng có và sẽ được cấu hình trong MimeMessage. Dưới đây là một ví dụ để cấu hình MimeMessage:
MimeMessage message = new MimeMessage();
MailboxAddress from = new MailboxAddress("Admin",
"admin@example.com");
message.From.Add(from);
MailboxAddress to = new MailboxAddress("User",
"user@example.com");
message.To.Add(to);
message.Subject = "This is email subject";
Như code trên, ta thấy có sử dụng lớp MailboxAddress để xây dựng địa chỉ người gửi và địa chỉ người nhận. Tham số đầu tiên cho hàm tạo MailboxAddress là tên hiển thị của địa chỉ email, tham số thứ hai là chính địa chỉ email. Bạn nên thay đổi chúng theo thiết lập của bạn. Thuộc tính Subject cho biết chủ đề hay tiêu đề của email.
3. Thêm nội dung email và các tệp đính kèm
Tiếp theo, chúng ta cần đặt nội dung thư và tùy chọn thêm tệp đính kèm email. Cụ thể ta có đoạn code sau:
BodyBuilder bodyBuilder = new BodyBuilder();
bodyBuilder.HtmlBody = "<h1>Hello World!</h1>";
bodyBuilder.TextBody = "Hello World!";
Tiếp theo, để thêm các tệp đính kèm, và các tệp đính kèm đó là một hoặc nhiều tệp, chúng ta cần đường dẫn đến tệp đó. Thay vì mã hóa cứng các đường dẫn, chúng ta sẽ tính toán chúng bằng cách sử dụng đối tượng IHostingEnosystem như hình dưới đây:
IHostingEnvironment env = null;
public HomeController(IHostingEnvironment env)
{
this.env = env;
}
...
bodyBuilder.Attachments.Add(env.WebRootPath + "\\file.png");
Sau đó, ta thêm các file vào đối tượng BodyBuilder đã tạo trước đó.
Khi BodyBuilder đã sẵn sàng, chúng ta có thể tạo một phần thân MimeMessage từ nó như sau:
message.Body = bodyBuilder.ToMessageBody();
4. Kết nối với SMTP server
Để gửi email mà chúng ta vừa tạo, chúng ta cần kết nối với một máy chủ SMTP. Trong hầu hết các trường hợp, bạn cũng sẽ cần thông tin xác thực bảo mật để kết nối với máy chủ. Đoạn mã sau đây cho biết cách thiết lập kết nối với máy chủ SMTP.
SmtpClient client = new SmtpClient();
client.Connect("smtp_address_here", port_here, true);
client.Authenticate("user_name_here", "pwd_here");
Ở đây, ta tạo một instance cho lớp SmtpClient đại diện cho một client đến một SMTP server. Chúng ta gọi phương thức Connect() của nó và truyền địa chỉ máy chủ SMTP và SMTP port. Tham số Boolean thứ ba cho biết kết nối có yêu cầu SSL hay không.
Sau đó, chúng ta tiến hành gọi phương thức Authenticate() để xác thực tài khoản người dùng với máy chủ SMTP. Phương thức Authenticate() chấp nhận tên người dùng và mật khẩu làm tham số của nó.
Bây giờ, ta cần thay đổi các giá trị này để phù hợp với môi trường của bạn.
Ví dụ bây giờ mình sẽ hướng dẫn đến bạn cách lấy các tham số này từ cấu hình SMTP Gmail đơn giản như sau:
Cấu hình SMTP Gmail
Bạn bắt đầu truy cập website: https://myaccount.google.com/ sau đó đăng nhập tài khoản gmail. Tìm kiếm và chọn thư mục Bảo mật. Nếu trạng thái ở xác minh 2 bước đang tắt thì bạn bật lên như hình sau:
![]() |
Bật chức năng xác minh 2 bước |
![]() |
Chọn ứng dụng khác |
![]() |
Chọn tên bất kỳ cho ứng dụng |
![]() |
Thiết lập mật khẩu cho ứng dụng |
Như vậy là bạn đã có thông tin mật khẩu SMTP rồi, và một số thông số khác của SMTP Gmail như sau:
- SMTP Server: smtp.gmail.com
- TLS/SSL: Required
- SMTP Port: 587
- SMTP Password: Mật khẩu Gmail của bạn.
- SMTP Username: tên Gmail mà bạn dùng để tạo mật khẩu ứng dụng ở trên
5. Gửi email
Sau khi định cấu hình kết nối SMTP server, bây giờ chúng ta có thể gửi tin nhắn và sau đó ngắt kết nối khỏi máy chủ.
client.Send(message);
client.Disconnect(true);
client.Dispose();
Phương thức Send() chấp nhận một MimeMessage làm tham số và sẽ gửi tin nhắn đó khi bạn truyền vào. Khi tin nhắn đã được gửi đi, chúng ta có thể ngắt kết nối khỏi máy chủ bằng phương thức Disconnect(). Cuối cùng, chúng ta cần Displose() đối tượng SmtpClient.
Lời kết
Ở các dịch vụ mail khác nhau thì việc cấu hình SMTP sẽ khác nhau, bạn cần thay đổi linh hoạt.
Mình sẽ viết một bài ví dụ về code trong .Net Core ở phần tới. Chúc các bạn thành công.Hieu Ho.