MW WP Formの管理者宛メールに送信者情報を付加しました

wordpress-logo-hoz-rgb

こんばんは。今回、クライアントさんから、管理者宛メールのフッターに送信者情報を付けてほしいとの要望が。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['メールアドレス'].
"nn--------------------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

ありがとうございました!

ここ、こうしたらもっとよくなるよ~とか、こういう場合はどうしたら良いの~とか、ご意見やご質問など受け付けま~す。

2 注釈 “MW WP Formの管理者宛メールに送信者情報を付加しました

  1. 参考になりました。

    メール本文等は変更せず、送信者情報だけを付加したかったので
    以下のようにしてみましたがいかがでしょうか。
    (全体は、本家のサイトから引用。このページを参考にリファラーを追加してます。)

    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 );

    1. 情報ありがとうございます!
      久しぶりに自分の記事を見たら、「”」が「"」になっていて、げんなりしました(笑)
      見にくいコードですみません><;

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です