.NET Framework 早期透過 `System.Web.Mail` 命名空間提供郵件發送功能,雖已標記為過時(Obsolete),但在維護 .NET Framework 2.0/3.5 專案時仍常見。本文完整說明其用法,並對比現代 `System.Net.Mail` 與第三方庫的最佳實踐。
| 類別 | 用途 |
|---|---|
MailMessage | 構建郵件內容(寄件者、收件者、主旨、本文、附件、優先權等) |
MailAttachment | 構建附件 |
SmtpMail | 發送郵件(靜態類別,設定 SMTP 伺服器) |
using System.Web.Mail;
public void SendEmailLegacy()
{
MailMessage msg = new MailMessage();
msg.From = "sender@company.com";
msg.To = "receiver1@company.com;receiver2@company.com"; // 分號分隔
msg.Cc = "cc@company.com";
msg.Subject = "測試郵件 - System.Web.Mail";
msg.Body = "這是純文字內文";
msg.BodyFormat = MailFormat.Text; // 或 MailFormat.Html
msg.Priority = MailPriority.High;
// 附件
string attachPath = @"D:\test\report.pdf";
MailAttachment attachment = new MailAttachment(attachPath);
msg.Attachments.Add(attachment);
// SMTP 設定
SmtpMail.SmtpServer = "smtp.company.com"; // 或 IP
// 若需認證,需在 machine.config / web.config 設定
//
SmtpMail.Send(msg);
}
From:寄件者 EmailTo、Cc、Bcc:以分號 `;` 分隔多位址Subject:主旨Body:內文BodyFormat:`MailFormat.Text` / `MailFormat.Html`Priority:`MailPriority.Low/Normal/High`Attachments:`MailAttachment` 集合using System.Net;
using System.Net.Mail;
public async Task SendEmailModernAsync()
{
using var msg = new MailMessage
{
From = new MailAddress("sender@company.com", "發送者名稱"),
Subject = "測試郵件 - System.Net.Mail",
Body = "HTML 內文
支援中文
",
IsBodyHtml = true,
Priority = MailPriority.Normal
};
msg.To.Add("receiver@company.com");
msg.CC.Add("cc@company.com");
msg.Attachments.Add(new Attachment(@"D:\test\report.pdf"));
using var smtp = new SmtpClient("smtp.company.com", 587)
{
Credentials = new NetworkCredential("user", "pwd"),
EnableSsl = true, // 關鍵:啟用 STARTTLS
DeliveryMethod = SmtpDeliveryMethod.Network,
Timeout = 30000
};
await smtp.SendMailAsync(msg); // 非同步,不阻塞
}
| 功能 | System.Web.Mail | System.Net.Mail |
|---|---|---|
| SSL/TLS | 不支援(需外部 Relay) | 原生 `EnableSsl=true` |
| 非同步 | 無 | `SendMailAsync` |
| 認證 | 僅透過 config | 程式碼直接設定 `Credentials` |
| 嵌入圖片 | 困難 | `AlternateView` + `LinkedResource` |
| 多檔附件 | 支援 | 支援 |
| .NET Core 支援 | 無 | 完整支援 |
nuget install MailKit`System.Web.Mail` 曾是經典選擇,但已不適合新專案。請直接採用 `System.Net.Mail` 或 MailKit/FluentEmail 結合雲端郵件服務,獲得安全、非同步、可維護、跨平台的郵件發送能力。維護舊代碼時,若遇編碼/SSL 問題,優先規劃遷移而非修補。