Не удается отправлять электронные письма с большими вложениями в VS 2010 - PullRequest
0 голосов
/ 21 сентября 2010

Я прошел по этой ссылке. (http://connect.microsoft.com/VisualStudio/feedback/details/544562/cannot-send-e-mails-with-large-attachments-system-net-mail-smtpclient-system-net-mail-mailmessage)

В .NET Framework 4.0 невозможно отправить электронное письмо с вложением размером более 4 МБ. Тот же код работает для маленьких и больших файлов, если вы установите целевую платформу с .NET Framework 4.0 на .NET Framework 3.5. Так что это не может быть проблемой с нашей почтовой конфигурацией! Я не получаю ошибки, если я прикрепляю, например, 10 файлов по 2 МБ! Я искал в Google, но не получил его.

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

Мы применили этот патч Microsoft и все еще видим проблему?
Может кто-нибудь сказать мне, как это исправить?

Ответы [ 2 ]

0 голосов
/ 24 августа 2015

Это, вероятно, первая ошибка, о которой сообщал заказчик на данный момент для класса System.Net.Mail в .NET 4.0 Framework, или, по крайней мере, первая, над которой я работал.Это было довольно прямолинейное воспроизведение, и мне не пришлось много делать, чтобы воспроизвести проблему локально.

 static void Main(string[] args)

    {

        SmtpClient client = new SmtpClient("contoso_smtp_server");
        client.Credentials = new System.Net.NetworkCredential("User1", "Password", "contoso");


        MailMessage msg = new MailMessage("user1@contoso.com", "user2@contoso.com", "Large Attachment Mail", "Large Attachment - Test Body");

        Attachment attachment = new Attachment(@"d:\3mb.dat");
        msg.Attachments.Add(attachment);

        client.Send(msg);


    }

Это был самый простой код, который вы могли написать для отправки электронной почты с использованием SNM, но проблема в том, что это не удалосьс сообщением «Ошибка при отправке электронной почты».Поэтому я осмотрел происходящее и обнаружил, что проблема связана не с SNM, а с его базовыми классами, а именно с классом Base64Encoding, который использовался как метод кодирования вложений электронной почты при отправке по умолчанию.

Это спасло меня большеустранение неполадок, и я изменил способ кодирования вложений с Base64 на 7Bit, и это работало как чудо.

Так что все, что вам нужно сделать, это добавить любую из следующих строк в ваш код, чтобы заставить его работать.

Любой «один» из этих двух разделов кода будет работать

attachment.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable;

attachment.TransferEncoding = System.Net.Mime.TransferEncoding.SevenBit;

Это решение было найдено в этом сообщении

0 голосов
/ 22 сентября 2010

Возможное решение с помощью SMTP Pickup Directory

Я не знаю, есть ли ошибка в коде, который отправляет сообщение через SMTP или в сериализации MailMessage с большими вложениями. Если он находится в состоянии отправки и сериализации в порядке, вы можете попытаться преодолеть его с помощью отправки через каталог раскладки.

Примерно так:

        //create the mail message
        MailMessage mail = new MailMessage();

        //set the addresses
        mail.From = new MailAddress("me@mycompany.com");
        mail.To.Add("you@yourcompany.com");

        //set the content
        mail.Subject = "This is an email";
        mail.Body = "this is the body content of the email.";

        //if we are using the IIS SMTP Service, we can write the message
        //directly to the PickupDirectory, and bypass the Network layer
        SmtpClient smtp = new SmtpClient();
        smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
        smtp.Send(mail);

Вам потребуется работающий SMTP-сервер Microsoft (Microsoft IIS, Microsoft Exchange) на том же компьютере, на котором работает код.

Альтернативное решение:

Можно использовать сторонний компонент SMTP, который не имеет ограничения размера вложений (наш Rebex Secure Mail .NET компонент является примером такой библиотеки SMTP).

...