2011-09-13 13 views
6

System.Net.Mailを使用してメールを送信したときに、メッセージがすぐに送信されないようです。彼らは私の受信箱に達する前に1,2分かかります。一度アプリケーションを終了すると、すべてのメッセージが数秒で受信されます。 SmtpClientがメッセージをすぐに送信できるようにする何らかの種類のメールメッセージバッファ設定がありますか?System.Net.MailとMailMessageがすぐにメッセージを送信しない

public static void SendMessage(string smtpServer, string mailFrom, string mailFromDisplayName, string[] mailTo, string[] mailCc, string subject, string body) 
{ 
    try 
    { 
     string to = mailTo != null ? string.Join(",", mailTo) : null; 
     string cc = mailCc != null ? string.Join(",", mailCc) : null; 

     MailMessage mail = new MailMessage(); 
     SmtpClient client = new SmtpClient(smtpServer); 

     mail.From = new MailAddress(mailFrom, mailFromDisplayName); 
     mail.To.Add(to); 

     if (cc != null) 
     { 
      mail.CC.Add(cc); 
     } 

     mail.Subject = subject; 
     mail.Body = body.Replace(Environment.NewLine, "<BR>"); 
     mail.IsBodyHtml = true; 

     client.Send(mail); 
    } 
    catch (Exception ex) 
    { 
     logger.Error("Failure sending email.", ex); 
    } 

おかげで、

マーク

+0

[送信](http://msdn.microsoft.com/en-us/library/swas0fwc.aspx)または[SendAsync](http://msdn.microsoft.com/en-us/library)を使用していますか。 /x5x13z6h.aspx)?電子メールサーバーに直接送信していますか、他のSMTPサーバー経由で送信していますか? – Rup

+0

私は自分自身にメールを送信すると、すぐにメールが届くので、smtpサーバーではないことに注意してください。 – mservidio

+0

を使用して送信します。私はちょうど私のヘルパーメソッドを追加しました... – mservidio

答えて

10

あなたはDOTNET 4.0

using (SmtpClient client = new SmtpClient(smtpServer)) 
{ 
    MailMessage mail = new MailMessage(); 
    // your code here. 

    client.Send(mail); 
} 

にしている場合、これは、そのSMTPセッションをラップさせ、あなたのclientインスタンスを配置し、これを試してみてくださいQUITプロトコル要素を含む。

以前のバージョンのドットネットでは、プログラムが送信するメッセージごとに同じSmtpClientインスタンスを再利用するように調整してみてください。

もちろん、電子メールは本来ストアアンドフォワードシステムであり、smtp SENDから受信までの遅延については同期的(または形式的にも予測可能)はありません。

+0

華麗!そうです。あなたが言及したように処分されない限り、直ちに実行されない遅延作業がある可能性があります。 – mservidio

0

私はOllieに同意します。 質問に答えるために、いいえ、私はあなたがフォームを介して設定できるバッファ設定があるとは思わない。

あなたの質問について混乱させるものは、あなたの受信トレイに届くのに1〜2分かかると言いますが、あなたに送信すると即座に通過すると言います。内部的にはメッセージは正常に送信され、問題は外部アドレスに対してのみ発生します。この場合、おそらくあなたの電子メールサーバーが、外部アドレスにバインドされた他の電子メールの背後にあるこれらのメッセージを待ち行列に入れているように思えます(これは通常の動作です)。外部サイトで1〜2分待っても、それほど待たずに済んでいます。

しかし、これはそうではありませんが、Exchangeサーバーは送信メッセージをスキャンするように設定されていますか?

+0

私は自分自身を送ると言ったとき、私はOutlookで新しいメッセージを開いて自分自身に電子メールを送信するとすぐに自分の受信トレイに入ります。上記のコードを使用してメールを(同じアドレスに)送信していたとき、メッセージは受信トレイに表示されるまで数分かかっていました。 – mservidio

+0

それは理にかなっています。私はこれはスキャンの問題、多分交換サーバーのリレー設定とは思わないでしょうか? – mutek

+0

上記のコメントを参照してください。 @ Jasonは問題をより詳細に説明します。 – mservidio

関連する問題