91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SmtpClient發送郵件時附件名稱亂碼

發布時間:2020-07-22 19:16:26 來源:網絡 閱讀:5751 作者:BoyTNT 欄目:編程語言

在用戶環境發現一個現象,使用System.Net.Mail.SmtpClient發送郵件,當附件名包含中文且長度較長時,最終的郵件里附件名會亂掉,寫個簡單的測試程序:

var mail = new MailMessage("from@test.com", "to@test.com");
mail.Subject = "測試郵件亂碼";
var atta = new Attachment(@"C:\測試郵件中文出現亂碼20150115.rar");
mail.Attachments.Add(atta);

var smtp = new SmtpClient();
smtp.Host = "test.com";
smtp.Credentials = new NetworkCredential("from", "test");
smtp.Send(mail);


使用Foxmail接收郵件,然后查看郵件原始信息,發現附件部分的MIME居然是這樣的:

SmtpClient發送郵件時附件名稱亂碼


這個怪異的name導致了在郵件客戶端里顯示亂碼。換不同的機器測試,有些機器是正常的,說明與軟件環境有關。正常的郵件應該是這樣的:

SmtpClient發送郵件時附件名稱亂碼


研究了一下,發現是.Net Framework的BUG,詳見微軟網站:http://support.microsoft.com/kb/2402064, 當附件名超過41個utf8 byte時,會錯誤的進行2次編碼導致的。 補丁見 https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=31723。


如果服務器未升級,可以暫時修改程序來避開這個BUG,主要是手工指定附件的名稱:

var mail = new MailMessage("from@test.com", "to@test.com");
mail.Subject = "測試郵件亂碼";
string file = @"C:\測試郵件中文出現亂碼20150115.rar";
var atta = new Attachment(file);
string name = Path.GetFileName(file);
string base64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(name));
atta.ContentDisposition.FileName = string.Format("=?utf-8?B?{0}?=", base64);   //指定附件的filename
atta.Name = "p_w_upload";           //指定MimePart的Name,不包含中文,這樣就不會被BUG影響
atta.NameEncoding = Encoding.UTF8;
mail.Attachments.Add(atta);

var smtp = new SmtpClient();
smtp.Host = "test.com";
smtp.Credentials = new NetworkCredential("from", "test");
smtp.Send(mail);


此時收到的郵件是這樣的,注意劃紅線部分:

SmtpClient發送郵件時附件名稱亂碼




向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

竹山县| 九江市| 吕梁市| 庆阳市| 四子王旗| 屏东县| 大邑县| 崇仁县| 承德县| 巫山县| 呼伦贝尔市| 五河县| 宜兰县| 芜湖县| 洛扎县| 太原市| 云和县| 沙洋县| 色达县| 靖远县| 绍兴市| 广昌县| 萍乡市| 安义县| 灵宝市| 泉州市| 嘉定区| 运城市| 宁南县| 兖州市| 五大连池市| 亳州市| 英超| 错那县| 望奎县| 藁城市| 青龙| 洪雅县| 齐齐哈尔市| 景谷| 马山县|