10

サーバー上で mail() への呼び出しを含む簡単な PHP スクリプトを作成し、テストを開始しました。HTML ページは常に即座に読み込まれるため、mail() の呼び出しを含む PHP の実行が終了したことを意味すると思います。ただし、mail() から送信された電子メールは、呼び出し後 10 ~ 20 分ごとにしか受信されません。遅れた理由は?mail() は外部プログラムをトリガーしますか? (関連する場合、メールはGmailメールアカウントに送信されています)

4

3 に答える 3

21

mail()表示されている動作は、PHP の機能とは何の関係もありません 。代わりに、配信に時間がかかっているのは、PHP がメッセージを渡す SMTP メール サーバーです。このサービスは、メール転送エージェント (MTA)として知られています。

すぐに配信されない理由はたくさんあります。おそらく、表示される遅延は受信サーバーでのグレーリスト化によるものですつまり、送信サーバー (PHP スクリプトがメッセージを渡したサーバー) がメッセージの再送信を数回試行するまで、受信メール サーバーはメッセージの受け入れを拒否します。行儀の良い MTA は失敗した送信試行を再試行しますが、スパム サーバーはそうしないことが多いため、これはスパムを削減するための単純ですが効果的な方法になります。

それは、SMTP サーバー上で送信を待機しているメッセージの長いキューと同じくらい単純な場合もあります。(実際にはグレーリストの可能性が高くなりますが)

ただし、覚えておくべき最も重要なことは、電子メールは即時であることを意図していないため、即時であるとは決して保証されないということです。過去 10 年ほどで、私たちは概して、電子メールが非常に迅速に配信されることに慣れてきましたが、迅速な配信を約束することはできません。

于 2013-08-20T00:51:07.427 に答える
10

@Michael Berkowski が言ったように、それは mail() 関数自体ではありません。mail() は、SMTP クーリエ ソフトウェアで構築されたシステムを呼び出すことによって機能します。次に、必要な DNS ルックアップを実行して適切なメール サーバーを見つけることにより、受信システムとの会話を自動的にネゴシエートします。次に、そのサーバーはメッセージを取得し、グレー リストとリバース DNS ルックアップを通じてシステムをチェックし、それをスキャンして独自のスパム/ウイルス保護に対して実行し、最終的に配信します。また、多くのメール サーバーは、不明な送信サーバーを遅らせて、メールの DOS 攻撃やフィッシャーを防ぎます。

于 2013-08-20T00:51:53.220 に答える