c# – 具有长非ASCII码名称的电子邮件附件
我尝试使用System.Net.Mail.Attachment发送System.Net.Mail.MailMessage.
附件名称是“Счёт-договор№4321от4июля.pdf” 附件创建代码: var nameEncoding = Encoding.UTF8; return new System.Net.Mail.Attachment(new MemoryStream(bytes),MessageBodiesHelpers.EncodeAttachmentName(fileName,nameEncoding),attachment.MediaType) { TransferEncoding = TransferEncoding.Base64,NameEncoding = nameEncoding }; MessageBodiesHelpers.EncodeAttachmentName中的代码取自https://social.msdn.microsoft.com/Forums/en-US/b6c764f7-4697-4394-b45f-128a24306d55/40-smtpclientsend-attachments-mit-umlauten-im-dateinamen?forum=dotnetframeworkde 如果我将附件发送到gmail或ms交换,则附件的名称解析成功.但! 如果我将该附件发送到icloud,那么我得到“???? ????№4321от4????.pdf” 邮件附件标题: 从ms交换: Content-Type: application/pdf; name="=?utf-8?B?0KHRh9GR0YIt0LTQ?==?utf-8?B?vtCz0L7QstC+0YAg?==?utf-8?B?4oSWNDMyMSDQvtGC?==?utf-8?B?IDQg0LjRjtC70Y8u?==?utf-8?B?cGRm?=" Content-Transfer-Encoding: base64 Content-Disposition: attachment 从icloud: Content-Transfer-Encoding: BASE64 Content-Type: APPLICATION/PDF; name="????-??????? =?utf-8?B?4oSWNDMyMSDQvtGC?= 4 ????.pdf" 如何格式化icloud的名称? UPD 如果我将outlook(ms交换)的消息转发到icloud,则附件的名称解析成功.头: Content-Transfer-Encoding: BASE64 Content-Disposition: ATTACHMENT; size=200702; modification-date="Mon,04 Jul 2016 13:40:22 GMT"; filename*=utf-8''%D0%A1%D1%87%D1%91%D1%82%2D%D0%B4%D0%BE%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%20%E2%84%964321%20%D0%BE%D1%82%204%20%D0%B8%D1%8E%D0%BB%D1%8F.pdf; creation-date="Mon,04 Jul 2016 13:40:22 GMT" Content-Type: APPLICATION/PDF; name*=utf-8''%D0%A1%D1%87%D1%91%D1%82%2D%D0%B4%D0%BE%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%20%E2%84%964321%20%D0%BE%D1%82%204%20%D0%B8%D1%8E%D0%BB%D1%8F.pdf UPD2 如果我使用icloud(icloud.com)的Web界面阅读消息,则附件的名称解析成功. 解决方法
在.NET 4.0中,SmtpClient现在实现RFC行长度限制(76个字符).这需要对编码过程进行大量更改,并且不涉及像您所描述的一些问题.
在您的情况下,非ASCII字符附件名称会被编码为超过41个utf-8字节(Encoding.UTF8.GetByteCount(fileName);)).在这种情况下,这些名称被编码两次,并且可能在其中有额外的换行符.唯一已知的解决方法是限制非ascii文件名的长度. 您可以阅读此post 了解有关您的问题的更多信息 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在VB.NET中防止Math.Round(95.55555555,2)从四舍五入到95.5
- ruby-on-rails – 捆绑控制台失败w /未初始化的常量Rails
- Vb.net得到了工作日的名字
- 在FlashBuilder下新建或导入项目时提示未安装asp.net devel
- ([^:“])在Ruby正则表达式中做了什么?
- 如何在Swift中限制UITextField中的某些字符?
- flex/air 护眼健康卫士(源码/air安装包)
- ios – Xcode 6 Beta – Apple Mach-O Linker错误
- iphone – 错误:’cv’之前的预期说明符限定符列表
- CORS跨域 Ajax headers 问题