SmtpClient 夾帶附件時發生"傳送郵件失敗"的處理
[前言]
筆者在一次處理 SmtpClient 寄信程式時,一直發生一個錯誤訊息。
傳送郵件失敗。
InnerException {"無法寫入資料至傳輸連接: 遠端主機已強制關閉一個現存的連線。。"}
System.Exception {System.IO.IOException} ...這個屬性不可以設定為空字串。參數名稱: value
[說明]
看到這個錯誤訊息,原先以為 是自己的檔案在處理 StreamWriter或是Excel有疏漏造成的。
但是經過確認的確沒有檔案關閉或是權限所造成這個問題。直到最後嘗試用英文檔名才發現,確認是中文檔名造成這個問題。
(看到這樣的錯誤訊息很難接受是中文檔名的問題吧@@)
[處理]
每次如果要夾帶中文檔案時,記得把 Attachment的 NameEncoding 設成 Encoding.UTF8 就可以了。
就是說要這樣子SmtpClient 才能識別中文檔名。
所以在筆者的寄信類別處理時,故意加上這個方法專門處理中文檔案...
/// <summary>
/// 加入附件(中文檔名)
/// </summary>
/// <param name="ma">檔名中間不可空白</param>
/// <param name="p_strFileChineseName">中文檔名</param>
public void AddAttachment(Attachment ma, string p_strFileChineseName)
{
ma.Name = p_strFileChineseName;
ma.NameEncoding = Encoding.UTF8;
m_ArEmail.Attachments.Add(ma);
}