2018/05/29
Gmailはスパムに対して非常に厳しい対応を取っており、メールが届かない(迷惑メールフォルダ入り含む)という問題が頻繁に発生しているようで、そういったお問い合わせを多く受けています。
ただ対策もあります。以下の内容をすべて実施すれば経験上、ほぼ改善します。
ちなみに当サイトのお問い合わせフォームではGmailでも問題なく届きます。
【重要】2019/01/23追記
2018/07/28のアップデートによって自動返信メールの送信元アドレスは送信先とは分けて設定できるようにしました。
mail.phpの「$from = '●●';」に設置先サイトのドメインと同じドメインのメールアドレスを設定すればOKです。
$from = '●●'; という設定がない場合は送信先($to)のメールアドレスが送信元になります。
自動返信メールの送信元メールアドレス(From)は必ず設置サイトのドメインと同じドメインのメールアドレスとすべきです。でないと、「なりすまし」と判断され届かない可能性が高まります。特に最近(2024年)のGmailではほぼ届かないと思ったほうが良いです。
また実在するメールアドレスとしてください。存在しないアドレスだと万が一返信された場合に宛先不明のメールが届いてしまいます。
要するに以下のように設定して下さい。
※@の前はもちろん何でもOKです。
サイトのURL:https://www.abc.jp
送信元メールアドレス:from@abc.jp
尚、2018/07/28以前の古いバージョンのプログラムの場合は管理者(送信先)のメールアドレス($to)が自動返信メールの送信元になります。管理者のメールアドレスはカンマ区切りで複数設定可能ですが、経験上、複数設定すると迷惑メール扱いされる可能性があるため、1つに設定したほうが良いです。
※これを行う場合は上記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」の部分は、ドメイン名を記入 。「sv***.xserver.jp」はサーバーパネル内「サーバー情報」より確認できます。
以下ページでチェックできます。
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/
どうやらこれが必要なのは1日に5,000通以上メールを送信する場合だけのようですのでほとんどの方が該当しないでしょう。が、やっておいて損はないでしょう。
ちなみに私のサイトではDKIMを有効化しなくても問題ありませんでした。が、エックスサーバーの場合、サーバーパネルで簡単に有効化出来たので有効化しました。変更方法についてはご自身のサーバー会社のマニュアルなどをチェックしてみてください。(※PHPプログラム側ですることではありませんので)
【重要】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として下さい)
2018/07/28以前のプログラムの場合は以下をご覧の上で修正してみてください。
mail.phpに「$use_envelope = 0;」という設定がなければそれ以前のプログラムということです。
尚、これを設定すると、ユーザーが入力したメールアドレスへの自動返信メールで送信先が見つからなかった場合に
管理者宛に「Mail Delivery System」から「Undelivered Mail Returned to Sender」というメールが届きます。
※宛先不明で戻ってきたことを意味します。
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」を追加してください。
(上記の記述のすぐ上にあります)
以下ページで説明しておりますのでご参考ください。
そもそも設置先のサイト(サーバー)がブラックリストに入ってしまっている場合、
いくら対策を行なっても意味がありません。ブラックリスト入りは本当に頻繁に確認しています。
https://www.php-factory.net/cms/detail.php?id=4
何をやってもどうしてもメールが届かない場合はSMTP経由で送信するということも可能です。
SMTP経由で送信することでメーラーで送信する場合と理屈的には同じことになりますので、
メーラーで送信出来ているのであれば、解決する可能性が非常に高いです。(100%とは言い切れませんが経験上、ほぼ解決します)
ただ、デフォルトの機能としては付いてませんので有償でのカスタマイズとして承る形になりますので、最後の手段と考えて下さい。
SMTP経由での送信化カスタマイズ:1万円(税別)
※お問い合わせフォームよりご連絡いただければと思います。