TransmitMail で Reply-To ヘッダを設定する
カテゴリー: HTML/CSS/JS
この記事は2020年6月14日に書かれたものです。情報が古い可能性がありますのでご注意ください。
主に静的サイトにメールフォームを設置する際、TransmitMail をよく利用させていただいています。TransmitMail は Copyright 表示不要の PHP 製汎用メールフォームシステムで、ファイルの添付や CSV 出力など、柔軟で豊富な機能が特徴です。
一方 WordPress 案件では、用途に応じてプラグインの WP MW Form や ContactForm 7 を利用していますが、場合によってはこの TransmitMail をテーマに組み込んで利用することもあります。
ただ、TransmitMail はメールヘッダに Reply-To(返信先アドレス)を設定することができません。ググってもその方法が見つかりませんでしたので、私なりにカスタマイズしてみました。
Reply-To ヘッダを設定する理由
通常メールに返信する場合、 From(送信元アドレス)のメールアドレス宛てに返信されます。そのためメールフォームでは、管理者宛てに送信されるメールの From に、フォームに入力されたメールアドレスを設定することが多いと思います。
しかし、フォームに入力されるメールアドレスは様々なので、From のドメインとフォームの送信サーバのドメインが異なることになるため、受信側のメールサーバのセキュリティによって「なりすまし」と判断され、迷惑メールに振り分けられたり、受信できなかったりする場合があります。特に Gmail はほぼ間違いなくスパム扱いされます。
そこで、From にはメールサーバのドメインを設定し、Reply-To にフォームに入力されたメールアドレスを設定することで、なりすましと判断されることなく、フォームに入力されたアドレスに対して返信することが可能となります。
ちなみに、メーリングリストはその性質上、From は普通に送信者のアドレスですが、Reply-To にメーリングリストのアドレスが設定されています。
TransmitMail (v2) で Reply-To ヘッダを設定する方法
TransmitMail では、メール送信ライブラリの Qdmail が使われています。(Qdmail は開発が終了していて PHP7 では動かないらしい?ですが、TransmitMail は正常に動いています。)
qdmail.php を確認すると Reply-To の設定があったので、TransmitMail の機能として、lib/TransmitMail.php(TransmitMail プログラム本体)に Reply-To の設定項目を追加します。
当初、設定ファイルの記述方法(v2)にある「自動返信メールの宛先」の設定のように、Reply-To にフォームのメールアドレスの name 属性の値を指定するようにしてみましたが、エラーが出て送信できませんでしたので、Reply-To を有効に設定した場合に自動返信メールの宛先が設定されるようにしました。
自動返信メールを送信しない設定でも、初期値として 'auto_reply_email_input_name'
(自動返信メールの宛先)の値にフォームのメールアドレスの name 属性の値(デフォルトは 'メールアドレス'
)が設定されているので大丈夫です。
71行目あたり「// 設定の初期値」の「// 基本的な設定」の中にReply-To の初期値(下記コードの9行目)を追加します。
// 設定の初期値
private $default_config = array(
// 基本的な設定
'return_path' => '',
'email' => '',
'cc_email' => '',
'bcc_email' => '',
'from_email' => '',
'replyto' => false, // Reply-To の初期値
'subject' => '',
'auto_reply' => true,
'auto_reply_email_input_name' => 'メールアドレス',
'auto_reply_cc_email' => '',
'auto_reply_bcc_email' => '',
'auto_reply_from_email' => '',
'auto_reply_subject' => '',
'auto_reply_name' => '',
1102行目あたりからのメール送信内容の設定項目の1155行目あたりにある管理者宛メールの設定(管理者宛メールとは書かれていませんが、下記の } else {
から }
の間)の中に、Reply-To が有効な場合に 'auto_reply_email_input_name'
の値(自動返信メールの宛先)を設定する記述(下記コードの8〜11行目)を追加します。
if ($is_auto_reply) {
// 自動返信メールの場合
:
:
} else {
:
:
// Reply-To メールアドレスの設定がある場合
if ($this->config['replyto'] == true) {
$this->mail->replyto($this->post[$this->config['auto_reply_email_input_name']]);
}
}
次に、設定ファイルで 'from_email'
:From(送信元アドレス)をメールサーバのドメインのメールアドレスに設定し、 'replyto'
:Reply-To(返信先アドレス)を有効に設定します。
TransmitMail (v2) では YAML 、PHP、JSON のいずれかの形式の設定ファイルを選べますが、以下はデフォルトの YAML 形式の設定ファイル(config.yml)を使用した場合の記述方法です。('from_email'
の値は例です)
from_email: noreply@will3in.co.jp
replyto: true
これで、From(送信元アドレス)は任意のメールアドレスが、Reply-To(返信先アドレス)にはフォームに入力されたメールアドレスが設定されます。