Вложение без имени файла

#c# #email

#c# #Адрес электронной почты

Вопрос:

При использовании пространства имен System.Net.Mail для отправки электронного письма с вложением в любую учетную запись Yahoo вложение загружается с именем «без названия» вместо имени файла.

В интерфейсе Yahoo Mail вложение выглядит с правильным именем, но когда вы загружаете его, имя загрузки становится «без названия» для всех вложений. То же сообщение электронной почты отлично работает с Gmail, Outlook.com , Windows Live Mail и другие клиенты.

Просматривая необработанное сообщение, оно задает тип содержимого с именем, но без атрибута filename. Yahoo работает нормально, если установлен атрибут filename, но библиотека C # не использует это.

Это заголовок, сгенерированный C # для вложений:

 Content-Type: application/octet-stream; name=test.pdf
  

Это заголовок, который работает с Yahoo:

 Content-Type: application/octet-stream; name=file2; filename=test.pdf
  

Кто-нибудь сталкивался с этой проблемой до сих пор? Есть ли обходной путь для отправки почты на C # по умолчанию?

  using (var message = new MailMessage("from@domain", "to@yahoo.com.br", "Test with attachment", "Test with attachment"))
    {
        var attachment = new Attachment(@"c:temptest.pdf"); // Same result using stream instead path to file.
        attachment.Name = "test.pdf"; // Same result without this line.
        message.Attachments.Add(attachment);

        using (var smtp = new SmtpClient("smtp.domain", 587))
        {
            smtp.Credentials = new NetworkCredential("from@domain", "password");
            smtp.Send(message);
        }
    }
  

Комментарии:

1. Вы пытались установить свойство Name для вложения? Можете ли вы показать нам свой код?

2. Да, я попытался установить имя файла, отправив его в виде потока и передав путь к файлу. Я добавлю код, чтобы было понятно.

Ответ №1:

Я нашел решение:

 attachment.ContentDisposition.FileName = "test.pdf";
  

Это добавит отсутствующий атрибут filename в необработанное сообщение электронной почты и устранит ограничение Yahoo.

Ответ №2:

Вы пытались явно указать тип содержимого?

 var attachment = new Attachment(... , MediaTypeNames.Application.Octet);
  

Комментарии:

1. Да, я также пытался настроить типы носителей. Загрузка работает нормально (не повреждена). Единственная проблема — это имя файла и только с учетными записями Yahoo.