首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 發送郵件實戰(二):SmtpClient 常見失敗原因排查

     編輯:關於C語言

同樣代碼、同樣環境,有的機器發送成功有的失敗,錯誤提示「郵件標頭編碼錯誤」。經抓包發現,SmtpClient 發送 EHLO 指令時使用機器名作為參數,**機器名包含中文會導致發送失敗**。

問題複現

抓包關鍵幀:

EHLO 指令包含中文機器名

紅框處 EHLO xqxPC 中的機器名若為中文,SMTP 服務器拒絕協商。

解決方案總結

  1. 使用 System.Net.Mail.SmtpClient + MailMessage 發送,代碼簡潔。
  2. **必須設置身份驗證**:
    client.Credentials = new NetworkCredential("account@gmail.com", "password");
  3. **機器名不能包含中文**——將計算機名稱改為純 ASCII 字符(控制面板→系統→更改設置)。
  4. 啟用 SSL:client.EnableSsl = true; client.Port = 587;(Gmail 等主流服務商要求)。

完整發送模板

MailMessage msg = new MailMessage();
msg.To.Add("to@gmail.com");
msg.From = new MailAddress("from@gmail.com", "發件人", Encoding.UTF8);
msg.Subject = "測試郵件";
msg.SubjectEncoding = Encoding.UTF8;
msg.Body = "郵件內容";
msg.BodyEncoding = Encoding.UTF8;
msg.IsBodyHtml = true;
msg.Priority = MailPriority.High;

SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
client.Credentials = new NetworkCredential("account@gmail.com", "password");
client.EnableSsl = true;
client.Send(msg);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved