Как отправить электронное письмо с вложением файла без расширения?

#c# #email #attachment #email-attachments

#c# #Адрес электронной почты #вложение #электронная почта-вложения

Вопрос:

Я создал консольное приложение C # и не могу отправить электронное письмо с вложенным файлом с именем «testfile» и без расширения.

Он успешно отправляет, но только с первым вложением («test.png») Как я могу отправить этот файл?

Вот мой код:

 internal static void SendTest()
{
    MailMessage mail = new MailMessage("Punter@gmail.com", "Michael378@live.com",
                                       "Success", "Attachment email");

    SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com", 587);
    SmtpServer.Credentials = new System.Net.NetworkCredential("Punter@gmail.com",      "BrudoTass");
        SmtpServer.EnableSsl = true;

        string test1 = @"C:UsersAdminDesktoptest.png";          //Picture
        string test2 = @"C:UsersAdminDesktoptestfile";   //File without extension
        var attachment1 = new Attachment(test1);
        var attachment2 = new Attachment(test2);

        mail.Attachments.Add(attachment1);
        mail.Attachments.Add(attachment2);

        SmtpServer.Send(mail);
    }
  

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

1. Я думаю, что это связано с gmail политикой в отношении файлов. Вы не можете отправлять файлы без расширения.

2. Я только что попробовал это с .NET 2.0 и .NET 4.5, и это работает с обоими (используя мои сетевые учетные данные, конечно). Ваш код работает без проблем для меня. Я вижу как вложение с расширением, так и без него. Который . Какую версию NET framework вы используете и что именно находится в этом файле (я пробовал это как с пустым файлом без расширения, так и с некоторым текстом)?

3. Вероятно, это не так, но я думаю, что расширением по умолчанию является .file

Ответ №1:

Попробуйте этот способ

         foreach (MessageAttachment ma in msg.Attachments)
        mail.Attachments.Add(BuildAttachment(ma));

        private Attachment BuildAttachment(MessageAttachment ma)
        {
            Attachment att = null;

            if (ma == null || ma.FileContent == null)
                    return att;

            att = new Attachment(new MemoryStream(ma.FileContent), ma.FileName   ma.FileType, ma.FileType.GetMimeType());
            att.ContentDisposition.CreationDate = ma.CreationDate;
            att.ContentDisposition.ModificationDate = ma.ModificationDate;
            att.ContentDisposition.ReadDate = ma.ReadDate;
            att.ContentDisposition.FileName = ma.FileName;
            att.ContentDisposition.Size = ma.FileSize;

            return att;
        }