2016-09-27 5 views
0

Я пытаюсь отправить электронное письмо с помощью Smtp с помощью «smtp.gmail.com». Наш проект использует .net 3.5 Framweork и C#, чтобы поддерживать совместимость с XP. Тем не менее, я всегда терпел неудачу, когда приложение больше 5 МБ. Я прочитал, что Google smtp позволяет отправлять вложения размером до 25 МБ. Однако, когда я пытаюсь сделать это, он всегда бросают ошибку:Отправить письмо с большим вложением с помощью C#

System.Net.Mail.SmtpException: Failure sending mail. ---> System.IO.IOException: The write operation failed, see inner exception. ---> System.Threading.ThreadAbortException: Thread was being aborted. 
    at System.Net.UnsafeNclNativeMethods.OSSOCK.send(IntPtr socketHandle, Byte* pinnedBuffer, Int32 len, SocketFlags socketFlags) 
    at System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, SocketError& errorCode) 
    at System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) 
    at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size) 
    at System.Net.Security._SslStream.StartWriting(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security._SslStream.ProcessWrite(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest) 
    --- End of inner exception stack trace --- 
    at System.Net.Security._SslStream.ProcessWrite(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size) 
    at System.Net.DelegatedStream.Write(Byte[] buffer, Int32 offset, Int32 count) 
    at System.Net.DelegatedStream.Write(Byte[] buffer, Int32 offset, Int32 count) 
    at System.Net.DelegatedStream.Write(Byte[] buffer, Int32 offset, Int32 count) 
    at System.Net.DelegatedStream.Write(Byte[] buffer, Int32 offset, Int32 count) 
    at System.Net.DelegatedStream.Write(Byte[] buffer, Int32 offset, Int32 count) 
    at System.Net.DelegatedStream.Write(Byte[] buffer, Int32 offset, Int32 count) 
    at System.Net.Base64Stream.FlushInternal() 
    at System.Net.Base64Stream.Write(Byte[] buffer, Int32 offset, Int32 count) 
    at System.Net.Mime.MimePart.Send(BaseWriter writer) 
    at System.Net.Mime.MimeMultiPart.Send(BaseWriter writer) 
    at System.Net.Mail.SmtpClient.Send(MailMessage message) 
    --- End of inner exception stack trace --- 
    at System.Net.Mail.SmtpClient.Send(MailMessage message) 

Это метод я использую для отправки почты:

public void Send(SMTPServerInfo serverInfo, string from, string to, string subject, string body, IList<Attachment> attachments) 
{ 
    SmtpClient client = new SmtpClient(); 
    client.EnableSsl = serverInfo.EnableSSL; 
    MailMessage message = new MailMessage(from, to, subject, body); 
    if(IsHTML) 
    message.IsBodyHtml = true; 
    client.Host = serverInfo.ServerName; 
    if(!Text.IsEmpty(serverInfo.UserName)) 
    client.Credentials = new NetworkCredential(serverInfo.UserName, serverInfo.Password); 
    if(serverInfo.Port.HasValue) 
    client.Port = serverInfo.Port.Value; 
    if(attachments != null) 
    foreach(Attachment attachment in attachments) 
     message.Attachments.Add(attachment); 

    client.Send(message); 
    message.Dispose(); 
} 

Я не знаю, почему это происходит.

+0

Какое внутреннее сообщение об исключении? – ChrisBint

+0

Я проверил ваш код с почтовым сервером GMX, и он работает нормально. Я скомпилировал его с .NET 3.5 и отправил файл 8.53 МБ - никаких ошибок. Я предполагаю, что это может быть ограничение GMail. (может быть как-то изменено в настройках учетной записи?) –

+0

@ChrisBint Я обновляю внутреннюю трассировку стека исключений. – kfmlx

ответ

0

Эта ошибка генерируется, когда SMTP является силой, чтобы остановить при отправке больших вложений. Проблема заключается не в SMTP, а в тайм-ауте. См.:

System.Threading.ThreadAbortException: Thread was being aborted 

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

0

Вы должны Инстанцировать почту как это:

System.Net.Mail.Attachment attachment1; 
attachment1 = new System.Net.Mail.Attachment(attachmentFilePath_Here); 
message.Attachments.Add(attachment1); 
+0

Проблема заключается не в добавлении вложений, а в размере их, как это поможет в этом? – ChrisBint

 Смежные вопросы

  • Нет связанных вопросов^_^