2016-09-27 97 views
0

我正在嘗試使用「smtp.gmail.com」使用Smtp發送電子郵件。我們的項目使用.net 3.5 Framweork和c#來保持XP兼容性。但是,當附件超過5MB時,我總是失敗。我讀過谷歌smtp允許發送大至25MB的附件。然而,當我嘗試這樣做,它總是拋出錯誤:使用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 MB文件 - 沒有錯誤。我認爲這可能是GMail的限制。 (可能會在帳戶設置中以某種方式調整?) –

+0

@ChrisBint我更新內部異常堆棧跟蹤。 – kfmlx

回答

0

此錯誤時拋出的SMTP是力發送大附件時停止。問題不在SMTP內,也不在Timeout中。參見:

System.Threading.ThreadAbortException: Thread was being aborted 

這就是顯示錯誤的原因。發送電子郵件的線程被中止。請參閱我們可能需要檢查線程問題的更多信息。

0

你必須實例化郵件是這樣的:

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

這個問題不是添加附件,而是它們的大小,上面的幫助如何? – ChrisBint