【发布时间】:2011-12-14 03:23:53
【问题描述】:
在处理一个使用国际文件名通过电子邮件发送文件的项目时,我遇到了一个不寻常的问题。如果我只附加一个 US-ASCII 文件名,我可以得到超过 200 个字符的长度而不会出错。
如果我包含一个扩展字符,它会以 UTF-8 编码,并且在它变得时髦之前的长度非常小(
=utf-8BSU5GT1JNw4FUSUNBX0ltcGFjdF9Bc3Nl
它看起来像是带有 UTF-8 解码指令或 mime 边界的 UTF8 编码字符串...不确定是哪个。
以前有没有人见过这个 - 以及文件名的规则/限制是什么 - 我尝试通过 Outlook 手动发送文件并处理它,所以我不认为这是特定于 MIME 的限制。
示例代码:
class Program
{
private const string DOMAIN = "foobar.com";
private const string SMTPHOST = "mail." + DOMAIN;
private const string FROM = "chadwick.posey@" + DOMAIN;
private const string TO = FROM;
static void Main(string[] args)
{
MailMessage msg = new MailMessage(FROM, TO, "Subject", "Body");
string path = Path.GetTempPath();
string name = "AAAAAA_AAAAAAAAAAAA_AAAAAAA_AAAA - IIIIIII CCCCCCCCCC DD IIIIIIÁIIII_20111018_091327.pptx";
File.WriteAllText(path + "\\" + name, "blah");
Attachment att = new Attachment(path + "\\" + name, new ContentType("application/vnd.openxmlformats-officedocument.presentationml.presentation"));
msg.Attachments.Add(att);
SmtpClient client = new SmtpClient(SMTPHOST, 25);
client.Send(msg);
}
}
我已经尝试过(到目前为止)——将 attachment.NameEncoding 的编码设置为 UTF8 和 UTF32,但都不起作用。在附件上设置 ContentDisposition.FileName 失败,因为它不只使用 US-ASCII 字符。
关于如何让它包含完整的文件名和重音/扩展字符的任何建议?
谢谢 查德威克
【问题讨论】:
-
你试过Unicode编码{iso-8859-1}吗?
-
John:是的...我也尝试过 unicode...当它包含特殊字符时,它似乎与字符串的长度有关。
标签: c# .net email mime attachment