PHPでメールを日本語で送信する簡単な方法(mb_send_mail)

  • このエントリーをはてなブックマークに追加
  • Pocket

スポンサードリンク

php mb_send_mail

PHPでメール送信のプログラムを作成した際に、日本語による文字化けに悩まされることが多々ありますね。

文字化けの原因は、日本語のエンコード処理を適切に行なっていないためです。

これから紹介するサンプルを参考にしていただければ、拍子抜けするほど簡単に文字化けしないメール送信プログラムが作成できるでしょう。

 

ちなみに、windowsでのローカル環境でテストすると、送信先のプロバイダーによっては迷惑メール扱いとなり、送信できないことがあります。レンタルサーバー等の環境でテストすることをお勧めします。

 

日本語のメール送信は「mb_send_mail」関数を使う

PHPでのメール送信用の関数はmailmb_send_mailがありますが、2バイト文字圏である日本語の場合、後者を使うようにしましょう。

mailはアルファベット等の1バイト文字用のため、文字化けの原因となります。

以下サンプルコードです。

以下で詳しく解説していきます。

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による日本語でのメール送信まとめ

  1. mb_send_mailを用いる。
  2. mb_languagemb_internal_encordingで言語と文字コードをあらかじめ設定する。
  3. 差出人を日本語表記させる場合はmb_encode_mimeheaderを使い、From:ヘッダを必ず設定する。

 

メールフォームの送信にも応用できますね。

スポンサードリンク

  • このエントリーをはてなブックマークに追加
  • Pocket

コメントを残す

*