SmtpClient 夾帶附件時發生"傳送郵件失敗"的處理

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);
}