您的位置:首页 > 大数据 > 人工智能

使用System.Net.Mail发送邮件时,附件如果是中文名的处理办法

2014-11-10 11:21 656 查看
有个开发需求是,需要在发送邮件时同时发送附件,这个功能倒是比较好实现,代码如下:

<span style="white-space:pre">	</span>    ArrayList attachList = new ArrayList();
System.Net.Mail.Attachment attach = new System.Net.Mail.Attachment(strFilePath, System.Net.Mime.MediaTypeNames.Application.Octet);
//为了解决附件名为中文的问题
attach.NameEncoding = Encoding.GetEncoding("gb2312");
attachList.Add(attachList);
但是发现,这样处理后发送出来的邮件里面的附件名称为乱码了,后台网上查了下,原来framework 4.0有个bug,会产生这样的问题,下载了微软的补丁后就正常了。

补丁地址:http://support.microsoft.com/kb/2402064/

后来发现,我们这边存到数据里的strFilePath里面除了原来的文件名之外,还在前面加了一段guid的字符串,这样收到的邮件附件名称就会包含这个字符串,看起来就觉得怪怪的,就想到要通过attach.ContentDisposition.FileName的属性来重新设置附件的名称为原来的名称,可是直接这样设置的话,因为包含中文字符,在发送邮件时会报错。没办法又在网上找找了找,在这篇文章里找到了解决方案(http://blog.csdn.net/xrascal/article/details/4341062)。

原来需要将filename经过处理后才能使用,处理方法如下:

/// <summary>
/// 获取经过base64编码后的附件名称
/// </summary>
/// <param name="strFileName">为原来的附件名称</param>
/// <returns></returns>
private string GetFileName(string strFileName)
{
Encoding _Encoding = Encoding.GetEncoding("gb2312");
byte[] bytes = _Encoding.GetBytes(strFileName);
//这里要还需要加上其他的一些格式
return string.Format("=?{0}?B?{1}?=", _Encoding.HeaderName, Convert.ToBase64String(bytes));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: