Gửi Email với SMTP trong C# – Phần 13

Đăng ngày: 20/06/2026 • Tác giả: Quản trị viên
Gửi Email với SMTP trong C# – Phần 13

 

Gửi Email với SMTP trong C# – Phần 13

1. SMTP là gì?

SMTP (Simple Mail Transfer Protocol) là giao thức tiêu chuẩn để gửi email qua internet. Trong C#, ta có thể sử dụng thư viện System.Net.Mail để gửi email thông qua SMTP Server.

📌 Một số dịch vụ SMTP phổ biến:
✅ Gmail: smtp.gmail.com (TLS/SSL)
✅ Outlook: smtp.office365.com (TLS/SSL)
✅ Yahoo: smtp.mail.yahoo.com (TLS/SSL)
✅ SMTP Server riêng của doanh nghiệp

2. Gửi Email Cơ Bản trong C#

💡 Ví dụ: Gửi email bằng Gmail SMTP.

using System;
using System.Net;
using System.Net.Mail;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        string smtpServer = "smtp.gmail.com";
        int smtpPort = 587; // 465 nếu dùng SSL
        string senderEmail = "your-email@gmail.com";
        string senderPassword = "your-password"; // Cần bật "App Password" nếu dùng Gmail
        string recipientEmail = "recipient@example.com";

        using SmtpClient client = new SmtpClient(smtpServer, smtpPort)
        {
            Credentials = new NetworkCredential(senderEmail, senderPassword),
            EnableSsl = true // Bật SSL để bảo mật
        };

        MailMessage mail = new MailMessage(senderEmail, recipientEmail)
        {
            Subject = "Chào từ C#",
            Body = "Xin chào, đây là email được gửi từ C#",
            IsBodyHtml = false
        };

        try
        {
            await client.SendMailAsync(mail);
            Console.WriteLine("✅ Email đã được gửi thành công!");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"❌ Lỗi gửi email: {ex.Message}");
        }
    }
}

📌 Giải thích:

  • SmtpClient(smtpServer, smtpPort): Kết nối đến SMTP server.
  • NetworkCredential(senderEmail, senderPassword): Xác thực tài khoản gửi.
  • EnableSsl = true: Bật SSL để bảo mật.
  • SendMailAsync(mail): Gửi email bất đồng bộ.

⏳ Kết quả:

✅ Email đã được gửi thành công!

🔴 Lưu ý khi dùng Gmail:
Gmail không cho phép đăng nhập bằng mật khẩu thông thường qua SMTP. Bạn cần bật App Password hoặc Less Secure Apps để có thể gửi email.

3. Gửi Email với Nội Dung HTML

💡 Ví dụ: Gửi email với nội dung HTML và chèn ảnh.

MailMessage mail = new MailMessage(senderEmail, recipientEmail)
{
    Subject = "Chào từ C#",
    Body = "<h1>Xin chào!</h1><p>Đây là email có nội dung <b>HTML</b>.</p>",
    IsBodyHtml = true
};

📌 Giải thích:

  • IsBodyHtml = true: Cho phép hiển thị nội dung HTML.

⏳ Kết quả:
📩 Email nhận được có định dạng chữ to, đậm.

4. Gửi Email với File Đính Kèm

💡 Ví dụ: Gửi email kèm tệp PDF.

MailMessage mail = new MailMessage(senderEmail, recipientEmail)
{
    Subject = "Báo cáo tháng",
    Body = "Đính kèm file báo cáo tháng.",
    IsBodyHtml = false
};

// Thêm file đính kèm
Attachment attachment = new Attachment("C:\\Reports\\baocao.pdf");
mail.Attachments.Add(attachment);

📌 Giải thích:

  • new Attachment("C:\\Reports\\baocao.pdf"): Đính kèm file.

⏳ Kết quả:
📩 Email có file baocao.pdf đính kèm.

5. Gửi Email Cho Nhiều Người Cùng Lúc

💡 Ví dụ: Gửi email đến nhiều người cùng lúc.

mail.To.Add("recipient1@example.com");
mail.To.Add("recipient2@example.com");
mail.CC.Add("cc@example.com");   // Gửi thêm bản sao
mail.Bcc.Add("bcc@example.com"); // Gửi ẩn danh

📌 Giải thích:

  • .To.Add(): Thêm nhiều người nhận chính.
  • .CC.Add(): Gửi bản sao email.
  • .Bcc.Add(): Gửi email ẩn danh (người nhận không thấy nhau).

6. Xử Lý Lỗi Khi Gửi Email

💡 Ví dụ: Xử lý lỗi khi SMTP không kết nối được.

try
{
    await client.SendMailAsync(mail);
    Console.WriteLine("✅ Email đã gửi thành công!");
}
catch (SmtpException ex)
{
    Console.WriteLine($"❌ Lỗi SMTP: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"❌ Lỗi khác: {ex.Message}");
}

📌 Các lỗi thường gặp:

  • Authentication failed: Sai mật khẩu hoặc chưa bật SMTP.
  • The SMTP server requires a secure connection: Cần bật SSL/TLS.
  • Timeout: SMTP server không phản hồi.

7. Sử Dụng SMTP Server Miễn Phí (Mailtrap)

Nếu bạn muốn test gửi email mà không dùng tài khoản Gmail, hãy sử dụng Mailtrap.io.

📌 Cấu hình SMTP Mailtrap:

string smtpServer = "smtp.mailtrap.io";
int smtpPort = 2525;
string username = "your-mailtrap-username";
string password = "your-mailtrap-password";

📌 Lợi ích của Mailtrap:
✅ Gửi email thử nghiệm mà không lo spam.
✅ Kiểm tra nội dung email trước khi gửi thật.

8. Tóm Tắt Bài Học

✅ SMTP giúp gửi email tự động từ C#.
✅ Gmail, Outlook, Mailtrap là các dịch vụ SMTP phổ biến.
✅ Có thể gửi email dạng văn bản, HTML, đính kèm file.
✅ Sử dụng try-catch để xử lý lỗi khi gửi email.

💡 Bài tiếp theo:
👉 Làm việc với Database trong C# (SQL Server, MySQL) – Phần 14 🚀

Bài viết liên quan