2025年10月17日 星期五

[研究]ASP.NET WebForm 寄信元件與 SMTP Server 寄信相容性比較

[研究]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.MailMessageMailKit 兩者皆穩定。MailKit 若需大量寄信效能更好。
舊專案維護,不可改架構 Cpi.Net.SecureMail 可作為過渡方案,但建議逐步改為 System.Net.Mail。

🧾 四、簡短結論

用途 建議
安全性優先 MailKit(支援 TLS + OAuth)
相容性最佳 System.Net.Mail.MailMessage
老舊程式維護 Cpi.Net.SecureMail
不再建議使用 System.Web.Mail.MailMessage(過時)

(完)

沒有留言:

張貼留言