フリーランス|WEB 制作経験丸7年、制作会社様からのご依頼に丁寧・高クオリティでお手伝いいたします。 IRODORI DESIGN

B L O G

【Contact Form 7】パスワードを*に変換してメールに記載する方法

Contact Form 7
WordPress
アクションフック
パスワード
変換

こんにちは、岐阜・名古屋を拠点に全国各地からご依頼いただくWEBサイトを制作しているフリーランスエンジニアの寺井です。

WordPressで簡単にお問い合わせフォームが作成できる人気のプラグイン「Contact Form 7」。
このプラグインで送信されるメール本文は管理画面から設定することが出来ます。

しかし、管理画面から設定するメール本文は入力されたデータをそのまま表示することしか出来ません。
通常のお問い合わせフォームであればそれで問題無いかもしれないですが、例えばそれが会員情報を入力するフォームとして利用していた場合、
パスワードやクレジットカード番号もそのままの値でしかメール本文に記載することが出来ません。

そのままメール本文に記載してしまうと、もしそのメールがハッキングされた場合などパスワードやクレジットカード番号が第三者に知られしまいます。

そこで今回の記事では「Contact Form 7」で送信するメール本文を加工する方法をご紹介したいと思います。

アクションフック(wpcf7_before_send_mail)を利用する

解説

「Contact Form 7」で入力された内容を加工するにはアクションフックのwpcf7_before_send_mailを利用します。

このフックは”メール送信直前”に任意の処理を追加することが出来るアクションフックです。
今回はこのフックを利用して、送信内容を加工します。

まずは以下のコードがベースとなります。

<?php
add_action('wpcf7_before_send_mail','my_wpcf7_before_send_mail');
function my_wpcf7_before_send_mail($cf7) {
    $wpcf7 = WPCF7_ContactForm::get_current();
    $submission = WPCF7_Submission::get_instance();
    if ($submission)
    {
        $data = $submission->get_posted_data();
        $mail = $wpcf7->prop('mail'); // ★ メール(2)を加工する場合はprop('mail2')とする

        // ここにメール本文を作成
        $mail['body'] = <<<EOM
            お名前: {$data['your-name']}
            メールアドレス: {$data['your-email']}
            電話番号: {$data['your-tel']}
            希望パスワード: {$data['your-password']}
            お問い合わせ内容: {$data['your-comment']}
        EOM;

        $wpcf7->set_properties(array(
            "mail" => $mail // ★ メール(2)を加工する場合は"mail2" => $mailとする
        ));
        return $wpcf7;
    }
}
?>

上のコードはメール(1)の内容を設定しています。メール(2)の内容を設定する場合は

$mail = $wpcf7->prop('mail');の部分を、$mail = $wpcf7->prop('mail2');
"mail" => $mailの部分を、"mail2" => $mail

このように書き換えます。この2個所を書き換えることで、メール(2)の内容を設定出来ます。

さて、上のコードのままでは入力された内容そのままに送信されてしまいます。

そこで以下の関数を作成し、functions.phpに貼り付けます。

/* 全部「*」に変換 */
function my_str_password($password) {
    return str_repeat('*', strlen($password));
}

この関数は入力した文字全てを「*」に変換します。

そして以下のようにパスワードを取得する際、この関数を通してあげるようにします。

$password = my_str_password($data['your-password']);

これで取得したパスワードは関数により全て「*」に変換され、返り値として戻ってきます。

最後に

希望パスワード: {$data['your-password']}

の部分を以下のように書き換えます。

希望パスワード: {$password}

これでパスワードはメールに記載される際、全て「*」に置き換わります。 パスワードが10文字なら「*」が10個、20文字なら「*」が20個に置き換わります。

完成コード

以下が完成コードです。

<?php
add_action('wpcf7_before_send_mail','my_wpcf7_before_send_mail');
function my_wpcf7_before_send_mail($cf7) {
    $wpcf7 = WPCF7_ContactForm::get_current();
    $submission = WPCF7_Submission::get_instance();
    if ($submission)
    {
        $data = $submission->get_posted_data();
        $mail = $wpcf7->prop('mail');

        $password = my_str_password($data['your-password']);
        
        $mail['body'] = <<<EOM
        お名前: {$data['your-name']}
        メールアドレス: {$data['your-email']}
        電話番号: {$data['your-tel']}
        希望パスワード: {$password}
        お問い合わせ内容: {$data['your-comment']}
        EOM;

        $wpcf7->set_properties(array(
            "mail" => $mail
        ));
        return $wpcf7;
    }
}

/* 全部「*」に変換 */
function my_str_password($password) {
    return str_repeat('*', strlen($password));
}
?>

その他のパターン

上の例では全部を「*」に変換するコードをご紹介しましたが、その他のパターンもご紹介したいと思います。

最初の2文字以外は「*」に変換

最初の2文字以外を「*」に変換する関数は以下の通りです。

/* 最初の2文字以外は「*」に変換 */
function my_str_password($password) {
    return substr($password, 0, 2) . str_repeat('*', strlen($password) - 2);
}

「123456789」の場合、「12*******」となります。

最後の2文字以外は「*」に変換

最後の2文字以外を「*」に変換する関数は以下の通りです。

/* 最後の2文字以外は「*」に変換 */
function my_str_password($password) {
    return str_repeat('*', max(strlen($password) - 2, 0)) . substr($password, -2);
}

「123456789」の場合、「*******89」となります。

最初と最後の2文字以外は「*」に変換

最初と最後の2文字以外を「*」に変換する関数は以下の通りです。

/* 最初と最後の2文字以外は「*」に変換 */
function my_str_password($password) {
    $length = strlen($password);
    return substr($password, 0, 2) . str_repeat('*', max($length - 4, 0)) . substr($password, -2);
} 

「123456789」の場合、「12*****89」となります。

まとめ

いかがでしたか?
アクションフックを利用することで簡単に入力内容を加工することが出来ます。
直接メール本文に記載するのが危険なものはこのように加工したり、記載しないという選択肢も検討しましょう。