使用 System.Net.Mail.SmtpClient 發送郵件時,開發者經常遭遇「服務器要求安全連接或客戶端未通過身份驗證」「服務器不支持安全連接」「Authentication required」等異常。本文系統整理了四類典型 SMTP 錯誤及其解決思路,並附贈 Foxmail、Outlook 常見退信代碼對照表,幫助你快速定位並修復郵件發送故障。
var mail = new MailMessage("sender@sina.com", "receiver@sina.com", "主題", "正文")
{
BodyEncoding = Encoding.UTF8,
IsBodyHtml = false
};
var client = new SmtpClient("smtp.sina.com", 587) // 關鍵:顯式指定端口
{
Credentials = new NetworkCredential("sender@sina.com", "授權碼或密碼"),
EnableSsl = true, // 新浪/騰訊/網易等主流服務商均需 SSL
UseDefaultCredentials = false, // 必須為 false,否則憑據不生效
DeliveryMethod = SmtpDeliveryMethod.Network
};
client.Send(mail);
關鍵點:
true。Credentials 賦值之前,否則系統憑據會覆蓋你設置的用戶名密碼。System.Net.Mail.SmtpException: SMTP 服務器要求安全連接或客戶端未通過身份驗證。
服務器響應為: 5.7.1 Client was not authenticated
原因:未指定端口(默認 25),或端口與 SSL 設置不匹配。
解決:顯式指定 new SmtpClient("smtp.sina.com", 587) 並設置 EnableSsl = true。163 郵箱尤為嚴格,建議統一使用 587+SSL。
System.Net.Mail.SmtpException: 服務器不支持安全連接。
原因:服務器確實不支持 SSL(如某些企業內部郵件服務器),但代碼設置了 EnableSsl = true。
解決:
① 設置 EnableSsl = false 或移除該行;
② 或聯繫郵件服務商開啟 SSL/TLS 支持(推薦)。
SMTP 服務器要求安全連接或客戶端未通過身份驗證。
服務器響應為: Authentication required
原因:服務器要求 SSL 加密傳輸憑據,但客戶端未開啟 SSL。
解決:將 EnableSsl = false 改為 true。若隨後出現「錯誤二」,說明該服務器不支持 SSL,需聯繫服務商或改用其他郵件服務商。
SMTP 服務器要求安全連接或客戶端未通過身份驗證。
服務器響應為: 5.7.0 Must issue a STARTTLS command first
原因:服務器強制要求 STARTTLS 升級加密通道(新浪、Gmail 等常見)。
解決:確保 EnableSsl = true 且端口為 587(STARTTLS 標準端口)。
UseDefaultCredentials = false 在 Credentials 賦值前設置| 代碼 | 含義 | 典型原因與對策 |
|---|---|---|
| 550 relaying mail to <> is not allowed | 拒絕轉發 | SMTP 服務器限制收件域,需更換服務商或使用自身域名發信 |
| 550 <>: local user only | 僅限本地用戶 | 163/126/yeah.net 僅允許自身賬號發信,需在發件人地址填寫該賬號 |
| 553 sorry, that domain isn't in my list of allowed rcpthosts | 域名不在允許列表 | sina/21cn/china.com 等要求發件人域名在白名單,需使用該服務商郵箱發信 |
| 535 Error: authentication failed | 認證失敗 | 授權碼錯誤或未開啟客戶端授權,重新生成授權碼並檢查大小寫 |
| 550 Unable to relay for ... | 中繼被拒 | 常見於 Wingate 代理,檢查代理設置與發件人格式 |
| 554 Transaction failed | 事務失敗 | 網絡抖動或服務器負載高,稍後重試 |
退信郵件前半部分為固定模板,真實原因藏在後半部分「服務器返回信息」中。常見關鍵詞:
unknown user:收件地址拼寫錯誤或賬號不存在host not found:收件域名 DNS 解析失敗loops back to myself:域名未激活或 MX 記錄指回自身spam/blocked:發件 IP 被反垃圾組織列入黑名單,需申請解封quota exceeded:收件箱容量已滿SMTP 發送故障 90% 歸因於「端口/SSL/授權碼」三要素不匹配。掌握 587+SSL+授權碼 標準組合、養成發送前核對清單習慣、熟悉常見退信代碼含義,即可覆蓋絕大多數場景。遇到疑難雜癥時,優先啟用 SmtpClient 的日誌記錄(System.Diagnostics 配置 System.Net trace),捕獲完整 SMTP 會話報文,將是定位問題的終極武器。