0

長年の読者、初めての質問者。

110人のBCC受信者にメールを送信するとタイムアウトになります。

ウェブサイトから、自分が運営しているウェブサイトを運営しているクラブのメンバーに1通のメールメッセージを送信しようとしています。自分を送信者と受信者として追加すると、メンバーのメールアドレスがBCCリストに追加されます。会員数は約110名です。送信者のユーザー名とパスワードを使用してサーバーに対して認証します。

MailMessageは問題なく準備できますが、SmtpClient.Send()を呼び出すと、しきい値が10分であってもタイムアウトになります。受信者の数が少ない場合でも、Send()メソッドには時間がかかります(5〜7分)が、正常に完了します。これは、添付ファイルがなくても、メッセージまたは添付ファイルのサイズに関係なく発生します。

私のメールサーバー(ホストされているWebサーバー上)は、スパム/ブラックリストなどの外部システムまたは各受信者のメールサーバーに対して、各受信者の電子メールアドレスを何らかの形でチェックしていると思います。

私のホスティング会社は困惑しています、彼らはそれがすべて大丈夫だと盲目的に誓います。

メールサーバーにこれを行わないように指示するように設定できるStmpClientまたはMailMessageのメンバーを知っていますか?または、おそらく(さらに良い)Parallels HSPhere電子メールサーバーでこのアクションを停止するように設定しますか?

よろしくお願いします。

サンプルコード

bool SendEmail(string[] emailAddresses)
{
    MailMessage message = new MailMessage();
    SmtpClient smtp = new SmtpClient("mail.myServer.org");
    message.From = new MailAddress("website@myServer.org", "Display name");
    message.To.Add("website@myServer.org");

    foreach (string recipient in emailAddresses)
    {
        // ABout 110 recipients
        message.Bcc.Add(recipient);
    }

    message.Subject = "Whatever";
    message.ReplyTo = new MailAddress("myOtherEmailAddress@external.com");
    smtp.Credentials = new NetworkCredential(message.From.Address, "whatever");

    try
    {
        message.Body = "A few hundred bytes";
        smtp.Timeout = 300000; // 10 mins
        smtp.Send(message);
    }
    catch (Exception ex)
    {
        // Report here
    }

    return true;
}
4

1 に答える 1

0

この質問の解決策はDNSチェックです。私の送信メールサーバーは、受信者リストの各アドレスを取得し、DNSでドメインのMXレコードを検索しようとしました。
110のアドレスの場合、スコアの異なるドメインがいくつかあり、この検索には長い時間がかかりました。これはWhile-U-Waitで行われ、ブラウザがWebサーバーでの待機をあきらめたか、Webサーバーがメールサーバーでの待機をあきらめました(どちらが今か思い出せません)。

その後、私のプロバイダーはこのオプションを無効にしました。

彼らが問題を認めるのを待っている間、私は次の方法でそれを解決しました。110人の受信者で1つの電子メールを送信する代わりに、送信したい内容の詳細を2つのテーブルに保存しました。1行は本文用、もう1行は受信者用です。次に、別のASPページがこのテーブルをポーリングし、キューに入れられた10通の電子メールを一度に選択して送信し、HTMLを印刷して数秒後に更新しました。1ページに行を作成したら、送信ページをクリックして、バッチ処理するまで数分待ちました。合計時間は同じで、おそらくそれ以上ですが、バッチが小さいほどタイムアウトになることはありません。

それが次の人を助けることを願っています。

于 2015-06-26T12:49:24.470 に答える