我的代码如下:
ContentType ct = new ContentType();
ct.MediaType = MediaTypeNames.Application.Octet;
ct.Name = "这是一个很长的中文文件名希望能用它在附件名中.Doc";
Attachment attach = new Attachment(stream, ct);但是收到的附件没有正确的中文文件名,并且我在VS2010调试器中发现ct.Name名为"=?utf-8?B?6L+Z5piv5LiA5Liq5b6I6ZW/55qE5Lit5paH5paH5Lu25ZCN5biM5pyb?=\r\n =?utf-8?B?6IO955So5a6D5Zyo6ZmE5Lu25ZCN5Lit?=“。
请注意,如何使用附件文件名中的中文字符?
发布于 2010-12-09 19:51:23
你能不能试试:
Attachment att = new Attachment(@"c:\path to file\somename.txt",
System.Net.Mime.MediaTypeNames.Application.Octet);
//this itself should work.
att.Name = "история-болезни.doc"; // non-english filename
//if the above line doesn't make it work, try this.
att.Name = System.Web.HttpUtility.UrlEncode(att.Name, System.Text.Encoding.UTF8);发布于 2010-12-09 19:29:25
不,这是调试器中的正确值。MIME内容文件名必须始终采用ASCII码,因此必须对其他字符集进行编码以进行传输(请参阅RFC 2047)。
这是您的中文字符的base64编码的UTF8表示--这就是=?utf8?B?前缀的意思。收件人电子邮件客户端应该将其解码回正确的字符。
编辑:哦,我没听到你说收到的文件名是错的。我建议您尝试向不同的电子邮件客户端发送电子邮件,看看问题是否出在收件人身上,并将邮件头与文件名正确的电子邮件进行比较,如果您可以从不同的客户端生成电子邮件,但我不确定还能提出什么建议。
发布于 2010-12-10 09:10:42
最后,我找到了一个解决办法,根据RFC2047,分隔符可以是CRLF或‘ecoded-word’之间的空格,C#使用CRLF作为分隔符,但是NOTES/Gmail客户端无法解释它,并且在我用空格替换CRLF之后,它在NOTE/Gmail中工作得很好。
谢谢Rup,您对RCF2047的引用帮助了我!
https://stackoverflow.com/questions/4397332
复制相似问题