2016-09-27 98 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