首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C# SmtpClient编程中设置中文附件文件名?

如何在C# SmtpClient编程中设置中文附件文件名?
EN

Stack Overflow用户
提问于 2010-12-09 18:43:28
回答 3查看 3.3K关注 0票数 3

我的代码如下:

代码语言:javascript
复制
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?=“。

请注意,如何使用附件文件名中的中文字符?

EN

回答 3

Stack Overflow用户

发布于 2010-12-09 19:51:23

你能不能试试:

代码语言:javascript
复制
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);
票数 2
EN

Stack Overflow用户

发布于 2010-12-09 19:29:25

不,这是调试器中的正确值。MIME内容文件名必须始终采用ASCII码,因此必须对其他字符集进行编码以进行传输(请参阅RFC 2047)。

这是您的中文字符的base64编码的UTF8表示--这就是=?utf8?B?前缀的意思。收件人电子邮件客户端应该将其解码回正确的字符。

编辑:哦,我没听到你说收到的文件名是错的。我建议您尝试向不同的电子邮件客户端发送电子邮件,看看问题是否出在收件人身上,并将邮件头与文件名正确的电子邮件进行比较,如果您可以从不同的客户端生成电子邮件,但我不确定还能提出什么建议。

票数 0
EN

Stack Overflow用户

发布于 2010-12-10 09:10:42

最后,我找到了一个解决办法,根据RFC2047,分隔符可以是CRLF或‘ecoded-word’之间的空格,C#使用CRLF作为分隔符,但是NOTES/Gmail客户端无法解释它,并且在我用空格替换CRLF之后,它在NOTE/Gmail中工作得很好。

谢谢Rup,您对RCF2047的引用帮助了我!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4397332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档