2016-09-27 25 views
0
に送信する

"smtp.gmail.com"を使用してSmtpを使用してメールを送信しようとしています。私たちのプロジェクトでは、.net 3.5 FramweorkとC#を使用してXP互換性を維持しています。しかし、添付ファイルが5MBを超えると、私はいつも失敗しました。私は25メガバイトの大きさの添付ファイルを送信することを許可することをGoogleのSMTPが読んでいます。私はそれをしようとする場合しかし、それは常にエラーをスロー:大きな添付ファイルを添付したメールをc#

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(); 
} 

私は、なぜこの出来事があるかわからない:

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) 

これは私がメールを送信するために使用する方法です。

+0

内部例外メッセージとは何ですか? – ChrisBint

+0

私はあなたのコードをGMXメールサーバでテストしましたが、うまくいきます。 .NET 3.5でコンパイルし、8.53 MBのファイルを送信しました。エラーはありません。私はそれがGMailの制限かもしれないと仮定します。 (アカウントの設定でどうにか調整可能かもしれません) –

+0

@ChrisBint内部例外スタックトレースを更新します。 – kfmlx

答えて

0

このエラー。この問題は、SMTP内にタイムアウトもタイムアウトもありません。参照:エラーが示された理由である

System.Threading.ThreadAbortException: Thread was being aborted 

。電子メールを送信しているスレッドはアボートされます。私たちはスレッドの問題についてもっと調べる必要があるかもしれません。

0

あなたはこのようにメールをインスタンス化する必要があります:SMTPは大容量の添付ファイルを送信するときに停止するように強制した場合にスローさ

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

問題は、添付ファイルを追加することではない、それはそれらのサイズです、どのように上記の助けになりますか? – ChrisBint

関連する問題