MW WP Form にて、返信用に Reply-to ヘッダーを設定する
WordPress の MW WP Form プラグインにて、Reply-to アドレス追加カスタマイズを実施し、フォームからの問い合わせメールが迷惑メール扱いとなることを防ぎました。そのカスタマイズ内容を共有いたします。
MW WP Form は、Contact Form7 と並ぶ、お問い合わせフォームで良く使われるプラグインですね。Contact Form7 に比べ、確認画面を出したりカスタマイズ性に優れていますので重宝しています。
しかし MW WP Formでは、Contact Form7 で設定可能な返信用の Reply-to アドレスを設定することができません。
そもそも Reply-to ヘッダーがなぜ必要なのか?
届いたメールに返信する際、通常は From (送信元) と同じメールアドレス宛てに返信されます。MW WP Form の設定にて、管理者宛てに届くメールの From 欄をお問い合わせフォームに記入されたメールアドレスに設定することはできます。管理者がお問い合わせした方に返信する際は、届いたメールにそのまま返信すれば良いわけですね。
しかし、この運用は問題がないとは言い切れません。フォームに記載されたメールアドレスを From にして Webサーバーから送信してしまうと、受信側のセキュリティによってはなりすましメール、つまりスパムメール(迷惑メール)と判断されてしまい送れないということがあります。
そこで必要になるのが Reply-to (返信用) アドレスの設定です。From は通常の Webサーバーからのアドレスに設定し、Reply-to にフォームの記載されたアドレスを設定することで、この問題をクリアしながら管理者がお問い合わせに対して返信することができます。
なお、MW WP Form デフォルトで設定項目のある Return-Path は、メールが正常に送信できなかった際に返信するアドレスとなります。Reply-to とは違いますのでご注意ください。
カスタマイズ前の注意点
このカスタマイズを実施する上でご注意いただきたいのは、function.php のフィルターフック等は全く利用せず、MW WP Form プラグインの構成ファイルを直接触っているという点です。プラグインのアップデート等を実施された際、このカスタマイズ内容は動かなくなる可能性があります。その点ご注意願います。また、今回カスタマイズをおこなった MW WP Form のバージョンは 3.2.1 となります。
なお、本記事の中でご説明している MW WP Form は、フォームタグは、以下のように設定しているものとします。
なまえ:[mwform_text name="name" id="name" class="name" size="60"]
メール:[mwform_email name="mail" id="mail" class="mail" size="60"]
MW WP Form をカスタマイズして Reply-to を設定できるようにする
それでは、実際に MW WP Form をカスタマイズしていきます。
① 管理画面にて、Reply-to のアドレス設定項目を追加
/wp-content/plugins/mw-wp-form/templates/admin/admin-mail-options.php
この記述を、Return-Path と From の間あたりに挿入します。
実際の前後関係はこうなります。
この時点で、管理者宛てメール設定の項目に、Reply-to の項目が表示されるはずです。
キャプチャ画面はカスタマイズ完了後のものですので値を入力しておりますが、この時点では Reply-To 欄に値を入力しても保存、反映されません。ここまではあくまで、設定項目を追加するまでの作業になります。
② 管理画面の Reply-to 設定項目を保存させる
/wp-content/plugins/mw-wp-form/classes/models/class.setting.php
92行目あたりに、この記述を追加します。
/**
* Reply-to
* @var string
*/
protected $mail_reply_to = '';
前後関係はこうなりますね。
/**
* Return-Path
* @var string
*/
protected $mail_return_path = '';
/**
* Reply-to
* @var string
*/
protected $mail_reply_to = '';
/**
* 管理者メールの送信元
* @var string
*/
protected $admin_mail_from = '';
/wp-content/plugins/mw-wp-form/classes/models/class.admin.php
1行追加
$triminglists = array(
'mail_from',
'mail_return_path',
'mail_reply_to', //ここ追加
'mail_to',
'mail_cc',
'mail_bcc',
'admin_mail_from',
);
これで保存できるようになりました。が、保存はできても呼び出しができません。
③ 管理画面の Reply-to 設定項目の呼び出し
/wp-content/plugins/mw-wp-form/classes/controllers/class.admin.php
1行追加
/**
* 管理者メール設定
*/
public function admin_mail_options() {
$this->assign( 'mail_to' , $this->get_option( 'mail_to' ) );
$this->assign( 'mail_cc' , $this->get_option( 'mail_cc' ) );
$this->assign( 'mail_bcc' , $this->get_option( 'mail_bcc' ) );
$this->assign( 'admin_mail_subject' , $this->get_option( 'admin_mail_subject' ) );
$this->assign( 'admin_mail_sender' , $this->get_option( 'admin_mail_sender' ) );
$this->assign( 'mail_return_path' , $this->get_option( 'mail_return_path' ) );
$this->assign( 'mail_reply_to' , $this->get_option( 'mail_reply_to' ) ); //この行追加
$this->assign( 'admin_mail_from' , $this->get_option( 'admin_mail_from' ) );
$this->assign( 'admin_mail_content' , $this->get_option( 'admin_mail_content' ) );
$this->render( 'admin/admin-mail-options' );
}
この記述をおこなうことで、保存された Reply-to の値を次回管理画面を開いた際に呼び出すことができるようになります。
④ 送信されるメールヘッダーに Reply-to を追加
最後に、送信されるメールヘッダーに Reply-to が挿入されるよう、
/wp-content/plugins/mw-wp-form/classes/models/class.mail.php
の、3箇所を修正します。
33行目あたりに追加
/** * replyto * @var string */ public $replyto;
115行目に追加
if ( $this->replyto ) {
$headers[] = 'Reply-To: '. $this->sender . ' <' . $this->replyto . '>';
}
254行目に追加
// reply-toを指定
$admin_mail_replyto = '';
if ( $Setting->get( 'mail_reply_to' ) ) {
$admin_mail_replyto = $Setting->get( 'mail_reply_to' );
}
$this->replyto = $admin_mail_replyto;
これで設定は完了です。
実際に送ってみましょう
管理者画面にて、その他の設定を済ませ、実際に送ってみましょう。
Reply-to 欄に {mail} とフォームタグのキー名を入力します。その他の件名や本文等も、検証とはいえ忘れずに設定してくださいね。さもないと、
“There was an error trying to send your message. Please try again later.” というエラーが表示されて送信できません。私はこのエラーの原因はカスタマイズした部分がおかしいのかと思って、すこし時間を無駄にしてしまいました。
その後、管理者宛てに届いたメールを確認いたしますと・・・
送信者 (From) は管理者宛てのメールアドレス、返信時のメールアドレスはフォームに記載されたメールアドレスになっています。メールヘッダも確認したところ問題なさそうです。また、実際のメールアドレスをフォームに入力して検証した際は、お問い合わせした方からの返信時は問題なく管理者宛てのメールアドレスが設定されています。
時代にあった対策を
ひと昔前までは、From 欄に直接ユーザーのメールアドレスを記載していても、問題なく送信できていたように思います。ここ数年で各メールサーバーのセキュリティが厳しくなってきており、今までの対応でもスパムメールと判断されることがでてきたように感じます。これも時代の流れでしょうかね。時代にあったセキュリティ対策を、常に対応していきたいものです。