- ベストアンサー
SPFレコードについて教えてください。
SPFレコードの付与についてです。 Gmail宛にフォームからのメールが届きません。 SPFレコードが原因になっていることは理解していますが、仕組みがいまいちわかりません。 現在、エックスサーバー内にあるaaa.comというサイトを、Aレコードだけを設定して表示、メールフォームを設置しています。 メールフォームの送信にはSMTPは使用しておりません。 メールはGoogleで運用しており、MXサーバーはGoogleを向いています。 この場合、SPFのテキストレコードにGoogleのレコードを追加しても意味はないでしょうか? SMTPとSPFレコードはセットでないといけないでしょうか? どのたかご教授いただけますと幸いです。
- みんなの回答 (12)
- 専門家の回答
質問者が選んだベストアンサー
> Google側のSPFにエックスサーバーを追加すれば解決するということですね。 > 現在はエックスサーバーに行なっていたので意味がなかったのかと思います。 そのとおりです。
その他の回答 (11)
- superside0
- ベストアンサー率64% (461/711)
> 試しに他のサーバー宛のメールを送った場合(gmailではない)はfrom にIPアドレスが入っていました。 ですよね。そのIPアドレスが コマンドプロンプトの nslookup -q=txt 今回のドメイン名 の結果に入っているかの確認は できましたか?
補足
ありがとうございます。 nslookup -q=txtの結果ですが、Googleのみの記載でした。 spf.google.com Google側のSPFにエックスサーバーを追加すれば解決するということですね。 現在はエックスサーバーに行なっていたので意味がなかったのかと思います。
- superside0
- ベストアンサー率64% (461/711)
> Received: by ここはエックスサーバーのホスト名 ( from ユーザーID 20037)となりますのでIPアドレスではないかと思います。 もしかして、このメールって xserverから自身に送信したもので xserverから外部ドメインに宛てたものではないのではないでしょうか? 確認するなら、メールフォームから まったく関係ないドメイン宛に送ってみて それのヘッダを確認してみて下さい。 それと xserverから独自ドメインにメール送信するとき それがgoogleのSMPTに向かわず、自ドメイン宛なので xserver側に送信されているっていう可能性はないですか? (つまり届かないのはSPFの問題だと勘違いしてる ということはないですか?)
補足
ご返信ありがとうございます。 Gmailへは迷惑メールにすら入らないため、確認ができないため、エックスサーバーのメールを使用したものです。 試しに他のサーバー宛のメールを送った場合(gmailではない)はfrom にIPアドレスが入っていました。
- superside0
- ベストアンサー率64% (461/711)
https://s3.ap-northeast-1-ntt.wasabisys.com/ak1520d-filenow-5/files/20240910-1004_04bf81018e05cba67a55dc2524b42bc8.png からはメールフォームとしてPHPmailerを使っていて そこから、xserverのSMTPを使って送信しているということ がわかるだけで、SPFはわかりません。 ただし、PHPmailerからの送信で googleのSMTPは使っていないことだけは、明確ではあります。 黒塗りされた、Received: by ... fromのところにIPアドレスが あれば、nslookup -q=txt ドメイン名で取り出したSPFレコードに それが記述されているか を確認するべきです。 なお、SPFレコードはIPアドレスを直接記載しないで +aや+mx ならそのドメインのAレコード値やMXレコード値をたどって調べる必要があり また、includeならその名前をさらにnslookup -q=txt {include値} で調べることになります。
補足
ご回答ありがとうございます。 >黒塗りされた、Received: by ... fromのところにIPアドレスがあれば、nslookup -q=txt ドメイン名で取り出したSPFレコードにそれが記述されているか を確認するべきです。 Received: by ここはエックスサーバーのホスト名 ( from ユーザーID 20037)となりますのでIPアドレスではないかと思います。
- superside0
- ベストアンサー率64% (461/711)
> v=spf1 +a:sv***.xserver.jp +a:example.com +mx include:spf.sender.xserver.jp include:_spf.google.com ~all > こちらの方はすでに記載しましたがダメでした。 なるほど。。。 変更が保存できてないとか、 変更できてるけど反映に時間がかかっていて遅いとか、 操作に勘違いがあるとかあるかもしれないので 変更したデータがきちんと公開しているDNSに反映できているかを コマンドラインで確認してみるとよいでしょう。 Windowsをお使いなら コマンドプロンプトの窓を開いて nslookup -q=txt example.com (example.com のところは、 メールフォームでFromアドレスにしているメールアドレスの@の後ろ側に読み替えてください) です。 結果、DNSで記載した通りの "v=spf1 ...."の行が出てくるはずです。 (公開したDNSで記載した通りになってなかったり v=spf1...の行が複数行あったら どこかで間違えています) なお、DNSで TTLを1時間とかに指定してあったら 反映がまだ届いていないかもしれないので 焦らずに、1時間後に再確認することになります。
補足
ご返信ありがとうございます。 ちなみに添付がメールのソースです。 https://s3.ap-northeast-1-ntt.wasabisys.com/ak1520d-filenow-5/files/20240910-1004_04bf81018e05cba67a55dc2524b42bc8.png
- superside0
- ベストアンサー率64% (461/711)
googleのDNSと、xserverのDNSが存在しているようですが whoisのネームサーバーに登録してあるのは、どちらですか? もしかして、googleのDNSで公開しているのに xserver上のDNSのほうを変更してしまっていて それで、その修正が反映されずに困っているということはないすか? メールフォームで googleのSMTPサーバーを使って送信しているにせよ サーバー自身から送信しているにせよ v=spf1 +a:sv***.xserver.jp +a:example.com +mx include:spf.sender.xserver.jp include:_spf.google.com ~all を公開しているほうのDNSに 設定すれば SPFに違反してgmailから拒否させてしまうというのは 解決できるはずですよ。 なお、SPFでなく、SMTP認証でエラーして送信できないって ことではないのですよね?
補足
ご回答ありがとうございます。 >googleのDNSと、xserverのDNSが存在しているようですがwhoisのネームサーバーに登録してあるのは、どちらですか? Googleです。 >もしかして、googleのDNSで公開しているのにxserver上のDNSのほうを変更してしまっていてそれで、その修正が反映されずに困っているということはないすか? 反映されずと言いますか、DNS(MXサーバー含む)はGoogleを向いていてAレコードだけエックスサーバーを使用しています。 >メールフォームで googleのSMTPサーバーを使って送信しているにせよサーバー自身から送信しているにせよ v=spf1 +a:sv***.xserver.jp +a:example.com +mx include:spf.sender.xserver.jp include:_spf.google.com ~all を公開しているほうのDNSに 設定すれば SPFに違反してgmailから拒否させてしまうというのは 解決できるはずですよ。 こちらの方はすでに記載しましたがダメでした。 >なお、SPFでなく、SMTP認証でエラーして送信できないってことではないのですよね? SMTP認証は通していません。 PHPでのメール送信でSMTPを使用せずに送信しています。
- t_ohta
- ベストアンサー率38% (5238/13705)
> この場合はホームページ側のサーバーのレコードに例えば以下のように追加すればいいということでしょうか? > include:_spf.google.com SPFレコードはaaa.comのDNSサーバーのゾーン情報ファイルに IN TXT "v=spf1 +ip4:xxx.xxx.xxx.xxx -all" と言ったレコードを書くだけです。 xxx.xxx.xxx.xxx に送信元となるSMTPサーバーのIPアドレスを書き込みます。 送信元のSMTPサーバーがGoogleのサーバを使用しているのであればIPアドレスの替わりに include:_spf.google.com を書けばいいので IN TXT "v=spf1 include:_spf.google.com -all" となります。 > また、ということはSMTP送信とSPFレコードは関係がないということでしょうか?明後日の方向の質問であれば申し訳ありません。 SPFレコードは受信側のSMTPサーバーが送信者のメールアドレスとSPFレコードを比較して接続してきたSMTPサーバーが正規のサーバか判断する材料でしかありません。 フォームのプログラムがメールを送信するためにSMTPサーバーに接続しようとして拒否されているのであればSPFレコードは全くもって無関係です。
補足
ありがとうございます。 SPFレコードとSMTPの関係性は理解できました。 レコードの挿入についてお聞かせください。 以下のような形でサーバー側のSPFレコードはすでに記載されています。 https://d.kuku.lu/63jghmy62 このドメインのサイトからは現状はGoogleではメールが受信できません。ここにinclude:_spf.google〜を入れるとこのサイトから送信されるメールにこのSPFのレコードが記述されるといったイメージでしょうか? 尚且つ、他のドメイン(他のサーバー)から送る場合もそのサーバーの送信サーバーを使うのでそこに記述するとOKということでしょうか? あくまでメールソースにSPFの情報が書き足されますよっというふうに認識で間違いありませんでしょうか? よろしくお願いします。
- superside0
- ベストアンサー率64% (461/711)
>1 > .DNSサーバーはGoogleにあります。 >MXサーバーもGoogleに向いています。 >Aレコード(ホームページ)のみBというサーバーに向いています。 >この場合、BのサーバーにGoogleのレコードを追加するということで>よろしいでしょうか? BのサーバーにGoogleのレコード? ちょっと意味がわかりませんが、多分理解が違います。 DNSサーバーがGoogleにあるのでしたら それにテキストレコードとして、SPFデータがすでにあるはずです。 (なければ新規追加) そこに、Bのサーバーの情報も追加することになります。 > 2.SMTPサーバーについて >SMTP認証を行なっていないため、SMTPサーバーを経由していないのではないか > と思いましたが、 これも違います。 SMTP認証は、外部のホストからSMTP接続して そのサーバーからメールを送信してもらうときに その権限があるかを確認するために必要なものであり、 サーバー自身から自分にSMTP接続して送信するのなら、 SMTP認証は不要です。 つまり、SMTP認証してない というのは SMTPを使っていないということではなく 認証しないまま、SMTPを使っているということになります。 > この場合も独自ドメインサイトから送信が行われ >た場合は受信側はSPFレコードを確認してくれて受信を >してくれるということでしょうか? 送信元であるSMTPがメールを送信してくれるか という仕組みと 送信先がSPFを見て受け取ってくれるか という仕組みを 一緒に考えてしまっているようです。 この2つは別のものです。 SMTP認証できて 送信元のサーバーから送信できたからといって 送信先のサーバーがそれを受信してくれるとは限りませんし その逆もしかりです。
- superside0
- ベストアンサー率64% (461/711)
SPFレコードというのは、簡単にいうと、独自ドメインからのメールは、 SPFレコードに記載してあるIPアドレスから送られてきたのが本物で、 それ以外から送られてきたものは偽装(なりすましのスパム)であるというのを、世界に知らせるためのものです。 (送信元のIPアドレスを確認しているだけで、認証の仕組みはありません) 独自ドメインを送信元にしたメールをメールソフトから送るだけなら、メールソフトで指定するSMTPサーバー(多くの場合MXと同じ)を SPFレコードに書くだけのことです。 しかし、Webサイト上にメールフォームがあって、その送信元が 独自ドメインにしているのなら、メールフォームで使われるSMTPサーバーもSPFレコードに追記しておく必要があります。 (でないとgmailとかではじかれるので) 質問者の場合、エックスサーバーをSMTPサーバーとして使って メールフォームからメールを送っているのことなるので そのエックスサーバーをSPFレコードに追加する必要があるということなります。
補足
繰り返しになる点がありますが、もう2点ほどお聞かせください。 1.DNSサーバーはGoogleにあります。 MXサーバーもGoogleに向いています。 Aレコード(ホームページ)のみBというサーバーに向いています。 この場合、BのサーバーにGoogleのレコードを追加するということでよろしいでしょうか? 2.SMTPサーバーについて SMTP認証を行なっていないため、SMTPサーバーを経由していないのではないかと思いましたが、この場合も独自ドメインサイトから送信が行われた場合は受信側はSPFレコードを確認してくれて受信をしてくれるということでしょうか? よろしくお願いします。
- superside0
- ベストアンサー率64% (461/711)
> おっしゃる通りエックスサーバーから送られているようになっています。 > メールソースを見る限りだとSPFレコードのところはPASSになっていません。 ならば、エックスサーバーのマニュアルでSPFレコードの設定方法 をみて 独自ドメインのSPFレコードにそれを挿入することになりますね。 なお、IPアドレスを指定する書き方でなく 別のSPFレコードを参照させるinclude記述方法かもしれませんが それもエックスサーバーのマニュアル通りで。 ちなみに、SPFレコード自体を複数登録するのではなく 1つのSPFレコード内に複数のIPやincludeを列挙する形です。
補足
ということはSMTP(パスワード認証)をせずにサーバーのメールフォームからメールを送る行為というのは送信元のサーバーのレコードにMXサーバー側のSPFレコードを書けば偽装とは見なされないということでしょうか? 例えば、bbb.comでもMXサーバーが設定されているSPFレコードを書けばどこからでもSPFレコードをパスした?メールが送れるということでしょうか。 SMTP送信を行った上でなくてもSPFレコードの認証は付与されるということでしょうか? すいません、どう質問すればいいのかうまくまとめられません。
- superside0
- ベストアンサー率64% (461/711)
メールフォームでメール送信する方法は色々ありますが 一般的には、 ・CGIが関数を通じて最終的にはOSのsendmailをコールする ・CGIが外部のSMTPサーバーに接続して送信する のどちらかになります。 今回の場合、多分前者だと思いますが > メールフォームの送信にはSMTPは使用しておりません。 ということではなく、この場合だと、Gmailにとっては エックスサーバーが、SMTPサーバーとして送信してきたと みなされます。 なので、この場合ならば、 SPFレコードにはエックスサーバーのIPアドレスが必要ということになります。 ちなみに、後者のケースならば、外部のSMTPサーバーのIPアドレスを SPFレコードに記載することになります。
補足
ご回答ありがとうございます。 PHPでフォームを送信しております。 >エックスサーバーが、SMTPサーバーとして送信してきたとみなされます。 おっしゃる通りエックスサーバーから送られているようになっています。 メールソースを見る限りだとSPFレコードのところはPASSになっていません。
- 1
- 2
お礼
ありがとうございました。 無事、届くようになりました。 ただ、届かないものもあるようですがこちらはおそらくSMTP送信を通していないからなのかな?と思いますが、解決しております。