ウェブ

WEB


問い合わせフォームから忍び寄る悪質な営業メール

まえがき(ちょっとだけお付き合いください)

「問い合わせフォームから営業メールが届いて困っている」

それは、知人のなにげない相談から始まった。

知人の運用するサイトにはa-blog cmsが入っている。
確認させてもらったら、たしかにスパム的に営業メールが頻繁に届いていた。
同じ企業から何度も届いているものもあれば、単発で様々な企業から届いているものもある。

詳しく見てみると、自動的に動作するシステムを使用しているか、あるいは手当たり次第に送信しているようだった。
宛名だけ変えた、ほとんどコピペの無機質な文章。
信頼性を欠くだけではないか、と思うのだが、住所や連絡先をきちんと入力していないものもある。
記載されている人物名と社名をググったら、偽名での送信だと判明(会社は実在)したこともあった。


「ひどい。一体どうすれば…」
キーボードを叩く手にジワリと嫌な汗がにじむ。

(対処法を考えてみるか)
そう考えた矢先、思いがけないことが起こった。
自分の運用しているサイトにもスパムらしき営業メールが届いたのである。

事態は想定するより身近で起こっていることを痛感した。
もはや対岸の火事ではない。


「なんとかしたい。いや、なんとかせねば。」

頻度が少なければ無視すればよい。
しかし、少なからず悪意を感じるような営業メールの場合であれば、なんとかしたい。

しいて言うならば、営業メールを送る相手に "攻撃的ではない" クールなスタイルで一矢報いたい

一矢報いられていることすら気づかない方法で対処できれば理想的だ。


私は静かに立ち上がり、そして“アレ”を実装した。

手軽に、そして静かに、相手にも悟られぬ巧妙さで営業メールを拒否するコードである。



・・・・・


【a-blog cms】問い合わせフォームからの営業メールを拒否する実装

というわけで、本題のとおりa-blog cmsで営業メールを拒否する方法のご紹介です。

ほぼコピペだけで手軽に実装できるので、営業メールに困っている方はぜひ試してみてください。

実装するコード(通称『改変コード』)

さっそくですが、以下が実装するコードです。

以下のコードの一部をご利用のシーンに合わせて追記し、使用します。
追記する内容については下で詳しく解説します。

<!-- 改変コードです。以下のコードを使用します。 -->
<!-- CSS などご利用の環境に合わせてご利用ください。 -->

<!-- BEGIN step#confirm -->
<!-- フォームステップ:確認画面 -->
<div class="contact-box">
    <section>
        <h2>お問い合わせフォーム</h2>
        <p class="message">内容に誤りがないか、よくご確認ください。</p>
        @include("/contact/form/confirm.html")
        <div class="form-btn-box clearfix">
            <form action="" method="post" class="form-btn form-btn-return">
                <input type="hidden" name="step" value="reapply" />
                <input type="hidden" name="takeover" value="{takeover}" />
                <input type="submit" name="ACMS_POST_Form_Chain" value="戻る" id="btnToInput" class="btn-large" />
            </form>

            <!-- BEGIN_IF [{email}/re/XXXXX|XXXXX|XXXXX] -->
            <form action="404.html" method="post" class="js-unload_alert form-btn form-btn-send" enctype="multipart/form-data">
                <input type="hidden" name="takeover" value="{takeover}" />
                <input type="hidden" name="id" value="contactForm" />
                <input type="submit" name="ACMS_POST_Form_Submit" value="送信する" id="btnSubmit" class="btn-attention-block-large" />
            </form>

            <!-- ELSE -->
            <form action="thanks.html" method="post" class="form-btn form-btn-send" enctype="multipart/form-data">
                <input type="hidden" name="To[]" value="{email}" />
                <input type="hidden" name="AdminReply-To[]" value="{email}" />
                <input type="hidden" name="AdminFrom[]" value="{email}" />
                <input type="hidden" name="step" value="result" />
                <input type="hidden" name="takeover" value="{takeover}" />
                <input type="hidden" name="id" value="contactForm" />
                <input type="submit" name="ACMS_POST_Form_Submit" value="送信する" id="btnSubmit" class="btn-attention-block-large" />
            </form>
            <!-- END_IF -->

        </div>
    </section>
</div>
<!-- END step#confirm -->

上記のコードは main.html に記述(実装)します。

ファイルの場所
contactフォルダ > formフォルダ > main.html
※特にカスタマイズや問い合わせ関連の仕様を変更していない場合。問い合わせのカテゴリーを変更したりしている場合は、変更に合わせたファイルに手を加えてください。


main.html はフォームのステップ順にコードが記述してあります。

手を加えるのは
<!-- BEGIN step#confirm -->
<!-- フォームステップ:確認画面 -->

<!-- END step#confirm -->
の部分です。


フォームのステップ
フォームのステップについて理解していないと誤動作をする原因になるので、少しだけ触れておきます。

a-blog cmsのフォームは以下のステップで動作します。
(1)フォームに情報を入力〜送信(エラーがなければ3へすすむ)
(2)入力が間違っていたり、入力漏れがあったら再入力を促す〜再入力画面へ(1へもどる)
(3)入力に問題がなければ、入力した内容を確認〜送信(4[thanks.html]へすすむ)
(4)問い合わせ完了(thanks.html)


今回、手を加える箇所は(3)です。

改変する(手を加える)前のコード

上で書いたコード(改変コード)はすでにカスタマイズされているものです。

念のため、手を加える前の main.html の該当部分のコードを以下に記載します。
※ a-blog cmsをインストールしたら、contact > form > main.html の <!-- フォームステップ:確認画面 --> のところには以下のとおりのコードが書いてあるはずです。

カスタマイズがわかりやすいように、手を加える箇所にコメントを挿入してあります。


<!-- 改変前のコードです。インストールされた初期状態のmain.htmlからの抜粋です。 -->

<!-- BEGIN step#confirm -->
<!-- フォームステップ:確認画面 -->
<div class="contact-box">
    <section>
        <h2>お問い合わせフォーム</h2>
        <p class="message">内容に誤りがないか、よくご確認ください。</p>
        @include("/contact/form/confirm.html")
        <div class="form-btn-box clearfix">
            <form action="" method="post" class="form-btn form-btn-return">
                <input type="hidden" name="step" value="reapply" />
                <input type="hidden" name="takeover" value="{takeover}" />
                <input type="submit" name="ACMS_POST_Form_Chain" value="戻る" id="btnToInput" class="btn-large" />
            </form>


<!-- ここから下に条件分岐を仕込みます -->

            <form action="thanks.html" method="post" class="form-btn form-btn-send" enctype="multipart/form-data">
                <input type="hidden" name="To[]" value="{email}" />
                <input type="hidden" name="AdminReply-To[]" value="{email}" />
                <input type="hidden" name="AdminFrom[]" value="{email}" />
                <input type="hidden" name="step" value="result" />
                <input type="hidden" name="takeover" value="{takeover}" />
                <input type="hidden" name="id" value="contactForm" />
                <input type="submit" name="ACMS_POST_Form_Submit" value="送信する" id="btnSubmit" class="btn-attention-block-large" />
            </form>

<!-- 条件分岐ここまで -->

        </div>
    </section>
</div>
<!-- END step#confirm -->

この箇所(<!-- BEGIN step#confirm --><!-- フォームステップ:確認画面 --> から <!-- END step#confirm -->まで)は、入力された情報が間違いないかを確認するステップになっており、ここで「送信」ボタンを押せば thanks.html に飛んで問い合わせが成立する仕組みです。
間違いなどがあれば、「戻る」ボタンで1ステップ前に戻れる場所でもあります。

<form action="" method="post" class="form-btn form-btn-return">
から
</form>
までが「戻る」動作をするコード。

そして、
<form action="thanks.html" method="post" class="form-btn form-btn-send" enctype="multipart/form-data">
から
</form>
までが内容を「送信」する箇所で、今回の動作のキモとなる部分です。

ここ(「送信」動作の箇所)に条件分岐の記述(if文)を仕込みます。



・・・・・


動作の鍵となる条件分岐(if文)の記述と解説

上に書いた『改変コード』の条件分岐(if文)の箇所を再掲して解説します。

<!-- 以下は上に書いた改変コードのif文の箇所の再掲です -->

<!-- BEGIN_IF [{email}/re/XXXXX|XXXXX|XXXXX] -->

<!-- 【エラー動作文】 -->
<form action="404.html" method="post" class="js-unload_alert form-btn form-btn-send" enctype="multipart/form-data">
   <input type="hidden" name="takeover" value="{takeover}" />
   <input type="hidden" name="id" value="contactForm" />
   <input type="submit" name="ACMS_POST_Form_Submit" value="送信する" id="btnSubmit" class="btn-attention-block-large" />
</form>
 
<!-- ELSE -->

<!-- 【通常動作文】 -->
<form action="thanks.html" method="post" class="form-btn form-btn-send" enctype="multipart/form-data">
    <input type="hidden" name="To[]" value="{email}" />
   <input type="hidden" name="AdminReply-To[]" value="{email}" />
   <input type="hidden" name="AdminFrom[]" value="{email}" />
   <input type="hidden" name="step" value="result" />
   <input type="hidden" name="takeover" value="{takeover}" />
   <input type="hidden" name="id" value="contactForm" />
   <input type="submit" name="ACMS_POST_Form_Submit" value="送信する" id="btnSubmit" class="btn-attention-block-large" />
</form>
<!-- END_IF -->

【注】
このコード(カスタマイズ)は過去に営業メールを送ってきた相手に対処する内容です。

はじめて営業メールを送ってくる相手には対処できません。
※ただし、拒否したいアドレスさえわかっていれば対処可能です。

・・・・・

動作について
動作の仕組みはかんたんです。
条件分岐で、メールアドレスに特定の文字列が含まれていれば thanks.html へ飛ばずに、エラーで別の場所(ここでは404.html)へ飛ばすようになっています。

営業メールを送る側は、
『グヘヘ、さーて営業メッセージを送るぞ………と、アレ? 404ページに飛んじゃってなぜか送れない。アレレ???』
という状態に。

つまり、自分の問い合わせだけ何だかよくわからないけどエラーがでて送れない、という状態になります。

断固拒否するストロングスタイルも

404.htmlに飛ばさずに、例えば『kyohi.html』とか、拒否専用のページを作って
「営業メールはお断りしています」
と書いて断固と拒否するのもありかもしれません。


・・・・・


条件分岐(if文)の構造をシンプルにしてみる

<!-- BEGIN_IF [{email}/re/XXXXX|XXXXX|XXXXX] -->

【エラー動作文】
不適切な文字列が含まれているので 404.html へ

<!-- ELSE -->

【通常動作文】
問題ないので thanks.html へ

<!-- END_IF -->

<!-- BEGIN_IF [{email}/re/XXXXX|XXXXX|XXXXX] -->
XXXX の部分に拒否したいアドレスの一部を記述します。

拒否したいアドレスが一つだけであれば
<!-- BEGIN_IF [{email}/eq/XXXXX] -->
で動作します。

複数であれば
<!-- BEGIN_IF [{email}/re/XXXXX|XXXXX|XXXXX] -->
と『|(パイプ)』を使用して複数記述します。

例えば
hoge@meiwaku-eigyo.com
hoge@akushitsu-company.jp
というアドレスを拒否したい場合、
<!-- BEGIN_IF [{email}/re/meiwaku-eigyo|akushitsu-company] -->
と記述します。

メールアドレス以外もOK

メールアドレス({email})が最適だったので採用していますが、メールアドレス以外でも動作します。

例えば、営業メールには必ず『ご検討ください』『ご紹介します』というテキストが含まれているな、と思ったら
<!-- BEGIN_IF [{email}/re/XXXXX|XXXXX|XXXXX] -->
の部分を
<!-- BEGIN_IF [{inquiry}/re/ご検討ください|ご紹介します] -->
と変更するだけです。
※本文の変数が{inquiry}と設定されていると仮定。

これで指定した本文に指定の文字が含まれていたら、闇に葬れます。

エラー動作文の作り方:どうやってエラー動作文を作ったか

【エラー動作文】は【通常動作文】をコピペして改変したもので、カンタンに作成できます。
仕組みがわからずにコピペして使うと応用に困ることがあるので、ざっくりと手順を説明します。

1:if文を記述
2:ELSE〜END_IF のあいだに【通常動作文】を配置
3:BEGIN_IF〜ELSE のあいだに【通常動作文】をコピペ

以下より【エラー動作文】の作成手順
4:BEGIN_IF〜ELSE のあいだに書いた【通常動作文】の thanks.html の箇所を404.htmlに変更
5:BEGIN_IF〜ELSE のあいだに書いた【通常動作文】のメール送信に関する記述を削除(※下で解説)



・・・・・


【重要】『エラー動作文』と『通常動作文』の違いについて

<!-- これは BEGIN_IF〜ELSEの間に記述されるエラー動作文です -->
 
<form action="404.html" method="post" class="js-unload_alert form-btn form-btn-send" enctype="multipart/form-data">
    <input type="hidden" name="takeover" value="{takeover}" />
    <input type="hidden" name="id" value="contactForm" />
    <input type="submit" name="ACMS_POST_Form_Submit" value="送信する" id="btnSubmit" class="btn-attention-block-large" />
</form>
<!-- これは ELSE〜END_IFの間に記述される通常動作文です -->
<form action="thanks.html" method="post" class="form-btn form-btn-send" enctype="multipart/form-data">
    <input type="hidden" name="To[]" value="{email}" />
    <input type="hidden" name="AdminReply-To[]" value="{email}" />
    <input type="hidden" name="AdminFrom[]" value="{email}" />
    <input type="hidden" name="step" value="result" />
    <input type="hidden" name="takeover" value="{takeover}" />
    <input type="hidden" name="id" value="contactForm" />
    <input type="submit" name="ACMS_POST_Form_Submit" value="送信する" id="btnSubmit" class="btn-attention-block-large" />
</form>

エラー動作文(営業メールをはじく動作をする文)は通常動作文の一部を改変したものです。

違いは以下です。
・action="thanks.html" が action="404.html" になっている。
・<input type="hidden" name="To[]" value="{email}" />などのメール送信動作文がない

action="thanks.html" の部分を変更すると thanks.html ではなく 404.html に飛ぶのは上で解説しましたが、それだけではメールが管理者や送信者に送られてしまいます。

以下の、メールを送信する動作文を消すのがポイントです。
<input type="hidden" name="To[]" value="{email}" />
<input type="hidden" name="AdminReply-To[]" value="{email}" />
<input type="hidden" name="AdminFrom[]" value="{email}" />


上記の対処により、
1:特定のメールアドレスを含んでいたら
2:条件分岐で営業メールと判定され
3:問い合わせの最終段で404.htmlに飛ばされ
4:メールも送信されない

という流れになります。

【注意】動作検証は慎重に!テストは仮の情報で!

営業メールの対処法について解説しましたが、以下に十分ご注意ください。
1:実装の際はかならず動作の検証を行う
2:検証の際には、実際のアドレスを使用しない


本物の(実際に送られてきた)営業メールのアドレスで動作検証すると、実装に不備があった際にメールが送信されてしまいます。

例えば、
hoge@meiwaku-eigyo.com
を拒否したい場合、<!-- BEGIN_IF [{email}/re/meiwaku-eigyo|XXXXXX] -->などと main.html に書くわけですが、この動作検証をする際にフォームのメールアドレスには『hoge@meiwaku-eigyo.com』と書かずに『hogehoge@meiwaku-eigyo.hogehoge』などと仮のアドレスを使用してテストしてください。



・・・・・


まとめ

というわけで、問い合わせフォームから届く営業メールをやんわりと拒否する方法のご紹介でした。

条件分岐とフォームのステップさえわかっていれば実装できちゃうのでカンタンですね。

ちなみに自分が実装した事例では、営業メールがかなり減ったので効果ありなようです。
新たに「これも拒否したいな」というアドレスがあれば、条件分岐に加えるだけです。


以上、参考になれば幸いです。


ブログ記事一覧