今回は失敗時に特定のメールアドレスに失敗した旨を通知するコードを作りたいと思っております。
メール送信の失敗の定義は何でしょうか?
前提として、WordPress が検知できる「メール送信の失敗」は、WordPress 側の PHP 処理で wp_mail 関数を呼び出してメールの送信処理をした際にエラーになったという情報です。
これでわかるのは、
- WordPress で指定した SMTP サーバーに接続できなかった
- WordPress で指定した SMTP サーバーがエラーを返した
等が発生したということだけです。
「メールアドレスが間違っていること」や「メールが相手に届かなかった」等を検出できるわけではありません。
以上を前提として考えると、エラーになった場合は SMTP サーバが停止している可能性を考える必要があると思います。
WordPress で指定されている SMTP サーバーが使えないと考えると、WordPress側PHP に送信せずに JavaScript から直接メール送信することが考えられます。
たとえば、JavaScript から SMTP 接続するための SmtpJS を用いて、下記のようなスクリプトで送信する等の方法があります。
<script src="https://smtpjs.com/v3/smtp.js"></script>
<script>
Email.send({
Host : "smtp.example.com",
Username : "SMTP接続のユーザー名",
Password : "SMTP接続のパスワード",
To : 'wordpressadmin@example.com',
From : "wordpress@example.com",
Subject : "(WordPress) email failure",
Body : "WordPress Site: http://example.com"
}).then(
message => alert(message)
);
</script>
なお、上記 SmtpJS サイトにも
Security
Whoa!, wait a minute. I don't want my SMTP credentials visible to the world!
と書かれていますが、このスクリプトの場合 SMTP サーバに接続するユーザー名・パスワードが丸見えなので、SMTP サーバーが迷惑メールの送信などに悪用される可能性が高いです。
一応、回避策等も書かれているので興味があれば上記 SmtpJS のドキュメントを読んでください。
なお、メール送信に失敗したことを考えるより運用フローで対応するほうが簡単だと思います。
たとえば、Contact Form 7 であれば、WordPress データベースに問い合わせ内容を保存する Flamingo があります。
Flamingo と組み合わせて使って問い合わせのメールが来ない場合でも 1日1回はWordPress にログインしてお問い合わせ登録されていないか確認する運用フローにしておくのが良いと思います。