Имена вложений MIME, содержащие ошибки расширенных символов - PullRequest
0 голосов
/ 24 октября 2011

Работая над проектом, который отправляет файлы с международными именами по электронной почте, я столкнулся с необычной проблемой.если я присоединяю только к имени файла US-ASCII, я могу получить лучше, чем 200 символов без ошибок.

Если я добавлю расширенный символ, он кодируется в UTF-8, а длина до того, как он станет интересной, оченьмаленький (<40 символов).Чтобы определить фанки ... вот пример имени файла после того, как он испортился: </p>

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

Я пробовал (пока) - установил кодировку для вложения. Имя кодирования UTF8 и UTF32, ни сработало.Задать ContentDisposition.FileName для вложения не удается, поскольку в нем не используются только символы US-ASCII.

Есть предложения о том, как включить в него полное имя файла с ударными / расширенными символами в такте?

Спасибо, Чедвик

Ответы [ 2 ]

1 голос
/ 12 июня 2012

Есть исправление от Microsoft, которое, похоже, помогло мне. Чек http://support.microsoft.com/kb/2402064 На этой странице есть ссылка для скачивания, которая даст вам то, что вам нужно. Просто установите правильную версию, в зависимости от вашей системы.

0 голосов
/ 24 октября 2011

это должно работать:

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?

...