最近クライアントからの依頼で、Gmail宛てのメールが届かない問題の解消というのがありました。
調べてみると、迷惑メールフォルダに入っていました。
メールヘッダーを確認したところ、
SPF:pass
DMARC:fail
という結果になっていました。
DMARCがNGなのが迷惑メール判定された理由だろうと推測できます。
そしてDKIMはなぜか事情があって設定できないらしいです。
SPFがpassなのになぜDMARCがfailなのかというと、
送信元ドメインが正常にSPFレコードに指定されていればSPFはpassとなりますが
DMARCのSPF判定条件はそれだけではありません。
送信元アドレスとReturn-Pathヘッダーが一致していなければ
SPFアライメントの不一致となり、
さらにDKIMが未設定の場合はなりすましかどうかの判断がつかず、DMARCはNGとなります。
今回の件では、メール送信にPHPのmail関数が使われていました。
mail関数(mb_send_mailも同じだが)では5つ目の引数に
Return-Pathを強制的に指定するパラメータを追加することができます。
1 2 3 4 |
$from = '(送信元アドレスが入る)'; $additional_params = '-f' . $from; mail($to, $subject, $body, $additional_headers, $additional_params); // (他の引数は省略) |
Return-Pathを指定しない場合、
SMTPサーバー側で指定されたアドレスが自動的に入ります。
レンタルサーバーの場合、初期ドメインの管理者アドレスが自動で入ることになり、
SPFアライメントは不一致となります。
Return-PathにFromと同じアドレスを入れる改修を行った結果、
迷惑メール扱いされず届くようになりました。