記事一覧
フォームのメールは mail() と SMTP のどちらで送るか Google Workspace を使っている時の注意
フォームのメールは mail() と SMTP のどちらで送るか Google Workspace を使っている時の注意
お問い合わせフォームのメールを、PHP の
Google Workspace でメールを運用している場合に
mail() で送るか SMTP で送るかで、メールを送り出すサーバーが変わります(Linux の場合)。Google Workspace でメールを運用している場合に
mail() で送ると、通知が迷惑メールに入ったり、自社のアドレスに届かなかったりすることがあります。目次
フォームのメールの2つの送り方
フォーム
PHP のプログラム
入力した内容をメールにする
mail() か SMTP で送る
送り出すサーバー
mail() の場合
ホームページのサーバー
SMTP の場合
ホームページ以外のサーバーも選べる
相手の受信サーバーに届ける(SMTP)
受信側
受信サーバー
SPF/DKIM/DMARC で、差出人のドメインから届いたかを確かめる
mail() とは
mail() は、PHP でメールを送る関数です。送ったメールは、ホームページのサーバーの中の、メールを送り出すソフト(sendmail など)に渡り、そのサーバーが送信します(Linux の場合)。
mb_send_mail() も同じ送り方で、WordPress の wp_mail() も、初期設定ではこの送り方です。SMTP で送るとは
SMTP で送る場合は、PHPMailer などのライブラリや、WordPress の SMTP のプラグインを使い、Google Workspace やサーバー会社のメールサーバーにログインして送ります。
メールソフトから送る時と同じ送り方です(会社のメールの仕組みの記事)。
メールは、ログインしたメールサーバーが送信します。
メールソフトから送る時と同じ送り方です(会社のメールの仕組みの記事)。
メールは、ログインしたメールサーバーが送信します。
どちらで送るか
送り方は、普段のメールをどこで運用しているかで選びます。
普段のメールと同じサーバーから送信すると、同じ SPF/DKIM で通ります。
普段のメールと同じサーバーから送信すると、同じ SPF/DKIM で通ります。
- mail() で送る
- メールも、ホームページと同じサーバーで運用している場合に向いています。
-fを付けて送ります。 - SMTP で送る
- メールを Google Workspace などで運用している場合に向いています。
mail() で送る時に注意すること
Google Workspace でメールを運用している場合、普段のメールは Google のサーバーが送信します。
mail() で送ると、ホームページのサーバーが送信するので、次の2つのことが起きる場合があります。SPF/DKIM/DMARC が通らないことがある
mail() で送ったメールは Google のサーバーを経由しないので、Google Workspace に合わせた SPF/DKIM(会社のメールの仕組みの記事)が通らず、DMARC も通りません。そのため、迷惑メールに入ることがあります。
通るようにするには、ドメインとサーバーの設定で、次の2つを確かめます。
- SPF に、ホームページのサーバーが入っているか
- ホームページのサーバーで DKIM の署名を有効にし、公開鍵を DNS に登録してあるか(DKIM に対応しているサーバーの場合)
合わせて、フォームから送るメールのエンベロープの送信元と From を、どちらも自社のドメインのアドレスにします。
エンベロープの送信元(Envelope From)は、直訳すると「封筒の差出人」、意訳すると「サーバー同士の受け渡しに使う差出人」です。
この差出人のアドレスは、届いたメールのヘッダーの Return-Path に書いてあります。
受信サーバーは、このアドレスのドメインで SPF を確かめます。
WordPress の
次の例では、
この差出人のアドレスは、届いたメールのヘッダーの Return-Path に書いてあります。
受信サーバーは、このアドレスのドメインで SPF を確かめます。
mail() の初期設定では、user@sv123.example.net のようなサーバーのアドレスになることがあるので、-f で自社のドメインのアドレスにします。WordPress の
wp_mail() の場合は、phpmailer_init で $phpmailer->Sender を指定すると、-f と同じになります。次の例では、
-f の後ろの info@example.co.jp が、エンベロープの送信元になります。PHP の例
mail($to, $subject, $body, $headers, '-f info@example.co.jp');
社内向けの通知が届かないことがある
MX レコードを Google Workspace など別のサーバーに向けていても、その通りに届かないことがあります。
条件は、次の2つが重なることです。
条件は、次の2つが重なることです。
- ホームページのサーバーでも、自社のドメインのメールが使える状態になっている(ドメインを追加すると、自動でこの状態になるサーバーもあります)
- お問い合わせの通知を、ホームページのサーバーから送っている(
mail()で送る時など)
この時、社内向けの通知メールは、MX を見ずにホームページのサーバーの中の受信箱に入り、Google Workspace に届きません(受信箱が無い時は、エラーで戻ります)。
フォームの画面にはエラーが出ず、自社のドメイン以外のアドレスへの自動返信は届くので、原因に気付きにくいです。
直す時は、ホームページのサーバーの管理画面で、自社のドメイン宛てのメールを、MX の通りに外へ送る設定にします(設定方法はサーバーによります)。
フォームの画面にはエラーが出ず、自社のドメイン以外のアドレスへの自動返信は届くので、原因に気付きにくいです。
直す時は、ホームページのサーバーの管理画面で、自社のドメイン宛てのメールを、MX の通りに外へ送る設定にします(設定方法はサーバーによります)。
送ったメールを確かめる
mail() と SMTP のどちらで送る時も、次の手順で確かめます。-
フォームから送り、Gmail で受け取るメールアドレスの欄に自分の Gmail のアドレスを入れてフォームを送信し、自動返信を Gmail で受け取ります。
-
自動返信メールのソースを見るGmail で「メッセージのソースを表示」を開き、SPF/DKIM/DMARC が「PASS」になっているかを見ます。
DMARC の行は、ドメインに DMARC を設定している時だけ出ます。 -
Return-Path のアドレスを見る(mail() の場合)Return-Path が自社のドメインのアドレス(info@example.co.jp など)かを見ます。
サーバーのアドレス(user@sv123.example.net など)なら、-fが効いていません。 -
社内向けの通知が届くかを見る自社のアドレス(info@example.co.jp など)の受信箱に、通知が届いているかを見ます。
Gmail には届くのに、自社のアドレスにだけ届かない時は、ホームページのサーバーが、そのメールを中で受け取っている場合があります(社内向けの通知が届かないことがある)。
よくある質問
SMTP で送る時に、注意することはありますか?
SMTP の場合は、メールサーバーにログインして送るので、ログインに使うパスワードを変えた時は、フォームの設定も書き換えます。
フォームのメールの From は、どうすれば良いですか?
From(差出人)は、自社のドメインのアドレス(info@example.co.jp など)にします。
SMTP で送る場合は、メールサーバーにログインする時のメールアドレスを、そのまま From にします。
mail() の場合は、存在しないアドレスも From に出来ますが、返信やエラーのメールが届かないので、受け取れるアドレスにします。SMTP で送る場合は、メールサーバーにログインする時のメールアドレスを、そのまま From にします。
まとめ
フォームを公開する前に、次の3つを確かめておくと安心です。
- フォームのメールを
mail()と SMTP のどちらで送っているか - 送ったメールで、SPF/DKIM/DMARC が PASS になっているか
- 社内向けの通知メールが届いているか
IMG-flowで働くという選択
この記事を書いているIMG-flowは、大阪のWeb制作会社です。
どんな人と、どんな進め方で仕事をしているのかは、採用ページにまとめています。
クリエイター採用を見る
どんな人と、どんな進め方で仕事をしているのかは、採用ページにまとめています。
この記事は参考になりましたか?
ご回答ありがとうございました