お問い合わせ
image

Contact Form 7 がメール送信に失敗したときに、PostSMTP で通知を受け取る方法

制作・開発
profile

Iftekhar Eather

本記事は、英語で公開されている下記記事の日本語翻訳版です。
How to Send Notifications via PostSMTP When Contact Form 7 Fails to Send an Email

Contact Form 7(CF7)は、WordPress で最もよく使われているお問い合わせフォーム用プラグインのひとつです。ただ、メールサーバーの問題や設定の不備などが原因で、CF7 がメールを送信できないことがあります。こうした失敗が起きた際、すぐに気づける仕組みがあると安心です。

しかし、CF7 には「メール送信失敗を知らせる」仕組みがデフォルトではありません。
ただし、メール送信を PostSMTPで行っている場合には、CF7 の失敗イベントにフックして、PostSMTP を使って通知メールを送ることができます。本記事では、その設定方法を紹介します。

なぜ通知に PostSMTP を使うのか?

WordPress には標準で wp_mail() が用意されていますが、PostSMTP の方がメール配信の信頼性が高く、ログやエラーも確認しやすいというメリットがあります。Gmail や SendGrid、任意の SMTP サーバーなど、多くの外部サービスと連携できるため、通知メールの送信手段としても適しています。

PostSMTP を使って通知メールを送る手順

ここでは、Contact Form 7 がメール送信に失敗したときのみ通知を送る処理を実装する流れを説明します。

Step 1:Contact Form 7 のメール送信失敗にフックする

WordPress には wpcf7_mail_failedというアクションフックがあります。これは、CF7 のメール送信が失敗したときに必ず実行されるフックです。このフックを利用して、カスタム関数を呼び出します。

Step 2:PostSMTP のメール送信機能を使う

通知メールの送信には、WordPress 標準の wp_mail() ではなく、PostSMTP が提供する PostmanWpMailクラス を使います。これにより、PostSMTP経由の他のメールと同様に、信頼性の高い方法で送信されます。

Step 3:カスタム関数を実装する

以下が通知メールを送るためのサンプルコードです:

add_action('wpcf7_mail_failed', 'send_email_using_post_smtp_on_cf7_failure', 10, 1);

function send_email_using_post_smtp_on_cf7_failure($contact_form) {
    // Set the recipient address
    $recipient_email = 'admin@email.com'; // Replace with email address
    $subject = 'Contact Form 7 Failed to Send Email from ' . get_bloginfo('name');
    $message = 'A Contact Form 7 submission failed to send an email. Please check the system for issues.';

    // Prepare the email data
    $email_data = array(
        'to'      => $recipient_email,
        'subject' => $subject,
        'body'    => $message,
        'headers' => array('Content-Type: text/html; charset=UTF-8'),
    );

    // Use PostSMTP's email sending mechanism
    $mailer = new PostmanWpMail();
    $mailer->send($email_data['to'], $email_data['subject'], $email_data['body'], $email_data['headers']);
}

コードの説明

  • CF7 の失敗イベントにフックadd_action()wpcf7_mail_failed に処理を追加しています。
  • 通知先メールアドレスを設定$recipient_email に、通知を受け取りたい自分のメールアドレスを設定します。
  • 件名と本文の定義$subject$message に通知メールの内容を記述します。件名には get_bloginfo('name') を使ってサイト名を追加しています。
  • PostSMTP の送信クラスを使用:WordPress 標準の wp_mail() 関数を使用する代わりに、PostSMTP が提供する PostmanWpMail クラス を利用します。 $mailer->send()メソッドを使用することで、PostSMTP で設定されたメール送信サービス経由でメールが送信されます。

Step 4:PostSMTP がインストールされていることを確認

この方法を使うには、PostSMTP プラグインが必須です。SMTP サーバーや Gmail・SendGrid などの外部サービスと正しく連携されている必要があります。

この方法のメリット

・メール送信の信頼性が高い:PostSMTP の SMTP 経由で通知が送られるため、メール送信の確実性を高められる。
・エラーログを確認できる:PostSMTP は詳細なログを残してくれるため、トラブルシューティングがしやすい。
すぐに失敗を把握できる:メール送信失敗を放置せず、すぐに対応できます。


わずかなコードを追加するだけで、Contact Form 7 のメール送信が失敗した際に通知を受け取れるようになり、サイトのメール送信の信頼性を高めることができます。
PostSMTP を活用することで、WordPress 標準の wp_mail() を使用せず、より堅牢なメール送信手段に切り替えることが可能です。

なお、本番環境へ反映する前に、必ず開発環境で動作確認を行うようにしてください。

日本語翻訳:K. Shimazaki

関連投稿

blog-thumb

Laravel で既存のテーブル構造をコピーする方法

本記事は、英語で公開されている弊社ブログ記事の日本語翻訳版です。
英語元記事:How to Copy an Existing Table Structure in Laravel 

blog-thumb

How to Whitelist Specific Domains for Google Groups (The “Guarded Entry” Method)

Managing distribution lists in Google Workspace is usually straightforward: you either make a group Private (internal only) or Public (anyone on the i...

blog-thumb

AWS Lightsail(Ubuntu)で PHP 8.0 FPM を PHP 8.2 FPM にアップグレードする方法

本記事は、英語で公開されている弊社ブログ記事の日本語翻訳版です。
英語元記事:How to Upgrade PHP 8.0 to PHP 8.2 FPM on an AWS Lightsail Ubuntu Instance for Laravel