使用System.Net.Mail发送邮件时,附件如果是中文名的处理办法
2014-11-10 11:21
656 查看
有个开发需求是,需要在发送邮件时同时发送附件,这个功能倒是比较好实现,代码如下:
补丁地址:http://support.microsoft.com/kb/2402064/
后来发现,我们这边存到数据里的strFilePath里面除了原来的文件名之外,还在前面加了一段guid的字符串,这样收到的邮件附件名称就会包含这个字符串,看起来就觉得怪怪的,就想到要通过attach.ContentDisposition.FileName的属性来重新设置附件的名称为原来的名称,可是直接这样设置的话,因为包含中文字符,在发送邮件时会报错。没办法又在网上找找了找,在这篇文章里找到了解决方案(http://blog.csdn.net/xrascal/article/details/4341062)。
原来需要将filename经过处理后才能使用,处理方法如下:
<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)); }
相关文章推荐
- 163邮箱发送邮件碰到:System.Net.Mail.SmtpException: 不允许使用邮箱名称。 服务器响应为:authentication is required
- C#发送邮件,使用System.Net.Mail的版本
- 使用System.Net.Mail发送邮件,vs2005与vs2008存在差别?
- 使用System.Net.Mail发送邮件
- 在.net程序中使用System.Net.Mail来发送邮件
- 使用System.Net.Mail在程序中发送邮件
- 使用System.Net.Mail.SmtpClient 发送邮件
- C#发送邮件,使用System.Net.Mail的版本
- win7(32bit)使用outlook发送带附件邮件时,对方收到winmail.dat的解决办法
- 使用System.Net.Mail发送邮件
- System.Net.Mail 发送邮件(带附件)
- 使用System.Net.Mail.SmtpClient发送邮件时出现的乱码问题
- 使用system.web.mail.SMTPmail发送邮件,处理smtp验证问题
- win7(32bit)使用outlook发送带附件邮件时,对方收到winmail.dat的解决办法
- C#使用 System.Net.Mail发送邮件功能
- ASP.Net使用jmail和System.Net.Mail发送邮件
- C#使用 System.Net.Mail发送邮件功能
- .net 1.1 下不使用 system.web.mail.smtpmail 发送邮件的其它选择_asp.net技巧
- System.Net.Mail发送邮件失败所在
- 使用System.Web.Mail通过需验证的邮件服务器发送邮件