2012-03-30 3 views
0

HRチームが従業員に調査を送信するために使用するASP.NET 4.0 Webアプリケーションがあります。 GoogleではGoogle Appsを使用しているため、Google Appsアカウントでこれらのアンケートメールを送信しようとしています。Google AppsによるSystem.Net.Mailを使用した電子メールタイミングの調整

私は電子メールを送信するために以下の設定を使用しました。

Host - smtp.gmail.com 
Port - 587 
EnableSsl=true 

私のユーザ名とパスワード。

これは電子メールを送信するためのコードです。

using (SmtpClient smtp = new SmtpClient()) 
       { 
        smtp.Timeout = 0; 
        smtp.Send(message); 
       } 

設定はweb.configにあり、そこから読み取られます。

今すぐ私の問題..

時間チームは、アンケートを送信する複数のユーザーを選択します。彼らは、調査を送信するために、一度に1つを選ぶことも、最大100個まで選ぶこともできます。各調査リンクは異なる必要があるため、ユーザーのリストを繰り返して電子メールを送信します。

アプリケーションが最大12個の電子メールを送信した後、それ以上送信を停止します。それを送信しようとする次の電子メールはエラーを投げます。私はもう一度再試行した場合

以降続い
Message = The operation has timed out. 
Status Code =GeneralFailure 
Stack Trace = at System.Net.Mail.SmtpClient.Send(MailMessage message) 
    at ABC.Business.Mail.SendMail(MailMessage message, String& errorMessage) 

それはその、この状態になる場合は、唯一の方法アウトがIISをretartすることで、エラー

Message = Failure sending mail. 
Status Code =GeneralFailure 
Stack Trace = at System.Net.Mail.SmtpClient.Send(MailMessage message) 
    at ABC.Business.Mail.SendMail(MailMessage message, String& errorMessage) 

をスローします。私がIISを再起動すると、次の12奇数のために再び正常に動作します。

何が問題になりますか?助けてください。

答えて

1

タイムアウトをゼロに設定しないでください。

デフォルトは100,000mS(100秒)です。少なくともそのままにしてください。

+0

私はタイムアウト= 0を設定すると無限に待機することを意味すると思いましたか?私が間違っている? –

0

Chris、TimeOutは、ASP.NETアプリケーションを自動的にシャットダウンする前に要求が実行されるのを待つようにします。したがって、timeOutを0に設定すると、ASP.NETは要求の実行を待機せず、操作がタイムアウトになるとエラーをスローします。

TimeOutは少なくとも180秒である必要があります。

ありがとうございました。

1

System.Net.Mailは「明示的なSSL」のみをサポートしています。

明示的なSSL

System.Net.Mailは、 "明示的なSSL" をサポートしています。明示的なSSLは、ポート25で暗号化されていない状態で開始し、次にSTARTDLSを発行し、暗号化された接続に切り替えます。参照してください。RFC 2228

ような何か行くだろう

明示SLL:25に接続 - > StartTLSを(暗号化するために開始します) - >認証 - SMTPサーバが最初から右にSSL/TLS接続を想定している場合>データ

を送信しますそれは動作しません。

暗黙のSSL

System.Net.Mailで暗黙のSSL(SMTPS)を使用する方法はありません。暗黙的なSSLは、接続全体がSSL層にラップされます。特定のポートが使用されます(ポート465は共通です)。暗黙のSSLを扱う正式なRFCはありません。これはバグとはみなされません

、それが機能要求のデータを送信> - - >接続 - >認証(暗号化を開始する)SSLを開始します。

暗黙SLLは次のように行くだろう。 SMTPには2つのタイプのSSL認証があり、われわれは明示的なSSL(設計による)のみをサポートしています。

デモコード:

*

protected void Btn_SendMail_Click(object sender, EventArgs e) 
{ 
     try 
     { 
      var fromAddress = "[email protected]"; 
      var toAddress = "[email protected]"; 
      const string fromPassword = "xxxxxxxx"; 
      string subject = "Sending Demonstration"; 
      string body = "From: " + txtFrom.Text + "\n";    
      var smtp = new System.Net.Mail.SmtpClient(); 
      { 
       smtp.Host = "smtp.gmail.com"; 
       smtp.Port = 25; 
       smtp.EnableSsl = true; 
       smtp.Credentials = new NetworkCredential(fromAddress, fromPassword); 
      } 
      smtp.Send(fromAddress, toAddress, subject, body); 
      Response.Write("<script language=javascript> alert('send')</script>"); 
     } 
     catch (Exception ex) 
     {    
      txtBody.Text = ex.Message; 
     } 
    } 

*

このコードはエラーなしで働いている!!!!

関連する問題