PHP工房トップ

HOME > スパムメール(迷惑メール)対策用PHPコード。指定のキーワードが含まれていたら強制終了する

スパムメール(迷惑メール)対策用PHPコード。指定のキーワードが含まれていたら強制終了する

2017/08/09

まえがき【重要】

メール内に特定の文字列が含まれている場合にスパムと判定して強制終了させメール送信をストップします。
このページの対策用のPHPソースはあくまでも当サイトで配布しているメールフォームプログラム専用のソースです。

他社製などのプログラムはこのままでは問題が出る可能性が高いため、使用されないほうが良いでしょう。

キーワードの設定について【重要】

スパムメールのほとんどが毎回特定の同じ文字列を含んでいることがほとんどのため、その文字列を禁止キーワードに設定することでスパムメールを防止します。 まずは実際に届いているスパムメールの内容をご確認いただき、 そこに記載されている内容から設定するキーワードを決定して下さい。
もちろん特定のメールアドレス(またはドメイン)から届いているのであればメールアドレスを設定してもOKです。

以下の対策用のコードは そのキーワードが含まれているかどうかで判断されます。(部分一致)
そのためキーワードの設定にはご注意下さい。

たとえば「殺」というキーワードを設定した場合、 「殺伐」であったり、「相殺」などもマッチしてしまうため、 強制終了されてしまいます。 またスパムの多くがメール内容に何らかのURLを含みますが、「http」を禁止キーワードに設定した場合、当然URLを入力することは現実的にできなくなります。(正規のユーザーがURLを入力することは想定していない場合には有りです)

そのためキーワードの設定は慎重に検討した上で、 出来る限り正規のユーザーが入力することがないであろう文字列を設定下さい。

対象のフォーム項目について

配列型ではないすべてのPOSTデータを対象にチェックを行います。
※POSTデータとはフォームからPHP側に渡される内容です。
要するに基本的には入力フォームにある全ての項目に対してチェックを実施します。

※配列型とはname属性の後ろに[]が付いているものです。チェックボックスや項目連結時に使用するものです。
要するにそれらはチェックされません。
(フォーム内での配列型の項目は少数であるか、まったく無い場合がほとんどなので問題ないと考えています)

禁止キーワードが含まれている場合の処理について

フォームで入力された内容に禁止キーワードが含まれている場合は 確認画面の段階で「Error」が表示されます。 この「Error」の文字は下記のソースコードで変更も可能です。
※ソースコード内の「exit('Error');」の箇所です。
ただし、スパム対策という性質上、「禁止ワードが含まれています」というようなメッセージは控えたほうがいいでしょう。スパム側に弾かれた理由を知らせてしまうことになります。

設置方法とソースコードについて

以下のソースコードをmail.phpの上部にコピペして下さい。 コピペ箇所は特にどこでも構いませんが、 PHPのコメントアウトの部分以外にコピペ頂く必要があります。 たとえば以下の記述の上あたりにでもコピペ下さい。

//--------------------------- 必須設定 必ず設定してください -----------------------

その上で「禁止するキーワードを設定下さい」の箇所に ダミーで書いている内容を参考に、入力内容に含まれていたら送信を禁止するキーワードを設定下さい。

これだけです。
設置後は必ず送信テストを実施して 設定したキーワードを入力した場合に強制終了すること、 及び通常の送信では問題なく送信でき、またちゃんと届くことを必ずご確認下さい。

コピペするソースコード

 

中国語圏からのメールを(スパムと判断して)強制排除する

★スパム対策をより強力にしたい場合用

残念ながら中国からのスパムは非常に多く確認されています。
そのためユーザーのブラウザの言語設定がzh(中国)であった場合に強制終了させます。
上記の対策でも基本的には非常に有効ではありますが、いたちごっこになってしまう可能性もありますので合わせ技でより強力にスパムを排除しようという対策です。
または上記を試したけどスパムが止まないという場合にお試しください。
実際に効果を確認済です。ただし下記の副作用もありますので、導入の判断は慎重に行なって下さい。

副作用について

まず中国語での問い合わせも受付けている場合は当然使用不可です。
また単にブラウザの言語設定が中国語になっていれば適用されるため、たとえば日本語が話せる中国人も弾かれる可能性もありますし、まぁ少ないとは思いますが、たとえば日本人でブラウザの言語設定を中国語にしている場合も当然弾かれます。

コピペするソースコード

以下のコードをコピペすることで言語設定が中国の場合に強制終了させ、送信出来ないようにします。
mail.phpの上のほうにコピペ下さい。exit()で強制終了させるので上のほうであればどこでもOKです。

処理方法の詳細について

ユーザーの言語設定を$_SERVER['HTTP_ACCEPT_LANGUAGE']で取得し、substr関数で先頭の2文字を切り出して「zh」が含まれていたら言語設定が中国語であると判断しています。
言語設定が中国語の場合、主に以下のような値を取得します。
zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
こちらの先頭の2文字はzhなので、この場合中国語と判断して強制終了することになります。

ちなみに日本語設定の場合は主に以下のようなものとなります。
ja,en-US;q=0.7,en;q=0.3

必ず送信テストなどで動作をご確認下さい

実装後は必ず送信テストを複数回行うなどで十分に動作をご確認下さい。

PHPメールフォーム(無料版)

PHPメールフォーム(有料版)

新着情報・更新履歴CMS(無料版)

投票・アンケートシステム(無料版)

テロップCMS(無料版)

写真ギャラリーCMS(無料版)

営業日カレンダーCMS(無料版)

営業日カレンダーCMS(有料版)

カレンダー予約フォーム(無料版)

カレンダー予約フォーム(有料版)

リンク集ページCMS(無料版)

アクセスカウンター(無料版)

ダウンロードカウンター(無料版)

その他

メールフォームの各種カスタマイズならお任せ下さい
業務効率化が可能なPHPオリジナルCMS制作します

役立つかも?なもの

豆知識や役立ち事など

PHPについて

各種情報