ある日突然、構築してあったwebサービスで、メール送信ができなくなっていることに気がついた、ユゲタです。
メールの送信先をgmailにすると、サーバーエラーで、メールが送信されなくなる事象です。
これまで何度もこのエラーに悩まされてきましたが、DNSのtxtレコードにspf情報を登録すればいいという事で、googleのサイトに書いてあるとおりに登録していたのですが、今回はさらにそれに加えて登録情報が必要だったので、その対応についての備忘録を残しておきます。
同じエラーに悩まされる人の助けになれば幸いです。
本日のIT謎掛け
「gmail」と、かけまして・・・
「ファミレスのドリンク」と、ときます。
そのココロは・・・
フリーの定番でしょう。
(無料で使えるgmailと、フリードリンク)
エラー事象
これは、自分の構築しているメールサーバーにメール送信すると、普通に送信ができて、gmailドメインのアドレスに送信すると、サーバーでは以下のようなエラーが発生しているという事象です。
Jun 29 12:16:22 [localhost] postfix/pickup[15808]: D3888171B26: uid=993 from=<nginx>
Jun 29 12:16:22 [localhost] postfix/cleanup[15823]: D3888171B26: message-id=<20200629031622.D3888171B26@mail.example.com>
Jun 29 12:16:22 [localhost] postfix/qmgr[15809]: D3888171B26: from=<nginx@mail.example.com>, size=1364, nrcpt=1 (queue active)
Jun 29 12:16:24 [localhost] postfix/smtp[15825]: D3888171B26: to=<hoge@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.204.27]:25, delay=1.2, delays=0.01/0/0.36/0.83, dsn=5.7.26, status=bounced (host gmail-smtp-in.l.google.com[74.125.204.27] said: 550-5.7.26 This message does not have authentication information or fails to 550-5.7.26 pass authentication checks. To best protect our users from spam, the 550-5.7.26 message has been blocked. Please visit 550-5.7.26 https://support.google.com/mail/answer/81126#authentication for more 550 5.7.26 information. c7si22504154pgw.429 - gsmtp (in reply to end of DATA command))
Jun 29 12:16:24 [localhost] postfix/cleanup[15823]: 12A24171B38: message-id=<20200629031624.12A24171B38@mail.example.com>
Jun 29 12:16:24 [localhost] postfix/qmgr[15809]: 12A24171B38: from=<>, size=3982, nrcpt=1 (queue active)
Jun 29 12:16:24 [localhost] postfix/bounce[15829]: D3888171B26: sender non-delivery notification: 12A24171B38
Jun 29 12:16:24 [localhost] postfix/qmgr[15809]: D3888171B26: removed
Jun 29 12:16:24 [localhost] postfix/local[15830]: 12A24171B38: to=<nginx@mail.example.com>, relay=local, delay=0.01, delays=0/0/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
mail.example.comが送信側のドメインだと考えてください。
ポイントは、"This message does not have authentication information or fails to 550-5.7.26 pass authentication checks. To best protect our users from spam, the 550-5.7.26 message has been blocked. Please visit 550-5.7.26 https://support.google.com/mail/answer/81126#authentication for more 550 5.7.26 information. c7si22504154pgw.429 - gsmtp (in reply to end of DATA command))"の箇所で、
エラーメッセージが"550-5.7.26"という事を表していて、
googleの指定するサイトに言ってみたところ、550-5.7.xという解説はあるけど、.26のマイナーバージョンの明確kな解説はされていませんでした。
DNSのSPF設定
Google解説サイトにかかれているのは、以下の内容でDNSのTXTレコードをセットせよ。との事でした。
TYPE=TXT
TTL=3600
VALUE="v=spf1 include:_spf.google.com ~all"
とりあえず、なんにもセットしていない状態では、送信すらされなかったのですが、この設定をして、DNSが反映されると、送信はできるようになりました。
しかし、gmailサーバーでは、「スパムフォルダ」に入れられてしまい、迷惑メール扱いになってしまいます。
ちゃんと認証しろつったから、書かれているとおりにしたのに、スパム扱いって、どんなやねん!!!
追加対応
次に必要な対応は、sendmail設定です。
今回は、postfixを使っているので、main.cfの設定で以下の内容で登録することで、スパムフォルダに入ることなく送信できるようになりました。
# メールサーバーのホスト名
myhostname = example.com
# ドメイン名
mydomain = example.com
# 差出人のメールアドレスに使用されるドメイン名
myorigin = example.com
# メール受信を許可するアドレス(ローカルから外部への配送のみを許可)
# inet_interfaces = 127.0.0.1
inet_interfaces = localhost
# IPv4 のみを有効にする
inet_protocols = ipv4
# メールサーバー自身に配送されたとみなすドメインのリスト
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# メールのリレー(転送)を許可するネットワーク(ローカルからのメールのみ転送を許可)
mynetworks = 127.0.0.0/8
ちゃんと、ドメイン名を登録してあげないと、不正扱いになるようです。
もちろん、PHP側でも、fromには、同じドメインで送信する必要があるし、mail関数には、-fオプションを付けて上げることで、総仕上げになります。
いや〜、半日かかった・・・、いや、捨てた?、いやいや、勉強になった!!!!
0 件のコメント:
コメントを投稿