雖然對國際郵件文件名的文件,我遇到一個不尋常的問題,一個項目的工作。如果僅附加US-ASCII文件名,我可以獲得長於200個字符的長度而不會出錯。MIME附件名稱失敗
如果我包括擴展的字符,它編碼在UTF-8和前它得到時髦的長度很小(< 40個字符)。要定義時髦..這裏是它的變壞之後的示例文件名:
=utf-8BSU5GT1JNw4FUSUNBX0ltcGFjdF9Bc3Nl
它看起來像UTF8編碼字符串與UTF8解碼指令或啞劇界......不知道哪個。
有沒有人見過這個 - 什麼是規則/限制的文件名 - 我試圖通過Outlook手動發送文件,它處理它,所以我不認爲這是一個MIME的具體限制。
示例代碼:
class Program
{
private const string DOMAIN = "foobar.com";
private const string SMTPHOST = "mail." + DOMAIN;
private const string FROM = "[email protected]" + 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 ......當它包含特殊字符而非其他任何字符時,它似乎更多地處理字符串的長度。的[Emaling附件與長文件名和口音] – mcse3010
可能重複(http://stackoverflow.com/questions/10654853/emaling-attachments-with-long-names-and-accents) – Styxxy