さくらインターネットのサーバーで、DKIMとDMARCの設定を試していたのですが、よく見たらWordPressから送信されているメールのSPFがNONEになっていました。
SPFレコードの設定もONになっているのに……?


SPFレコードの設定、あってる?
今回はネームサーバーがさくらにある状態でSPFレコード「利用する」にチェックを入れる方法で設定しています。
その状態で設定されているのは "v=spf1 a:www***.sakura.ne.jp mx ~all"
という形式。
SPFレコードを設定したい:他社ネームサーバー利用の場合 の説明どおりの状態です。
念のためドメインとIPアドレスの組み合わせでSPFがPASSするはずか、SPF Record Check | MXTOOLBOX にかけてみるととくにエラーはなさそうです。

なお、ドメインとIPアドレスの組み合わせがSPFレコードに設定されていない場合は、エラーが発生している場合は、結果に「SPF Faild for IP ***」という表示が出るようです。

SPFレコードが見ているのはfromのメールアドレスではなくReturn-path
今回の問題は、SPFレコードの設定にある通りのドメインとIPアドレスの組み合わせで送信されたメールなのに、SPFがNONEになっていることです。

SPFレコードとは(徹底解説):kinsta によれば、SPFの検証にはFromのドメインではなくReturn-pathが利用されます。
SPFは、Fromドメインではなく、主にReturn-Pathで使用されるドメインに機能するため、メールの送信に使用されているReturn-Pathを確かめます
そこで、メールのソース(原文)を表示してReturn-pathを確認すると……
Return-Path: <********@www****.sakura.ne.jp>
ドメインが、サイトのドメインではなくさくらのドメインになっていました!
Return-pathはどうやって変更するのか
今回メールの送信テストに使った「WP Test Email」プラグインや、メールフォーム作成プラグインの「Contact Form 7」では、Return-pathの設定はできません。
方法1 : functions.phpで設定する
利用しているテーマファイルのfunctions.phpに以下のように記載するとWordPressが送信するメールのReturn-pathを変更できます。
add_action('phpmailer_init', function($phpmailer){
$phpmailer->SMTPKeepAlive = true;
$phpmailer->Sender = 'wordpress@[ドメイン名]';
});
方法2:WP Mail SMTP で設定する
テーマファイルにプログラムで直書きするのはイマイチ……という場合は WP Mail SMTP のメーラーをPHPにした状態で、送信元メールアドレスにサイトのドメインのメールアドレスを記載し、そのうえで「返信パス」をオンにします。

Return-pathをサイトのドメインにしたらSPFがPASSするようになった
Return-pathをサイトのドメイン(SPFレコードに記載されたドメインとIPアドレスの組み合わせ)になるようにしたところ、SPFの検証がPASSするようになりました。


今回 SPFがNONEになっていたのは、Return-pathのメールアドレスが原因だったようです。
今回分からなかったこと
今回SPFがNONEになっていたのは、さくらインターネットのレンタルサーバーに設置したWordPressでした。
同様のテストをXServerに設置したWordPressで行ったときは、Return-pathがサイトのドメインではなくsv****.xserver.jp になっていても、SPFはPASSしました。
XServerのSPFの標準設定は、v=spf1 +a:sv****.xserver.jp +a:[ドメイン名] +mx include:spf.sender.xserver.jp ~all
という書き方になっているため、さくらインターネットの設定とは違うようですが、さくらインターネットではNONEでXServerではPASSになる根本的な理由は、分かりませんでした。
本題とは直接関係しないメモ
SPFがNONEの状態で、DKIM / DMARCの設定もOFFだとGmailにメールが届かない
SPF:NONE、DKIM: NONE、DMARC:NONE の状態でWordPressから送信したメールは、Outlook.com(筆者が使ったのはinfoseek.jp)へは迷惑メールとして届きました。
しかし、gmail.comの方のメールアドレスでは、迷惑メールフォルダにも入らずに消滅しています。
その後 DKIMとDMARCの設定をONにしたところ、gmail.comのメールアドレスでも受信できるようになりました。(この時点ではSPFはNONEの状態)
※今回はDKIM / DMARCを同時にONにしたあとで、SPFがNONEだと気が付いたため、SPFのみ・DKIMのみなどのパターンは未検証
DKIM / DMARC を設定した24~48時間後、受信するメールアドレスによって検証結果が異なる
DKIMとDMARCの設定をONにした24~48時間後くらいにテストメールを送信したところ、gmail.comのメールアドレスではDKIM: PASS、DMARC: PASS として届いていました。
しかし、Outlook.comの方では、DKIM: timeout、DMARC: temperrorとなっていました。
それからさらに24~48時間後くらいにテストメールを送信すると、Outlook.comでもDKIM: PASS、DMARC: PASS になっていました。
コメント