25
JULY
ウェブTUESDAY 2017 / 7 / 25
WordPressプラグイン Contact Form 7 で送信するメールに Return-Pathを設定する方法
Text by Hiroyuki Matsumoto
追記:この処理は現時点ではエックスサーバー限定での挙動かもしれません(Return-Path ヘッダを強制的に付与するサーバー)。カラフルボックスではReturn-Pathが設定できませんでしたが From: のアドレスにエラーメールがきちんと返ってきます。
メールヘッダの Return-Path というのがありまして、これは
「メールを送信し、宛先不明などで不達の際にエラーメールが届くメールアドレスを指定する」
という情報です。これを設定しないとエックスサーバーの場合
【契約名】@svXXXX.xserver.jp
(弊社の場合例えば kaminarisama@sv2324.xserver.jp )
というメールアドレスに戻ってきてしまうのですが、このメールアドレスに対して受信することはできないんですよね。。。(追記:FTPでアクセスできる Maildir に保存されるようになっていました)
さて Contact Form 7 を使っている場合、通常であれば下記のように記述すれば任意のメールヘッダを付与することができます。
ところがこの設定、実際のメールには反映されません。
(強制的に【サーバー名】@svXXXX.xserver.jp に書き換えられてしまいます)
Return-Pathを設定したい場合は、functions.php に下記を記述しておきましょう。
add_action('phpmailer_init', function($phpmailer){ $phpmailer->SMTPKeepAlive = true; $phpmailer->Sender = 'test@kaminarimagazine.com'; });
何をしているか簡単に解説しますと、実は Return-Path を設定するにはメール送信サービス(sendmail等のMTA)に特殊なオプションを付けて呼び出す必要があるのですが、Contact Form 7はそこには直接関与していません。WordPressの内部関数 wp_mail関数 を呼び出しているだけです。
wp_mail関数はメール送信ライブラリの PHPMailer を使用しており、PHPMailer のオプションを変更しないと Return-Path は設定できないのです。
ということで、PHPMailer を直接操作できるアクションフック phpmailer_init を利用しています。第一引数には参照渡しで PHPMailer インスタンスが渡されますので、そこで必要な設定をしているわけです。
なお、サンプルコードはクロージャを使用しているためPHPのバージョンが 5.3以降でないと使用できませんのでご承知くださいませ。
TEXT by
松本 博之(まつもとひろゆき)
1978年、鳥取県米子市生まれ。
株式会社マジックワード WEBシステムの開発・運用を担当。
WordPressの実績多数。表面的な使用方法を把握するだけでなく、WordPressのソースコードを読み解いて対応できます。
国家資格の応用情報処理技術者をなんとなくとりました。