PHPでメール送信のプログラムを作成した際に、日本語による文字化けに悩まされることが多々ありますね。
文字化けの原因は、日本語のエンコード処理を適切に行なっていないためです。
これから紹介するサンプルを参考にしていただければ、拍子抜けするほど簡単に文字化けしないメール送信プログラムが作成できるでしょう。
ちなみに、windowsでのローカル環境でテストすると、送信先のプロバイダーによっては迷惑メール扱いとなり、送信できないことがあります。レンタルサーバー等の環境でテストすることをお勧めします。
目次
日本語のメール送信は「mb_send_mail」関数を使う
PHPでのメール送信用の関数はmail
とmb_send_mail
がありますが、2バイト文字圏である日本語の場合、後者を使うようにしましょう。
mail
はアルファベット等の1バイト文字用のため、文字化けの原因となります。
以下サンプルコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 1.言語、文字コードを指定 mb_language("Ja"); mb_internal_encoding("UTF-8"); // 送信先、件名、本文を変数に格納 $mailto = "example001@yahoo.co.jp"; $subject = "PHPでのメール送信について"; $content = "こんにちは。"; // 2.差出人を日本語表示 $mailfrom="From:" .mb_encode_mimeheader("富良斗 太郎") ."<example@example.com>"; // 3.上記(送信先、件名、本文、差出人)を日本語でメール送信実行 mb_send_mail($mailto, $subject, $content, $mailfrom); echo '送信完了!'; |
以下で詳しく解説していきます。
1.言語や文字コードを指定し文字化けを防ぐ
まず、日本語での文字化けを防ぐために、言語と文字コードを指定します。
mb_language
で言語を、mb_internal_encoding
で文字コードをそれぞれ指定しています。
php.ini
で既に指定している場合は不要ですが、文字化けしてしまう場合は設定しましょう。
2.差出人名が日本語の場合、別途関数を用いる
差出人名の日本語が文字化けしてしまう場合は、上記サンプルコードのようにmb_encode_mimeheader
を用いることで解消します。
上記サンプルコードだと、メールヘッダーは以下のように表示されます。
From:富良斗 太郎<example@example.com>
※「mb_send_mail」で差出人(オプション)を設定する場合、「From:」ヘッダを追加しないと差出人が指定したとおりに表示されません。
3.日本語でメール送信を実行する関数
mb_send_mail
に送信先、件名、本文、差出人を設定します。
以下の引数からなっています。
mb_send_mail(送信先, 件名, 本文, オプション(From、Cc、Bccなど))
番外.UTF-8の場合、「BOMなし」で保存すること
上記サンプルでは文字コードがUTF-8でエンコードされていますが、UTF-8を保存する際に「BOMあり」と「BOMなし」の2タイプの保存方法があります。
「BOMあり」にしてしまうと、このコードはUTF8だよ!というバイナリデータが付加されて保存されてしまうため、文字化けの原因になります。
たいていのテキストエディタは「BOMなし」がデフォルトになっていますが、稀に「BOMあり」がデフォルトのエディタもあるため、保存時は注意しましょう。
PHPによる日本語でのメール送信まとめ
mb_send_mail
を用いる。mb_language
とmb_internal_encording
で言語と文字コードをあらかじめ設定する。- 差出人を日本語表記させる場合は
mb_encode_mimeheader
を使い、From:ヘッダ
を必ず設定する。
メールフォームの送信にも応用できますね。