Gmailで迷惑メール扱いされて困った日々のメモ ※追記あり(2013/10/11)

架空ストアからお客様へのメールが、Gmailで「迷惑メール」扱いされてしまうことが多発し、
その解決までに結構な手間を要したので、備忘録として一部始終を書き残しておく。

 

■迷惑メールの始まり

迷惑メール扱いされるようになった時期は、はっきりとは分からないのだけど、今年の6~7月頃からじゃないかと思う。
こちらのメールの内容・メールシステムの仕様に変更は一切なかったので、Gmailの迷惑メールフィルタの更新によるものだろう。
一時的なものかなと思っていたら8月頃には業務に支障の出るレベルになってしまい、急ぎの対策が必要になった。

 

■試行錯誤

「迷惑メール」フォルダの中のメールを見ると、迷惑メール扱いになった理由が表示されるのだが、今回の場合は、「Google の迷惑メール フィルタによって検出されたメッセージに類似しています。 」というものだった。

そこで、メールの文面をあれこれ工夫してみたのだが、なかなか改善されない。
メール内に記載しているURLを省くと、OKになる場合もあったのだけど、注文のキャンセルURLや、会員登録の確認URLなどは省くわけにはいかないので、URL入りでも大丈夫にしなくてはダメだ。

URLの内容に何か問題があるのかと考えて、シンプルなURLにRewriteしてみたり、外部のURL短縮サービスを使ってみたりもしたが、前者は効果が出ず、後者は時々しかうまくいかない上に、パフォーマンスに心配が残った。
おかしい。何だか正しい方向に工夫している手ごたえがない。

この時点では、とにかくメールの文面を、URLを、何とかしなくてはとばかり考えていた。
「Google の迷惑メール フィルタによって検出されたメッセージに類似しています。 」って言われてるから、とにかく内容を改善しなくては、と思い込んでいたのだ。
ところが突破口はそこにはなかった。

 

■たまたまDKIMにたどり着く

10月になって弊社クライアントの案件で、「OCNへのメールが届かなくなったっぽい」という相談をうけた。
全く届いていない!とも言い切れないけど、どうも届いてないっぽいよ…というふわふわとした内容で、OCNの問題なのか、メーラーの問題なのかも分からない。
メールが届いていないらしいユーザーさんにそのへんを聞きただすのもちょっと難しく、実情がつかめなかったので、OCNのテクニカルサポートに相談してもはかばかしくなかった。
でも何とかしなくてはならない。

ひたすらググっているうちに、DKIM認証で改善した、という情報を見つけた。
とにかく試してみるに越したことはないけれど、いきなりクライアントのサーバーで試すのもよろしくないから、じゃあ、うちのサーバーで試してみましょうということで、架空ストアのサーバーにDKIMを導入してみたら、なんとOCNの件だけでなく、Gmailでの迷惑メール扱いまで解決してしまったのだった。

 

■DKIMの導入

架空ストアのドメインはずいぶん前からSPFの設定はしてあって、それで十分だと思っていたら、いつの間にか世の中はずっと先に進んでいたらしい。

DKIMの導入にあたっては、以下のサイトを参考にさせていただいた。

CentOS6.2でOpenDKIM(DomainKeys Identified Mail)のインストール、設定@実験酒場

僕はmilter-managerを使わない方法でやってみた。

設定がうまくいったかどうかの確認に利用させていただいたのは以下のサービスなど。
DKIMのテスト

check-auth@verifier.port25.comやsa-test@sendmail.netも利用させていただいたけど、どれか一つで試せば十分だと思う。

 

■反省

「Google の迷惑メール フィルタによって検出されたメッセージに類似しています。 」をストレートに受け止めすぎて、文面の修正にこだわってしまったのが失敗だった。
そうでなければもっと早く解決していたかも。

実際にメールの内容が迷惑メールと類似したのだろうから、Gmailがウソやいい加減なことを言っていたというわけではない。
解決に必要なのは、迷惑メールとの類似を許せるくらいの信頼できる認証ですよ…ということに思い至らなかった僕に問題がある。
反省して、今後に活かしたい。

 

■後日談としてのメールの改行コードの統一

さて、DKIMの導入で一応の解決は見たのだけれど、数日して、一部のメールで認証がfailになることに気付いた。

これも解決までにずいぶんと悩んだのだけれど、結論から言えば改行コードに原因があった。
sendmailの際に、改行コードが\r\nに統一されるせいで、\r\nと\nが混在するメールだと、sendmail前と後でメールの内容が変わってしまうのだが、opneDKIMは、sendmailの前に実行される(当たり前か)ので、受信時に「メールが改ざんされている」と判断されてしまうのだ。

改行コードを統一することで無事解決。
すべて\nにしてしまうのが良いですね。

 

■最後に

書いておいたら誰かの役にたつかも…と思ったのだけれど、
あらためて見てみると、そうでもないような気がしてきた。
こんなことで時間を浪費するのは僕だけかも知れない。

こういう感じの気恥ずかしさ

 
 
 

■追記(2013/10/11)
最近、検索でこの記事を見つけてくれる方が多いようなので追記を。
皆さんご存知のように、Gmailのスパムフィルターさんは日々変化しておりますので、
現在は、この記事に書いてある対策だけでは、解決しないことが多いと思われます。
さらに何をすれば良いのか…については、正直なところお手上げです。分かりません。
だけど、この記事に書いてあることは、最低限やっておいた方が良いとは思います。

Trackback/Pingback (1)

  1. [...] gmailの迷惑メールフィルタは強烈な上に、理由を教えてくれないから辛い。このメッセージが [迷惑メール] に振り分けられた理由: Google の迷惑メール フィルタが検出したメッセージに類似しています。こんなメッセージが出るけど、リンク先の説明を見ても、まったく意味不明でハマることに。ご多分に漏れず、僕のクライアントさんがそうなってしまったのを、先ほど対処したのでメモ。誰かのお役に立てばと。まず、迷惑メールになるのは、たいていは認証系であると考えて、以下を疑っていく。1.IPアドレスがブラックリスト!?自分のところのサーバーのIPアドレスがブラックリストに入っていないかどうかはここでわかる。▼spamhaushttp://www.spamhaus.org/調査方法は、URLのおしりにIPをGETパラーメータで記載する。http://www.spamhaus.org/query/bl?ip=111.222.333.444まぁブラックリストに入っていることはあまりないだろうけど、安いサーバーだとあり得るかも。2.SPF(ip v6対応)次のポイントとしてはSPFがある。SPFっていうのは、そのドメインからのメールがなりすましじゃないことを示すもの。今は対応必須。対応しているかどうかはこちらでテストできる。passが出れば成功。▼SPFのチェックツールhttp://www.sendmail.co.jp/sa/spfcheck.htmlそんなの知っているよ!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対応)http://blog.core-arata.co.jp/2014/02/02/11453.メールのヘッダー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というのがある。これは、サーバーにインストールして、メール送信プログラムと連携して認証を強固にするものだけど、多くの共用サーバーではインストールそのものができないだろう。なので、これを対応できる人は稀だと思う。けどやれるならやっておいた方がいいかも。▼この方のブログが参考になると思う。http://blog.retro-ink.org/?p=4916.メールの文章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まで。丁寧には説明できていないけど、このページを見るのはおそらくプログラマの人だと思うので、何かの参考になれば幸いです。 [...]