• ベストアンサー

PHPのmailメソッドで件名先頭に*が付く

PHPのメールメソッドで日本語を件名に入れると、件名の先頭に*が付いて送信されてくるのですが、この原因と、付かなくなるようにする方法を教えてください。 メソッドは、以下のようなものです。 よろしくお願いいたします。 mail("xxx@xxx.xxx", "日本語(件名)", "内容", "From: yyy@yyy.yyy")) ;

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

mailメソッドの件名や内容に、多バイト文字を入れてはいけません。 mailメソッドを使う場合は、以下のように、自分でエンコードして、何でエンコードしたのか明示しなければなりません。 mb_internal_encoding("UTF-8"); mail( 'xxx@xxx.xxx', mb_encode_mimeheader('日本語(件名)', 'ISO-2022-JP-MS'), mb_convert_encoding('内容', 'ISO-2022-JP-MS'), "Content-Type: text/html; charset=\"ISO-2022-JP\";\n" ); なお、mb_send_mailを使う場合は mb_language('ja'); mb_internal_encoding("UTF-8"); mb_send_mail('xxx@xxx.xxx', '日本語(件名)', '内容'); のように「直前にオマジナイを入れる必要」があり、オマジナイ無しで mb_send_mail('xxx@xxx.xxx', '日本語(件名)', '内容'); のみだと、内容が文字化けします。

h_mp
質問者

お礼

ご回答ありがとうございます。 ご回答いただいた内容と同じようにmb_send_mailを用いて記述したところ、指定した通りの文字列が送れました。 ありがとうございました。

その他の回答 (2)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3

mail関数を使っているとのことですが、php.iniでmbstring.func_overload は 1以上になっているのでしょうか?そうでなければ(mailが)mb_send_mailをoverloadしないのでキチンとmb_send_mailを使わないとダメです。またmb_languageは何になっていますか('ja'なのか'uni'なのかでcharsetがiso-2022-jpかutf-8かが違ってきます)。 まさかmb_send_mailをoverloadしていない状態で日本語を使っている(メーラが何とかして表示しようとしているだけ)ということはありませんよね。生のメールデータがどうなっているか確認してください。

h_mp
質問者

お礼

ご回答ありがとうございます。 確認させていただきます。 ありがとうございました。

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.1

日本語の入ったメールを送る場合は mb_send_mail() を使うか、ご自身でMIMEエンコード処理した文字列を渡す必要があります。

h_mp
質問者

お礼

ご回答ありがとうございます。 mailメソッドを、mb_send_mailメソッドに変更し、以下の記述を前に追加したところ、指定した通りの文字列が送れました。 ありがとうございました。 mb_language("ja"); mb_internal_encoding("UTF-8");