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

紅框處 EHLO xqxPC 中的機器名若為中文,SMTP 服務器拒絕協商。
System.Net.Mail.SmtpClient + MailMessage 發送,代碼簡潔。client.Credentials = new NetworkCredential("account@gmail.com", "password");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);