実は難しいメール送信
メールを送信しても、本当にそのメールが届いているかは気になるところ。
PHPやフレームワークで用意された関数でメールを送信しただけの場合、スパムや迷惑メール判定されてしまい届いてない可能性があります。
送信するメールに送信元の情報をしっかり指定することで、メール自体の信頼性を上げて相手に届ける可能性も高くすることができます。
今回はmb_send_mail関数を使って送信元の設定を行いますが、他の関数でもヘッダー情報の指定方法は共通です。
ヘッダー情報の指定
mb_send_mail関数では、次のようにパラメータを指定することができます。
mb_send_mail関数の基本的な使用例
mb_send_mail( $to, $subject, $text, $header, $parameter);
ヘッダー情報を詳しく指定するには4つ目の「$header」に値を設定します。
PHP コード例
<?php
//言語と文字コードの使用宣言
mb_language("ja");
mb_internal_encoding("UTF-8");
// 宛先
$to = "yamadataro@gray-code.com";
// 件名
$subject = "メールの送信テスト";
// 本文
$text = "こんにちは。
こちらはテストメールです。";
// 送信元
$from = "GRAYCODE事務局 <noreply@gray-code.com>";
// 送信元メールアドレス
$from_mail = "noreply@gray-code.com";
// 送信者名
$from_name = "GRAYCODE事務局";
// 送信者情報の設定
$header = '';
$header .= "Content-Type: text/plain \r\n";
$header .= "Return-Path: " . $from_mail . " \r\n";
$header .= "From: " . $from ." \r\n";
$header .= "Sender: " . $from ." \r\n";
$header .= "Reply-To: " . $from_mail . " \r\n";
$header .= "Organization: " . $from_name . " \r\n";
$header .= "X-Sender: " . $from_mail . " \r\n";
$header .= "X-Priority: 3 \r\n";
//メール送信
$response = mb_send_mail( $to, $subject, $text, $header);
「// 送信者情報の設定」から下の部分で、$headerへ送信元情報を指定します。
指定できる値はたくさんありますが、代表的なものをいくつかご紹介します。
- Content-Type - メール形式
- Return-Path - 送信先メールアドレスが受け取り不可の場合に、エラー通知のいくメールアドレス
- From - 送信者の名前(または組織名)とメールアドレス
- Sender - 送信者の名前(または組織名)とメールアドレス
- Reply-To - 受け取った人に表示される返信の宛先
- Organization - 送信者名(または組織名)
- X-Sender - 送信者のメールアドレス
- X-Priority - メールの重要度を表す
特に最後の2つの「X」がつくものは一部のメーラーのみが参照する情報なので、全てのメーラーが重視している情報ではありません。
これらの送信者情報を指定してからメールを送信すると、受け取ったメーラーは誰から受け取ったメールかを正しく判断できるようになります。
注意したいのは、ヘッダーで指定したドメインとは全く別のドメインからメールが送る場合です。
例えば、送信者のメールアドレスを「noreply@gray-code.com」と指定し、そのメールを「https://blue-code.com」というドメインで運用されたサイトから送信するとします。
すると、「gray-code.com」と「blue-code.com」は一致しないため、送信元を偽装した不正なメールと判断されてしまう可能性があります。
そのため、メールを送信する場合は運用サイト(システム)のドメインと送信者で指定したドメインが一致するようにしましょう。
以上、送信メールをスパムメール(迷惑メール)判定されないための設定方法でした。
もし送ったメールが相手に届いていない可能性がある場合は、ぜひヘッダー情報の設定を試してみてください。