2010-09-21 2 views
0

Я прошел через эту ссылку. (http://connect.microsoft.com/VisualStudio/feedback/details/544562/cannot-send-e-mails-with-large-attachments-system-net-mail-smtpclient-system-net-mail-mailmessage)Не удается отправить электронные письма с большими вложениями в VS 2010

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

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

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

ответ

0

Возможный обходной путь, используя SMTP Pickup каталог

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

Что-то вроде этого:

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

     //set the addresses 
     mail.From = new MailAddress("[email protected]"); 
     mail.To.Add("[email protected]"); 

     //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); 

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

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

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

0

Это, вероятно, первая ошибка, о которой сообщается клиентом до сих пор для System.Net.Mail Class в .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("[email protected]", "[email protected]", "Large Attachment Mail", "Large Attachment - Test Body"); 

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

     client.Send(msg); 


    } 

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

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

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

Любые "один" из этих секций два кода будет работать

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

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

Это решение было найдено в this post