【PHP】Return-Path未指定だと迷惑メール扱いになるケース

最近クライアントからの依頼で、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を強制的に指定するパラメータを追加することができます。

Return-Pathを指定しない場合、
SMTPサーバー側で指定されたアドレスが自動的に入ります。
レンタルサーバーの場合、初期ドメインの管理者アドレスが自動で入ることになり、
SPFアライメントは不一致となります。

Return-PathにFromと同じアドレスを入れる改修を行った結果、
迷惑メール扱いされず届くようになりました。

【PHP】日本語でも英語でもない言語でのメール送信

日本語のメールを送信するプログラムとして

こんな感じのシステムがありました。(かなり省略してます)

これで日本語のメールは問題なく送信できるのですが、
このシステムをコピーしてベトナム語版を作ろうという話になりました。

WEBやメールの日本語の文言をすべて外だしにし、
言語に応じたメッセージを入れるように改修しました。

しかしベトナム語のメールが文字化けしました。

当然ですね。

この部分、

に修正、これで文字化けは解決、多言語に対応するメール送信プログラムになりました。

【PHP】シンプルにメール送信

シンプルな日本語メール送信クラスです。サーバーの文字コードはUTF-8とした場合。