MIME имена на прикачени файлове, съдържащи разширени знаци, са неуспешни

Докато работя по проект, който изпраща по имейл файлове с международни файлови имена, попаднах на необичаен проблем. ако прикача само с US-ASCII име на файл, мога да получа повече от 200 знака без грешки.

Ако включа разширен знак, той кодира в UTF-8 и дължината, преди да стане фънки, е много малка (‹ 40 знака). За да дефинирате funky.. ето примерно име на файл, след като се повреди:

=utf-8BSU5GT1JNw4FUSUNBX0ltcGFjdF9Bc3Nl

изглежда като UTF8 кодиран низ с инструкция за декодиране UTF-8 или mime граница... не съм сигурен кое.

Някой виждал ли е това преди -- и какви са правилата/ограниченията на имената на файлове -- Опитах се да изпратя файла на ръка чрез 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);
    }
}

Опитах (досега) -- зададох кодирането за прикачения файл.NameEncoding на UTF8 и UTF32, нито едното не работи. Задаването на ContentDisposition.FileName на прикачения файл е неуспешно, защото не използва само US-ASCII знаци.

Някакви предложения как да го накарате да включва пълното име на файла с акцента / разширените символи в такт?

Благодаря Чадуик


person mcse3010    schedule 24.10.2011    source източник
comment
Опитвали ли сте Unicode кодиране {iso-8859-1}?   -  person John Gathogo    schedule 24.10.2011
comment
Джон: Да... Опитах и ​​уникод... изглежда, че има повече връзка с дължината на низа, когато включва специалните символи, отколкото с всичко друго.   -  person mcse3010    schedule 24.10.2011
comment
възможен дубликат на Emaling прикачени файлове с дълги имена и ударения   -  person Styxxy    schedule 13.09.2013


Отговори (2)


Има актуална корекция от Microsoft, която изглежда свърши работа за мен. http://support.microsoft.com/kb/2402064 На тази страница има връзка за изтегляне, която ще ви осигури това, от което се нуждаете. Просто инсталирайте правилната версия, в зависимост от вашата система.

person Joel    schedule 12.06.2012

това трябва да работи:

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

Как да задам името на прикачения файл с китайски символи в програмирането на C# SmtpClient?

person Davide Piras    schedule 24.10.2011
comment
След допълнителен преглед изглежда, че действителният проблем произтича повече от дължината на името на файла, отколкото просто от факта, че съдържа няколко международни знака. Ако кодираното име на файл в крайна сметка обвива повече от един ред, изглежда, че .NET framework кодира кодираното име на файл и в крайна сметка поврежда цялата бъркотия. Изпратих го като грешка тук: Microsoft Connect, заедно с модифицирана версия на горното. - person mcse3010; 24.10.2011