2011-10-24 107 views
0

雖然對國際郵件文件名的文件,我遇到一個不尋常的問題,一個項目的工作。如果僅附加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字符。

如何得到它包括完整的文件名與機智口音/擴展字符有什麼建議?

感謝 查德威克

+0

你試過Unicode編碼{iso-8859-1}嗎? –

+0

John:是的......我也嘗試過unicode ......當它包含特殊字符而非其他任何字符時,它似乎更多地處理字符串的長度。的[Emaling附件與長文件名和口音] – mcse3010

+0

可能重複(http://stackoverflow.com/questions/10654853/emaling-attachments-with-long-names-and-accents) – Styxxy

回答

0

這應該工作:

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); 

How to set the attatchment file name with chinese characters in C# SmtpClient programming?

+1

進一步審查後,實際的問題似乎源於文件名的長度,而不僅僅是它包含一些國際字符的事實。如果編碼的文件名最終包裝了多行,.NET框架似乎編碼了編碼的文件名並最終破壞了整個混亂。我已經提交它作爲一個錯誤在這裏:[微軟連接](https://connect.microsoft.com/VisualStudio/feedback/details/696372/filename-encoding-error-when-encoding-utf-8-and-encoded -name-exceed-the-length-of-a-single-mime-header-line#details)以及上述的修改版本。 – mcse3010

1

有來自微軟的修補程序似乎已經完成了招我。 Check http://support.microsoft.com/kb/2402064 在該頁面上,有一個下載鏈接可以幫助您獲得所需的內容。 只需安裝正確的版本,具體取決於您的系統。