• カミナリツイッターカミナリtwitter
  • カミナリフェイスブックカミナリfacebook
  • カミナリインスタグラムカミナリinstagram

山陰の情報を発信するカミナリ

ナビ

25

JULY

ウェブTUESDAY 2017 / 7 / 25

WordPressプラグイン Contact Form 7 で送信するメールに Return-Pathを設定する方法

追記:この処理は現時点ではエックスサーバー限定での挙動かもしれません(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のソースコードを読み解いて対応できます。
国家資格の基本情報処理技術者を保持。

この人が書いた他の記事を読む