2008-09-11 17 views
0

Webアプリケーションのユーザーを作成するときに、 のパスワードが自動的に生成されたSMTP電子メール(ASP.NETのSmtpClientを使用)がユーザーに送信されます。しかし、時々私が気づくのは、それがタイムアウトし、新しいユーザーが単にパスワードを使って電子メールを受け取らないということです。SMTPメールタイムアウトの問題

申し訳ありませんが、メールが通過しなかったが、ユーザーが作成されたことを示すメッセージが表示されます。

そのため、SYS管理者は、これまで2つのオプションがあります:

a)は、ユーザーのパスワードをリセットし、別のSMTPメールが自動生成されたパスワードを使用して送信されます願っています。 b)ユーザーを削除して再作成します。

smtpが送信されない場合、私はユーザー作成をロールバックすることができますが、この問題に対処するベストプラクティスは何ですか?

私は、それぞれ5秒のタイムアウト期間で3回電子メールを送信し直すべきだと思っています。だから15秒が最悪のシナリオでしょう。

これは方法ですか?

答えて

1

あなたのプラットフォームに応じて、あなたのメールをローカルのMTAに渡すだけであれば、再試行などを処理する必要があります。あなたのプログラムは、メールを待ち行列に入れて移動するだけで、タイムアウトやグレインリストなどの処理について心配する必要はありません。

メッセージを引き渡すことができない場合は、いつでも再送信することができます(パスワードリセット機能経由)。それでも失敗した場合は、電子メールアドレスに間違いがあった可能性が高いので、アカウントを削除してユーザーに再登録させることをお勧めします。

これは、当然のことながら、未確認のユーザーで何ができるかによって、いくつかのシステムではできないことがあります - 本当にあなたが自分の電子メールが検証される前に、人々が行うことができどのように依存していること。

0

IMHOあなたは、再試行せずにメールを確認するようにユーザーに通知する必要があります。ユーザーが電子メールを確認し、ページを残していない場合、ユーザはとにかくそれにアクセスすることはできませんので、

、あなたはより良いアカウントをロールバックします。

無効な電子メールアカウントによってタイムアウトが発生するケースがほとんどです。ユーザーは間違いを犯したり、あなたにスパム送信を避けるために存在しない電子メールアドレスを与えました。

可能であれば、ユーザーの電子メールを要求しないでください。プログラミングの第1のルールは、次のようなものです。ユーザーを苛立たせないでください。

1

ウェブアプリケーションがユーザーのメールサーバーに直接SMTPを話すように聞こえます。 [あなたのウェブアプリケーションは、ユーザのMTA(メール転送エージェント)と通信しているMUA(Mail User Agent)です] ユーザのMTAに到達可能であるか、現時点で動作している必要はありません。

本当に後方に曲げたい場合は、やっていることをやり遂げることができます(しかし、1回だけ試みます)。メッセージをキューに入れ、遅いスケジュールで少なくとも24時間再試行を続け、その未完了状態をユーザーに公開します。

アプリが動作するようになっている方法についての公式な答えがRFC1123 (Requirements for Internet Hosts - Application and Support)で見つけることができます:

5.3.1.1送信側SMTPの一般的なモデルが 1つまたは複数のプロセスである戦略

を送信 は定期的に発信メールを に送信しようとします。 をすぐに送信できないメールが がキューに入れられ、定期的に 送信者によって再試行する必要がありますが、一般的なシステムでは、メッセージ を構成 プログラムは、 送信メールの新しい部分のため 即時の注意を要求するためのいくつかの方法があります。メールキューのエントリには、 というメッセージ自体だけでなく、エンベロープ情報も含まれます。

送信者は、 の試行が失敗した後で 特定の宛先を再試行するのを遅らせなければならない(MUST)。一般的に、 再試行間隔は少なくとも分でなければなりません。しかし、より洗練された と可変戦略は 送信者SMTPが 配信の理由を決定できる場合に有益です。

メッセージが で送信されるか、送信者が断念するまで再試行します。 は、一般的に、少なくとも4〜5日で である必要があります。再試行アルゴリズム へのパラメータは である必要があります。

0

ASP.NETとSystem.Net.Mailクラスを使用している場合は、おそらくWebサーバーマシンのIISインスタンス経由でメールを送信している可能性があります(指定していないのでわからない) 。メール転送エージェント(IIS SMTP)で何が起こっているのかを知る良い方法はありません。独自の再試行ロジックがあり、デフォルトではメッセージが配信されるまでに長時間かかる場合があります。

メールが届いていないことをどのように検出していますか? 「タイムアウト」とは何ですか?

メールの送信を処理するバックグラウンドプロセスが必要です。 MTAへの配信が成功した場合は、すべてが正常であると想定する必要があります。スパムのためにブラックリストに登録されていない限り、ほとんどのMTAは通過するまで再試行を続けます。実際にメッセージをMTAで取り除く際にエラーが発生した場合は、間違いなく再試行するか、失敗の原因を突き止めてバグを修正してください。正直なところ、この部分は決して失敗しないはずです。

NDRメッセージの返信先を監視して、電子メールが配信されなかったことがわかっているときに何らかの処理を行うことができます。しかし、ユーザーがまだシステムにログインできない場合は、何が起こったかを知らせる良い方法はありません。たぶんあなたは電子メールに関連付けられた値を持つクッキーを設定し、メールを配信できなかった場合はログイン/登録ページに何かを置くことができます。

関連する問題