PHPのmb_send_mail()関数で送信したメールが文字化けする際の対処法

2007年10月10日 23:59 PHPのmb_send_mail()関数で送信したメールが文字化けする際の対処法

PHPというのは非常に便利なスクリプト言語で、perlなんかと比べても非常にコーディングか楽チンです。

例えば、sendmailを利用してサーバーからメールを送信する、なんて処理も、perlだったら大体以下のような処理するコードを順番に書いてやる必要があります。

  1. メールヘッダを文字列として定義する
  2. メール本文を文字列して定義する
  3. メールヘッダとメール本文の文字コードをJISに変換する
  4. sendmailのパイプを開く
  5. sendmailに文字コード変換したメールヘッダとメール本文を渡す

でも、PHPならこれらの処理をmb_send_mailという関数ひとつでやっちゃえるわけです。
(勿論、perlでも何らかのライブラリなりモジュールを使えば関数一つでやっちゃえますが)

具体的には、以下のような感じですね。

// 件名
$subject = '主人じゃ…満足できなくて!!';
// 本文
$mailbody = 'おいしそうな人妻がイッパイで攻略の価値大';
// メール送信
mb_send_mail("test@abe-tatsuya.com",$subject,$mailbody);

test@abe-tatsuya.com」の部分が宛先メールアドレス。
$subject」の部分が件名。
$mailbody」の部分が本文。
ちなみに、件名と本文は、ちょうど今届いたSPAMメールをそのままコピーしました(笑)。

まあとにかく、こんな感じで非常にシンプルで簡単な関数があるわけなんですが、意外とこの関数を使ってメールを送信した際に、文字化けするケースが多いです。

原因は、PHPのスクリプトを書いている文字コードと、そのPHPスクリプトを動作させるサーバーのデフォルトの文字コード設定の相違にあることがほとんどだと思います。

解決方法としては、

  1. 件名や本文等の文字コードを事前に変換しておいてから、mb_send_mail関数を使う
  2. PHPスクリプト内のデフォルトの文字コード設定を変える

というあたりが手っ取り早いでしょうか。
サーバーの設定を変えることが可能で、変えても他のWebアプリケーションなどに影響がないのであれば、そちらを変えちゃう方が手っ取り早いかもしれませんが……。

とりあえず、1番目の「件名や本文等の文字コードを事前に変換しておいてから、mb_send_mail関数を使う」場合は、以下のような感じになります。

// 件名
$subject = '初めて浮気しました・・・';
// 本文
$mailbody = '話題の新サイト、こっそり教えちゃいます!!';

// 件名をJISに変換
$subject = mb_convert_encoding($subject,"JIS");
// 本文をJISに変換
$mailbody = mb_convert_encoding($mailbody,"JIS");

// メール送信
mb_send_mail("test@abe-tatsuya.com",$subject,$mailbody);

ちなみに、件名と本文は今届いたSPAMを(ry

そして二番目、「PHPスクリプト内のデフォルトの文字コード設定を変える」の方。
こっちの方が楽だし、スクリプトも短くて済みます。

// カレントの言語を日本語に設定する
mb_language("ja");
// 内部文字エンコードを設定する
mb_internal_encoding("UTF-8");

// 件名
$subject = '週末とか逢えませんか?';
// 本文
$mailbody = 'これ見て貰えれば1時間だけでも時間作ってもらえますか?';

// メール送信
mb_send_mail("test@abe-tatsuya.com",$subject,$mailbody);

ちなみに、件名と本文は(ry

「mb_internal_encoding("UTF-8");」の部分は、UTF-8で書いたPHPスクリプトの場合です。

eucで書いたPHPスクリプトなら、下記のようになります。

mb_internal_encoding("EUC-JP");

で、SHIFT_JISで書いたPHPスクリプトなら、下記のようになります。

mb_internal_encoding("SJIS");

mb_internal_encoding関数は、場合にもよりますが、mb_send_mail関数を使う直前に毎回入れるよりも、スクリプトの最初の方で事前に使って、あらかじめ設定しておいた方が、後々のメンテとかが楽になりますね。

Twitterつぶやく
阿部辰也へのお仕事のご依頼・お問合せはこちら

Twitter始めました。Followはお気軽にどうぞ。

関連するブログ記事
スポンサード リンク
カテゴリー
PHP
タグ
mb_convert_encoding | mb_internal_encoding | mb_language | mb_send_mail | PHP | sendmail | 文字化け
現在位置
TOP > Web制作技術 > PHP > PHPのmb_send_mail()関数で送信したメールが文字化けする際の対処法
前のブログ記事
「緑の森で眠ル鳥」 - 志方あきこ [2007年10月 9日 20:06]
次のブログ記事
perlやPHPでファイルのダウンロード確認ダイアログを表示させる方法 [2007年10月11日 01:17]

トラックバック(1)

このブログ記事に対するトラックバックURL:
» parajumpers-billig.bikeshopchicago.com(parajumpers-billig.bikeshopchicago.com)のトラックバック [2014年1月 3日 00:06]
PHPのmb_send_mail()関数で送信したメールが文字化けする際の対処法 | PHP | 阿部辰也のブログ――人生はひまつぶし。 続きを読む

コメント(15)

じゅん [2009年2月20日 12:06]

参考になりました。早速記入直してみますね(´∀`)

[2009年2月27日 18:23]

存在自体がガンのエンジニアのブログでつね。。。

Tatsuya [2009年3月 4日 21:12]

> じゅんさん
お役に立てましたら幸いです~。

> ちさん
もしかしたら、SPAMメール業者だと思われてしまったんでしょうか……。
そういう意味でなかったらすいません。

チャーリー [2013年6月13日 17:55]

参考にさせていただきメールを送れるようになりました

ありがとうございます

実はもう一点困っているのですが
メール送信時にメールの本文の内容をフォームで入力できるようにしたいのですがどうすればいいのでしょうか?
ど素人なものですいません
お助けください

MacdonaldGretchen32 [2013年12月 3日 03:05]

Make your life more easy take the loan and all you want.

falls [2014年5月 6日 21:49]

Hello!

cheap [2014年5月10日 08:38]

Hello!

cialis [2014年5月10日 08:39]

Hello!

here [2014年5月10日 08:39]

Hello!

generic [2014年5月14日 15:37]

Hello!

generic [2014年5月14日 15:37]

Hello!

of [2014年5月14日 15:38]

Hello!

fast [2015年4月 2日 06:57]

Hello!

canadian_viagra [2015年4月 2日 06:58]

Hello!

コメントする


画像の中に見える文字を入力してください。

 

このブログについて

阿部辰也

Webコンサルタントやシステムエンジニア、執筆業などをやっている、グッドホープ代表・阿部辰也のブログです。
Web技術系のTipsから仕事の話、趣味の話まで色々と。
人生は所詮生まれてから死ぬまでの壮大な暇つぶし。
だったら有意義に暇をつぶして生きましょー。

阿部辰也へのお仕事のご依頼・問合せはこちらからどうぞ。

Twitter: @t_abe
読書メーター: ID:Tatsuya

このブログのサイトマップ
このブログのはてなブックマーク数

Feed/RSS購読

タグクラウド

最近のトラックバック

阿部辰也の著書

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

頑張って書いたのに、出版後すぐに出版社が倒産して印税も貰えずじまいで俺涙目(笑)。

Powered by Movable Type 5.02

スポンサード リンク

はてなブックマーク



あわせて読みたい

t-abeの今読んでる本

t-abeの最近読んだ本

t-abeの今やってるゲーム

t-abeの最近やったゲーム