PHPで日本語のメールを送信する方法を解説します。
mail関数かmb_send_mail関数か
PHPでメールを送信する方法としてmail
とmb_send_mail
の2つの関数があります。
mail
関数は英語などのシングルバイト文字でメールを送信するときに使います。mb_send_mail
関数は日本語などのマルチバイト文字でメールを送信するときに使います。
当ブログの訪問者は98%が日本からなので(Google調べ)、mb_send_mail
関数の使い方だけを解説していきます。
mb_send_mail関数の使い方
mb_send_mail
関数を使う前提として、sendmail
コマンドにパスが通っていて使える状態である必要があります(MacとLinuxの場合)。
使い方のテンプレートは次の通りです。
mb_send_mail(宛先, 件名, 本文, 追加メールヘッダ);
実際の書き方は次の通りです。
//言語と文字エンコーディングの設定
mb_language('Japanese');
mb_internal_encoding('UTF-8');
//mb_send_mail関数に渡す引数
$to = 'to@example.com';
$subject = 'メールの件名';
$message = 'メールの本文';
$headers = 'From: from@example.com' . "\r\n";
$headers .= 'Cc: cc@example.com' . "\r\n";
$headers .= 'Bcc: bcc@example.com';
//メールの送信
if (mb_send_mail($to, $subject, $message, $headers)) {
echo '送信成功';
//エラーの場合
} else {
echo '送信失敗';
}
言語と文字エンコーディングの設定
ここで設定した文字エンコーディングに基づいてメールの件名と本文がエンコードされます。
普通、スクリプトはUTF-8で書いていると思うので、UTF-8を指定しましょう(普通って何?)。
文字エンコーディングはISO-2022-JPか、UTF-8か
大昔、日本語のメールはISO-2022-JPで送りましょうというルールがありました。その時代は他のエンコーディングで送ると文字化けが発生してメールが読めないなんてことが起きていました。
その後、メールヘッダで文字エンコーディングを指定すればどんなエンコーディングでもOKというルールが追加されました。それでも、その新しいルールに対応していない古いメールソフトに配慮してISO-2022-JPで送るのが無難という時代が続きます。
そして今、そろそろUTF-8でもいいのではないかと私は思います。今どきUTF-8が文字化けするようなメールソフトを使ってるヤツはメールを読む資格がありません(暴言)。
ISO-2022-JPでは①のような機種依存文字や❗のような絵文字が使えないのですが、UTF-8ならば使えます。❗はおじさん構文に必須の絵文字です。したがって、UTF-8でメールを送信しましょう。
mb_send_mail関数に渡す引数
宛先、件名、本文、追加メールヘッダを変数に代入しました。
宛先が複数ある場合にはカンマで区切ります。
追加メールヘッダでは最低限、送信者アドレス From:
を設定する必要があります。その他のヘッダは必要に応じて設定します。複数のヘッダを設定する場合は改行コード<CR><LF> (\r\n
)で区切ります。
メールの送信
mb_send_mail
関数はメールの送信に成功した場合にtrue
、失敗した場合にfalse
を返します。
無料で利用できるプログラミング学習サービスをお探しならば Code Lesson はいかがでしょうか。プロのエンジニアが監修した学習ロードマップで効率的に学習、AIに質問、最後にクイズで理解度をチェックできます。
HTMLメールを送信する方法
HTMLメールを送信する場合は次のような書き方になります。
//mb_send_mail関数に渡す引数
$to = 'to@example.com';
$subject = 'メールの件名';
$message = '<html><body><p>メールの本文</p></body></html>';
$headers = 'From: from@example.com' . "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8';
//メールの送信
if (mb_send_mail($to, $subject, $message, $headers)) {
echo '送信成功';
//エラーの場合
} else {
echo '送信失敗';
}
メールヘッダにContent-type: text/html; charset=UTF-8
を追加しています。このメールがHTMLメールで文字エンコーディングはUTF-8だということを表しています。
なお、テキストメールの場合は何も指定しなくてもContent-Type: text/plain; charset=UTF-8
を追加してくれます。
メールの送信ができない場合は
以上の方法でメールを送信しようとしても、宛先に届かないことがあるかもしれません。
自宅のパソコン上に開発環境を構築している場合、家庭向けのインターネット接続サービスを利用していますよね。その場合、あなたが利用しているISPはOP25B(Outbound Port 25 Blocking)という迷惑メール対策を実施しています。あなたのコンピュータから直接メールを送信できないようにする仕組みです。
こればかりはどうしようもありません。本当はダメなのですが、メール送信のテストだけは本番環境でやりましょう。もちろん、本番環境と同等の開発環境が用意できるのならそうしてくださいね。
でわでわ
無料で利用できるプログラミング学習サービスをお探しならば Code Lesson はいかがでしょうか。プロのエンジニアが監修した学習ロードマップで効率的に学習、AIに質問、最後にクイズで理解度をチェックできます。
コメント