[研究]ASP.NET WebForm 寄信元件與 SMTP Server 寄信相容性比較
2025-10-17
ASP.NET Webform 網站,用下面元件
Cpi.Net.SecureMail
System.Web.Mail.MailMessage (過時)
System.Net.Mail.MailMessage
MailKit
與下面 Mail Server 搭配,
Exchange Server
Postfix
用 C# 寫程式寄信的相容性如何?
ChatGPT
🧩 一、相容性總覽表
| 寄信元件 | 協定支援 | Exchange Server 相容性 | Postfix 相容性 | 備註 |
|---|---|---|---|---|
| Cpi.Net.SecureMail | SMTP / SMTPS (465, 587) | ✅ 良好(支援 AUTH LOGIN / NTLM) | ✅ 良好 | 商業套件,封裝較完善,常用於舊專案。 |
| System.Web.Mail.MailMessage (過時) | CDOSYS / SMTP | ⚠️ 有時會被 Exchange 拒絕 (安全性不足) | ⚠️ 可用但建議不用 | .NET 1.x 遺留元件,不支援 SSL/TLS,已被取代。 |
| System.Net.Mail.MailMessage | SMTP / SMTPS (465, 587) | ✅ 完整支援 (Exchange SMTP AUTH) | ✅ 完整支援 | 標準選項,支援 SSL/TLS、憑證驗證。 |
| MailKit (MimeKit) | SMTP / ESMTP / OAuth2 | ✅ 支援,但需設定 “SendAs” 權限 | ✅ 完整支援 | 最強大功能完整,支援 OAuth、STARTTLS、MIME。 |
🧠 二、詳細說明與差異分析
1️⃣ Cpi.Net.SecureMail
- 📦 定位:第三方封裝 SMTP 的元件,支援 SSL。
- 🧩 特色:
- 支援 SMTP AUTH、TLS/SSL。
- 可與 Exchange 或 Postfix 正常運作。
- ⚠️ 注意事項:
- 部分版本預設只支援「AUTH LOGIN」,若 Exchange 只啟用 NTLM/Negotiate,需手動設定。
- 若 Exchange 要求「Send As」權限,仍須在 AD 中設定。
2️⃣ System.Web.Mail.MailMessage (過時)
- 📦 定位:ASP.NET 1.x 時代的 CDOSYS 包裝。
- ❌ 問題:
- 只支援「明文 SMTP」。
- 不支援 TLS/SSL。
- .NET Framework 2.0 起官方建議改用 System.Net.Mail。
- ⚠️ 現實影響:
- 現代 Exchange Server、Postfix 預設強制加密(STARTTLS),此元件通常無法連線。
- 若伺服器允許 25 port 明文傳送,仍可工作,但非常不安全。
3️⃣ System.Net.Mail.MailMessage
- 📦 定位:.NET 2.0+ 內建的標準 SMTP 用 API。
- ✅ 優點:
- 支援 SSL (EnableSsl = true)。
- 可設定憑證驗證、自訂 port。
- 與 Exchange、Postfix 完全相容。
- ⚠️ 注意事項:
- 若用 Exchange 且出現錯誤「5.7.60 Client does not have permissions to send as this sender」,代表帳號沒有 “Send As” 權限。可由 Exchange 管理員設定。
- 不支援 OAuth2(僅支援基本帳密驗證)。
4️⃣ MailKit / MimeKit
- 📦 定位:現代化的 SMTP/IMAP/POP3 封裝庫。
- ✅ 優點:
- 完整支援 SSL/TLS、OAuth2。
- 完全相容 Postfix。
- 支援 Exchange(EWS 例外),但 SMTP AUTH 須正確配置。
- ⚠️ 注意事項:
- 若 Exchange 啟用「Modern Auth」(OAuth),需配合 Microsoft Entra 應用註冊。
- 若只允許 NTLM 而未啟用 AUTH LOGIN/PLAIN,MailKit 會出現:
- 5.7.60 SMTP; Client does not have permissions to send as this sender
- 解法是在 Exchange 中允許 AUTH LOGIN 或調整「Send As」權限。
⚙️ 三、建議使用組合
| 環境 | 建議元件 | 備註 |
|---|---|---|
| ASP.NET WebForm + Exchange Server(on-prem) | System.Net.Mail.MailMessage |
最穩定,簡單配置。若有 OAuth 要求,可升級 MailKit。 |
| ASP.NET WebForm + Exchange Online (Microsoft 365) | MailKit |
支援 OAuth2 / Modern Auth。 |
| ASP.NET WebForm + Postfix | System.Net.Mail.MailMessage 或 MailKit |
兩者皆穩定。MailKit 若需大量寄信效能更好。 |
| 舊專案維護,不可改架構 | Cpi.Net.SecureMail |
可作為過渡方案,但建議逐步改為 System.Net.Mail。 |
🧾 四、簡短結論
| 用途 | 建議 |
|---|---|
| 安全性優先 | MailKit(支援 TLS + OAuth) |
| 相容性最佳 | System.Net.Mail.MailMessage |
| 老舊程式維護 | Cpi.Net.SecureMail |
| 不再建議使用 | System.Web.Mail.MailMessage(過時) |
(完)
沒有留言:
張貼留言