PHP工房トップ

HOME > フォームから送信されたメールが迷惑メール扱いされる場合の対策

フォームから送信されたメールが迷惑メール扱いされる場合の対策

2018/05/29

迷惑メールに振り分けられてしまう(Gmailなど)

GmailやYahooメールなどのWebメールサービスの場合、お問い合わせフォームから送信されたメールが迷惑メールフォルダに届いてしまうことがあります。

その原因は様々でもあり、またそのロジックなどがわからないため、完璧な対策は困難であるのが現状ですが、 以下を実施することで改善する可能性があります。

また今は問題がなくても将来的に問題が発生するリスクもありますので、できる限り実施されることをお勧めします。

尚、こちらのページで行う対策がすべてではないことを予めご了承ください。おそらく他にもできることは多々あると思います。あくまでも最も基本的なことで、かつ比較的簡単に実施できるもののみ掲載しております。

1,設置先サイトのドメインと同じドメインのメールアドレスを送信元に設定する(必須)

【重要】2019/01/23追記 
2018/07/28のアップデートによって自動返信メールの送信元アドレスは送信先とは分けて別に設定できるようにしましたので2018/07/28 以降にダウンロードいただいた方は以下は読み飛ばして下さい。
mail.phpの「$from = '';」に設置先サイトのドメインと同じドメインのメールアドレスを設定すればOKです。

自動返信メールの送信元メールアドレス(FROM)
2018/07/28以降にダウンロード頂いたプログラムの場合は「自動返信メールの送信元メールアドレス」($from)、
2018/07/28以前にダウンロード頂いたプログラムの場合は「管理者のメールアドレス」($to)が設定されます。
※ 送信元メールアドレス($from) の設定欄がなければ古いバージョンのプログラムということになります。
(送信元メールアドレス($from) の設定欄は管理者のメールアドレス($to)設定のすぐ下にあります。)

最も基本的なことでもありますが、また性質上当然ではありますが、必ず実在するメールアドレスとしてください。
この送信元になるメールアドレスは最低限サイトのドメインと同じドメインとするべきです。でないと、「なりすまし」と判断される可能性が高まります。
要するに以下のように設定して下さい。

サイトのURL:https://www.abc.jp
送信元メールアドレス:sample@abc.jp
(同じドメインのメールアドレスとする)

経験上、送信元になるメールアドレスがGmailなど他のドメインのアドレスを設定しても問題ないケースも多々あるのですが、お問い合わせという性質上、漏れがあると大変な事態になることもあるため、やはり同一ドメインのアドレスに設定するべきでしょう。(性質上、自動返信メールがユーザーに届いたかどうかまでは分かりませんからね)

管理者のメールアドレスは1つのみ設定する(重要)

※こちらも2018/07/28以降にダウンロード頂いたプログラムの場合はこの件は無視してください。
送信先はカンマ区切りで複数設定していただいてOKです。

2018/07/28以前の古いバージョンのプログラムの場合は管理者のメールアドレスが自動返信メールの送信元になります。管理者のメールアドレスはカンマ区切りで複数設定可能ですが、経験上、複数設定すると迷惑メール扱いされる可能性があるため、1つに設定したほうが良いです。
※問題がないケース、問題が出るケース(Gmailの場合のみ届かない)の双方を確認しています。
尚、古いバージョンのプログラムの場合で複数の送信先を設定したい場合は、デフォルトの機能として付いているBCCに設定して下さい。
※BCC側は複数設定しても基本的に問題ないです。

2,SPFレコード(DNSレコード)を設定する(強く推奨)

※これを行う場合は上記1,の設定が必須となります。(SPFレコードの性質上、これ単体では意味がないからです)

送信元アドレスの詐称を防止する送信ドメイン認証技術です。
いわゆる「なりすまし」防止のための機能です。
また最近では基本的には必ず行うべきとされている機能です。

サーバーによって対応方法が異なるため、 方法についてはご自身のサーバーマニュアルやネット検索などで調べていただければと思います。
※「迷惑メール扱い対策 SPFレコード追加 設置サーバー名」などで検索すれば出てくると思います。

経験上、必ずしもこの設定を行わなくても問題ないケースも多いですが、できる限りやっておくべきです。

エックスサーバーの場合にはサーバー管理画面(サーバーパネル)で簡単に設定できます。
※サーバーパネル→「DNSレコード設定」→「設定ドメイン選択」→「DNSレコードの追加」で行えます。

エックスサーバーの場合の設定例

親切に以下ページに方法がそのまま書いていました。※「DNSレコードへのSPF設定」の箇所。
https://www.xserver.ne.jp/manual/man_domain_dns_setting.php

ホスト名:空(入力しない)
種別:TXT
内容:v=spf1 +a:sv***.xserver.jp +a:example.com +mx ~all
※ 「sv***.xserver.jp」の部分は、サーバーのホスト名、 「example.com」の部分は、ドメイン名を記入 。ホスト名はサーバーパネル内「サーバー情報」より確認できます。

SPFレコードが正常に設定できているかチェックする

以下ページでチェックできます。
http://www.kitterman.com/spf/validate.html

以下の画像を参考にチェックしてみて下さい。
DNSの性質上、設定してから反映されるまでに時間がかかる可能性もあります。(経験上、数分~1時間程度)

1,必要事項を入力する

2,結果を確認する
NGの場合の表示

OKの場合の表示

SPFについてはまた以下のサイトも参考になるかもしれません。
※特にドメインのブラックリスト入りや設定が反映されたかどうかなどを確認できる外部サイトのリンクがあります。
http://salt.iajapan.org/wpmu/anti_spam/admin/operation/information/spf_i01/

3,-fオプションによるエンベロープFrom(Return-Path)の設定(推奨)

【重要】2019/01/23追記 
2018/07/28のメールフォームのアップデートによってmail.phpにてこの機能を簡単にON、OFFできるようにしました。デフォルトではOFFとなっていますので必要に応じてONとしてください。
※mail.php内の「$use_envelope = 0;」の箇所です。
※2018/07/28以降にダウンロードされた方は以下は読み飛ばしてOKです。

【追記】ちなみにこれをONにすることによってGmail宛で迷惑メール扱いされていたものが改善した事例がありました。(さくらサーバーで確認)
ですので、基本的にはONとすることを強くお勧めします。(エラーになる場合はOFFとして下さい)

これの実際の効果のほどは私の経験上わかりませんが、 またサーバーのPHPがSafeMode(セーフモード)で動作していると実質使えないため、配布版には実装していませんが、設定することで改善できる可能性もありますし、将来的に問題が出るリスクを防ぐ意味でもやっておいて損は無いと思います。

尚、これを設定すると、ユーザーが入力したメールアドレスへの自動返信メールで送信先が見つからなかった場合に 管理者宛に「Mail Delivery System」から「Undelivered Mail Returned to Sender」というメールが届きます。
※宛先不明で戻ってきたことを意味します。

SafeMode(セーフモード)かどうかをチェックする方法

ご自身のサーバーがセーフモードかどうかわからない場合は以下1行の記述をmail.phpの上のほうにでもコピペし、
入力→確認画面と移動して「セーフモードです」と表示されれば設置先のサーバーはセーフモードということになります。その場合はこちらの-fオプションによるエンベロープの設定は行なえません。

経験上、今の時代はセーフモードとなっているサーバーは少ないと思います。
(公式マニュアルでは「この機能は PHP 5.3.0 で 非推奨となり、 PHP 5.4.0 で削除されました。」とあります)

if(ini_get('safe_mode')) exit('セーフモードです');

※確認が済んだら必ずこの記述は削除してください。

SafeMode(セーフモード)ではない場合は以下の設定方法をご参考の上で実施して下さい。

設定方法

mail.phpの以下の箇所を探してください。
※自動返信メールの送信処理部分です。(mail.php内には1箇所しかありませんので必ず見つかります)

if($remail == 1 && !empty($post_mail)) mail($post_mail,$re_subject,$userBody,$reheader);

これを以下に変更してください。

if($remail == 1 && !empty($post_mail)) mail($post_mail,$re_subject,$userBody,$reheader,'-f'.$to);

※末尾に「,'-f'.$to」を追加しただけです。

管理者宛メールの方も必要に応じて同じように末尾に「,'-f'.$to」を追加してください。
(上記の記述のすぐ上にあります)

尚、余談となりますが、これを行なった場合で管理者のメールアドレスを設置先サイトのドメインではないメールアドレスを設定した場合に送信されたメールのメールヘッダで「spf=softfail」という問題が発生したことを確認しています。ただ、それによって迷惑メールに振り分けられるかどうかまでは確認できていません。少なくとも当方では特に影響なかったです。 (要するにこのことからも管理者のメールアドレスは設置先サイトのドメインと同じドメインとすべきということですね)

4,スパムのブラックリストに登録されているかのチェック

以下ページで説明しておりますのでご参考ください。
そもそも設置先のサイト(サーバー)がブラックリストに入ってしまっている場合、 いくら対策を行なっても意味がありません。
https://www.php-factory.net/cms/detail.php?id=4

5,SMTP経由でメールを送信する

何をやってもどうしてもメールが届かない場合はSMTP経由で送信するということも可能です。
SMTP経由で送信することでメーラーで送信する場合と理屈的には同じことになりますので、 メーラーで送信出来ているのであれば、解決する可能性が非常に高いです。(100%とは言い切れませんが経験上、ほぼ解決します)

ただ、デフォルトの機能としては付いてませんので有償でのカスタマイズとして承る形になりますので、最後の手段と考えて下さい。

SMTP経由での送信化カスタマイズ:1万円(税別)
お問い合わせフォームよりご連絡いただければと思います。

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

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

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

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

テロップCMS(無料版)

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

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

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

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

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

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

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

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

その他

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

役立つかも?なもの

豆知識や役立ち事など

PHPについて

各種情報