Посылая электронное письмо с вложениями от C#, вложения прибывают как Часть 1.2 в Thunderbird

У меня есть приложение C# который электронные письма отчеты в форме электронной таблицы Excel через сервер Exchange 2007 с помощью SMTP. Они прибывают прекрасные для Пользователей Outlook, но для Thunderbird и пользователей Blackberry вложения были переименованы как "Часть 1.2".

Я нашел эту статью, которая описывает проблему, но, кажется, не дает мне обходное решение. Я не имею контроля над Exchange Server, так не может внести изменения там. Есть ли что-нибудь, что я могу сделать на конце C#? Я попытался использовать короткие имена файлов и кодирование HTML для тела, но ни один не имел значение.

Мой почтовый код отправки - просто это:

public static void SendMail(string recipient, string subject, string body, string attachmentFilename)
{
    SmtpClient smtpClient = new SmtpClient();
    NetworkCredential basicCredential = new NetworkCredential(MailConst.Username, MailConst.Password);
    MailMessage message = new MailMessage();
    MailAddress fromAddress = new MailAddress(MailConst.Username);

    // setup up the host, increase the timeout to 5 minutes
    smtpClient.Host = MailConst.SmtpServer;
    smtpClient.UseDefaultCredentials = false;
    smtpClient.Credentials = basicCredential;
    smtpClient.Timeout = (60 * 5 * 1000);

    message.From = fromAddress;
    message.Subject = subject;
    message.IsBodyHtml = false;
    message.Body = body;
    message.To.Add(recipient);

    if (attachmentFilename != null)
        message.Attachments.Add(new Attachment(attachmentFilename));

    smtpClient.Send(message);
}

Спасибо за любую справку.

100
задан davmos 26 February 2014 в 07:44
поделиться

1 ответ

Явное заполнение полей ContentDisposition помогло.

if (attachmentFilename != null)
{
    Attachment attachment = new Attachment(attachmentFilename, MediaTypeNames.Application.Octet);
    ContentDisposition disposition = attachment.ContentDisposition;
    disposition.CreationDate = File.GetCreationTime(attachmentFilename);
    disposition.ModificationDate = File.GetLastWriteTime(attachmentFilename);
    disposition.ReadDate = File.GetLastAccessTime(attachmentFilename);
    disposition.FileName = Path.GetFileName(attachmentFilename);
    disposition.Size = new FileInfo(attachmentFilename).Length;
    disposition.DispositionType = DispositionTypeNames.Attachment;
    message.Attachments.Add(attachment);                
}

Кстати , в случае Gmail у вас могут быть некоторые исключения, касающиеся SSL-безопасности или даже порта!

smtpClient.EnableSsl = true;
smtpClient.Port = 587;
86
ответ дан 24 November 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: