こんばんは。今回、クライアントさんから、管理者宛メールのフッターに送信者情報を付けてほしいとの要望が。WordPressサイトで、メールフォームはMW WP Formを使用していました。
MW WP Formは、フィルターフックも豊富に用意されているので、結構簡単にできました♪(文字コードやタイムゾーン、データの形式をクリアすればw)
結果を先に書いてしまうと、以下の関数をfunctions.phpに追加するだけです。
//お問い合わせフォームで送信元情報を取得する function my_admin_mail( $Mail, $data ) { $Browser = $_SERVER["HTTP_USER_AGENT"]; $Ip = $_SERVER["REMOTE_ADDR"]; $Host = gethostbyaddr($Ip); $org_timezone = date_default_timezone_get(); date_default_timezone_set('Asia/Tokyo'); //タイムゾーンを日本に $Datetime = date("Y年n月j日 H:i:s"); date_default_timezone_set($org_timezone); //タイムゾーン戻す $Mail->body = "※このメールは自動送信メールです。 ホームページへ以下の内容でお問い合わせがありました。¥n 【お名前】¥n" .$data['お名前']. "¥n【ご住所】¥n〒" .$data['郵便番号']['data']. "¥n" .$data['都道府県']. "" .$data['ご住所']. "¥n【お電話番号】¥n" .$data['お電話番号']['data']. "¥n【メールアドレス】¥n" .$data['メールアドレス']. "¥n¥n--------------------¥n【送信者情報】¥n・ブラウザー:" .$Browser. "¥n・送信元IPアドレス:" .$Ip. "¥n・送信元ホスト名:" .$Host. "¥n・送信日時:" .$Datetime; // 本文を変更 return $Mail; } add_filter( 'mwform_admin_mail_mw-wp-form-xxx', 'my_admin_mail', 10, 2 );
※本文の内容は例です。
わたしは管理画面の方のメール本文と送信者情報をくっつけるやり方がわからなかったので、functions.phpにメール本文を設定しました。(もしかしたらそういう変数がありましたかね…)
一番最後の行の、「mw-wp-form-xxx」のxxxは、そのメールフォームの、フォーム識別子のkeyにしてください。
この場合のメール本文は、こんな感じになります!
※このメールは自動送信メールです。 ホームページへ以下の内容でお問い合わせがありました。 【お名前】 山田花子 【ご住所】 〒000-0000 東京都世田谷区00-00 【お電話番号】 000-000-0000 【メールアドレス】 hoge@hoge.hoge -------------------- 【送信者情報】 ・ブラウザー:Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729) ・送信元IPアドレス:00.000.000.000 ・送信元ホスト名:00.000.000.000 ・送信日時:2014年6月13日 22:27:00
わたしがつまづいたのは、まずデータ形式。
フォームの内容を、「.$data[‘お名前’]」と取得していますが電話番号や郵便番号だったりすると、-もあるので、配列でデータを持っています。そうなると、そのまま取り出せないわけですね。なので、「$data[‘郵便番号’][‘data’]」と書いてあげてください~。
もう一つ、これはプラグインと関係ないですが、タイムゾーン。。送信日時を取得して、メールフッターに追加したのはよかったのですが、9時間ずれている…p^^;
どうやらWordPressの問題らしく、サーバーによってはこういう症状になるみたい。
なので、タイムゾーンを操る記述を書いてみました。とりあえずうまくいったのでOK!
参考にしたサイト:
http://plugins.2inc.org/mw-wp-form/manual/filter-hook/mwform_admin_mail/
http://sasuke.main.jp/phpiprefererget.html
ありがとうございました!
ここ、こうしたらもっとよくなるよ~とか、こういう場合はどうしたら良いの~とか、ご意見やご質問など受け付けま~す。
参考になりました。
メール本文等は変更せず、送信者情報だけを付加したかったので
以下のようにしてみましたがいかがでしょうか。
(全体は、本家のサイトから引用。このページを参考にリファラーを追加してます。)
function my_mail( $Mail, $data ) {
$Browser = $_SERVER[‘HTTP_USER_AGENT’];
$Ip = $_SERVER[‘REMOTE_ADDR’];
$Referer = $_SERVER[“HTTP_REFERER”];
$Host = gethostbyaddr($Ip);
$org_timezone = date_default_timezone_get();
date_default_timezone_set(‘Asia/Tokyo’); //タイムゾーンを日本に
$Datetime = date(‘Y年n月j日 H:i:s’);
date_default_timezone_set($org_timezone); //タイムゾーン戻す
$add = “nn”.
“———————————————————————n”.
“[送信者情報]n”.
“ブラウザー:”.$Browser.”n”.
“リファラー:”.$Referer.”n”.
“送信元IPアドレス:”.$Ip.”n”.
“送信元ホスト名:”.$Host.”n”.
“送信日時:”.$Datetime.”n”;
$Mail->body .= $add; // 本文を変更
// $Mail->send(); で送信もできます。
return $Mail;
}
add_filter( ‘mwform_admin_mail_mw-wp-form-xxx’, ‘my_mail’, 10, 2 );
情報ありがとうございます!
久しぶりに自分の記事を見たら、「”」が「"」になっていて、げんなりしました(笑)
見にくいコードですみません><;
大変参考になりました、ありがとうございます。
送信者情報を転送する事はできたのですが、レイアウトについて質問させて頂きます。
NARUGAROさんと通りすがりさんのコードを参照させて頂きました。
PHPコード内で使われている「【送信者情報】n・ブラウザー:」の「n」の文字が
メール上でも表示され、項目ごとに改行されません。
削除する方法又は他に設定が必要でしょうか。
フォームはプラグインMW WP FORMを使用して、フォーム転送しています。
解決の方法をご存知でしたら、ご教授お願い致します。
コメントありがとうございます。
「n」をすべて「¥n」に変えてみてください。
「¥n」にしていたのですが、ソースから消えてしまっていたようです。
よろしくお願いします。