2016-09-02 15 views
0

私のプロジェクトでは、ユーザが新しいレコードをデータベースに保存したときに、afterSave()メソッドを実行するために彼に電子メールを送りました。メールがyii2で送信されたことを確認するにはどうすればよいですか?

電子メールが送信されたことを確認するにはどうすればよいですか?または正常に送信されましたか? 送信された電子メールの内容を含むyiiの中にフォルダがありますか?

答えて

2

これはyii2またはafterSave()イベントとは関係ありません(afterSaveイベントが発生している限り、たとえばRuntime Loggingで確認できます)。 PHPMailerクラスを使用すると、メールが送信されたことを確認することについてのthisの議論を見ることができます。

$ mail-> send()が常にtrueを返すとは限りません。送信プロセスの一部がそれに関係していればtrueを返します。あなたが未知のアドレスに送信するが、gmail経由で送信すると、gmailのサーバは、その時点でアドレスが存在するかどうかを知ることができないため、後で受け入れられ、バウンスされます。 Gmailを介して送信するときにGmailアドレスに送信していた場合は、すぐに失敗します。

アカウントがまったく存在しない場合、ほとんどのサーバー(gmailを含む)は5.1.1の「不明なユーザー」の応答を返します。受信者の想定どおりにSMTPによって直接送信すると、PHPMailerによって正しく報告されます(ただし、gmailのような仲介サーバーを経由して送信するか、mail()を使用して送信した場合はそうではありません)。 PHPMailerには組み込みのサポートがありませんが、自分で行うにはgetmxrrを呼び出してHostを手動で設定するだけです。そのように送信する場合は、認証を使用する必要もありません。

ドメインが存在するかどうかを確認するなど、さまざまなことができます。ドメインが存在しない場合は、メール配信は機能しません。一部のサーバーはすべてのアドレスを受け入れ、後でバウンスを送信します(たとえば処理キューが長いスパムフィルタがある場合など)。ただし、拒否された場合は、アドレスが存在しないことを確認できます。

バウンス処理についても調べる必要があります。これにより、okだが後では証明されていないアドレスを削除できるようになります。これはPHPMailerとはまったく別物です。私は今あなたに警告します - バウンスの取り扱いは非常に不愉快です!

また、ポート587ではtlsを使用し、465ではsslを使用しないで送信する必要があります。 PHPMailerに付属のGmailの例を参照してください。

また、SMTP認証接続のPHPMailer経由でメールを送信することをお勧めします。

+0

説明したシナリオでトランザクション電子メールサービスを使用することをお勧めします。あなたが興味を持っている情報だけでなく、統計情報やウェブフックも、そのようなユーザー管理をはるかに簡単にします。 –

関連する問題