ご多分に漏れず、僕のクライアントさんがそうなってしまったのを、先ほど対処したのでメモ。
誰かのお役に立てばと。
まず、迷惑メールになるのは、たいていは認証系であると考えて、以下を疑っていく。
1.IPアドレスがブラックリスト!?
自分のところのサーバーのIPアドレスがブラックリストに入っていないかどうかはここでわかる。
▼spamhaus
調査方法は、URLのおしりにIPをGETパラーメータで記載する。
http://www.spamhaus.org/query/bl?ip=111.222.333.444
まぁブラックリストに入っていることはあまりないだろうけど、安いサーバーだとあり得るかも。
2.SPF(ip v6対応)
次のポイントとしてはSPFがある。
SPFっていうのは、そのドメインからのメールがなりすましじゃないことを示すもの。
今は対応必須。対応しているかどうかはこちらでテストできる。passが出れば成功。
▼SPFのチェックツール
そんなの知っているよ!PASSしているよ!という人も多いかも知れないが、
ここで多くの人はip4にしか対応していないかも知れないけど、サーバーが勝手にipv6に対応していることがある。
以下はip4しか対応していない例。
v=spf1 +ip4:111.222.333.444 ~all
→
v=spf1 +ip4:111.222.333.444 +ip6:2000:6000:4000:800::1000 ~all
とipv6に対応している場合は必ずip6を追記しよう。
理由は、gmail側のサーバーはip v6だから、こちら側もip v6だと後者の記述がないと処理されないから。
ちなみにipv6対応しているかどうかは、nslookupコマンドを使って調べられる。
>nslookup
>set q=AAAA
>exsmplecom
という感じ。その中にAAAAレコードがあればそれがipv6のアドレス。
※この方のブログで知りました
▼Gmail相手に迷惑メール扱いされる場合(SPFレコードのIPv6対応)
3.メールのヘッダー
mb_sendmailなどのプログラムを使っているならば、ヘッダー情報はある程度入れた方がいい。
具体的には、FromとReturn-pathが設定されているのは必須。
なので、こんな風に書いておこう
mb_sendmail($to,$subject,$body, “From: info@exsmple.com”, “-f info@exsmple.com”);
ここでinfo@exsmple.comは、Fromに指定する管理者メールアドレス。
もし、Fromのところにもちゃんと名前を入れたい場合は、こんな感じ。
———–
$from_name = “送り主名”;
$from_addr = “info@exsmple.com”;
$from_name_enc = mb_encode_mimeheader($from_name, “ISO-2022-JP”);
$from = $from_name_enc . “<” . $from_addr . “>”;
$header = “From: ” . $from . “\n”;
$header = $header . “Reply-To: ” . $from;
//to user send mail
mb_send_mail($to,$subject, $header, “-f ” .$from_addr);
後半の-fをつけていない人は多いかも。ちなみに-f(ハイフンエフ)はsendmailなどMTAへのコマンドで、fromの電子メールアドレスはこれですよ、という意味。
あと他のヘッダーであるmessage-idやcharsetなどの指定は、ここに書いたものを全部試してもダメだったらやってみる価値はあるかも知れないけど、おそらく、その場合はそれでもダメだと思う。(僕はダメだった)
4.Fromのアドレス
これは検証にしかならないかも知れないけど、同じドメインの別メールアドレスを試す手はある。例えばinfo@exsmple.comであれば、mail@exsmple.comを試す。
もしそれが通るならば、そちらを使うというのもあり。でもこれもおそらくダメだろう。
5.DKIM
さらに認証を強固にする方法としてDKIMというのがある。
これは、サーバーにインストールして、メール送信プログラムと連携して認証を強固にするものだけど、多くの共用サーバーではインストールそのものができないだろう。
なので、これを対応できる人は稀だと思う。けどやれるならやっておいた方がいいかも。
▼この方のブログが参考になると思う。
6.メールの文章
1~5を試してダメであれば、メールの文章をかえてみる手がある。
この場合は、ちまちま変えずに、本当に誰かとgmailでやりとりしているメールの文章をそのまま貼り付けて送ってみてどうか?ということを試すといいと思う。
それでもダメだった場合は、もう他の原因だから、諦めに近くなる
7.gmail以外のメーラーでなら受信できるのか試す
最終手段。gmail以外のメーラーでなら受信できるならば、サイトに「gmailの人は必ず迷惑メールを見てね」というメッセージを出して、そのまま放っておく。
本当はやりたくないけど、gmailは一般のメールも迷惑メールフィルタに入れてしまうこともあるくらいだから、今は解決できないのだと腹をくくり、1~6のやるだけのことはやって、あとは天命を待つ。
gmailは常に進歩しているから、こちら側が正しい設定をしているならば、いつかは届くようになるかも知れない。それに期待する。
※20141004追記
mb_sendmail自体が、レンタルサーバーのSMTPサーバを使っちゃうから怪しいということで、確実にするならPEAR::Mailあたりが入っているレンタルサーバーを使って、
SMTPサーバーはgoogleのやつなどを使うか、本当はSMTPサーバーを固定IPで自作しちゃった方がいいみたいです。
僕は検証していないけど、まぁ確かにその方が確実ですよね。
参考になりそうな方のブログを見つけたので張っておきます。
http://quattrooooo.cocolog-nifty.com/blog/2011/02/gmail-smtppearm.html
…
以上、1~7まで。
丁寧には説明できていないけど、このページを見るのはおそらくプログラマの人だと思うので、何かの参考になれば幸いです。