こんにちは。YMOです。
先日、私が管理しているプロジェクトでWEBフォームから送信されるメールが届かない問題が起ったので、備忘録をかねて記事を書こうと思います。
プロジェクトはクリニックさんのサイトリニューアルで、診察予約のフォームがありました。
経緯は割愛しますが、条件としてはリニューアルにあたりWEBサーバーはさくらインターネット(以下、さくらサーバー)に乗せ換えるが、メールサーバーは既存サーバー(以下、旧サーバー)を継続して利用する必要がありました。
上記の条件で予約フォームからメールを送信した際に2つの問題が起こりました。
ユーザーが入力したメアド宛に自動返信メールが届かない
社用メールやGmailなどのフリーメールにはユーザー宛に自動返信メールが正常に届きましたが、キャリアメール(Docomo、Au、SB)には届かきませんでした。
原因は単純で、SPFレコードの設定ができていなかったからでした。
エンベローブFromは「さくらサーバーのドメイン(example.sakura.ne.jp)」、でもヘッダFromは「旧サーバーのドメイン(example.jp)」のドメインになっていて、実際に送信しているメールサーバーと送信元のFromのメールアドレスが一致しないため整合性がとれず「なりすましメール」と判断されたようです。
SPF(Sender Policy Framework)とは、メール送信元のFromアドレス(ドメイン)が詐称されていないことを証明するための技術です。
設定はドメインのDNS設定のTXTレコードに下記のようなSPFレコードを記述します。(記述方法は他にも色々あります)
example.jp. IN TXT “v=spf1 include:sakura.jp ~all”
これは、example.jp は sakura.jp を信頼できるドメインだと証明していることになりますので、正常にメールが送信されるようになります。
管理者宛に送信される確認メールが届かない
これも1つ目と同じで、WEBとメールのサーバーが違うことが悪さをしていました。
原因は管理者メールアドレスが info@example.jp なのですが、さくらサーバー側にも example.jp をホスティングされていたので、フォームシステムからsendmailでメール送信した場合、外部DNSを閲覧するのではなく、さくらサーバー内部で処理を完了し、同サーバ内のメールボックスに送信される仕様だったため、旧サーバーのメールボックスには届かなかったようです。
さくらサーバーには「sendmail送信時にDNSをsakura内部を見るか外部を見るかの設定」する設定項目があり、チェックするとメール送信時にメールサーバーを外部のDNSを見に行くようにできますので、管理者宛に確認メールを正常に送信することができました。
なりすましメールは、クライアント側のメーラー設定や、受信メールサーバーのセキュリティレベルにより受信結果がことなりますが、
SPFレコードやDNS設定などを確認しておくと安心ですね。
以上、ご視聴ありがとうございました。