• ベストアンサー

phpからのメール送信が文字化け

phpでメールを送信できるようなりましたが、メールは無事に送信されるのですが、OutLookで受信すると文字化けしてしまいます。色々調べたんですがどうも解決できません。 phpのtextエディターはUTF-8設定にして記入しました。メールソフト(OutLook)受信のエンコードは色々試したのですが、文字化けしてしまいます。 どのように文字設定をすると文字化けしないのでしょうか。 「テスト」と言う文字を送信すると「eXg」となり表示されます。 よろしくご指導お願いいたします。 <?php $mailto="*******@yahoo.co.jp"; $mailsbj="テスト"; $mailbody="テスト"; $mailheader="From:*******@***.biglobe.ne.jp\nReply-To:*******@yahoo.co.jp\nX-Mailer:PHP/".phpversion(); mb_language("ja"); mb_internal_encoding("UTF-8"); ?>

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

う~ん、#2で書いたとおりですが・・・ <?php $mailto="*******@yahoo.co.jp"; $mailsbj="テスト"; $mailsbj=mb_convert_encoding($mailsbj,"JIS","EUC-JP,SJIS"); $mailsbj=mb_encode_mimeheader($mailsbj,"JIS"); $mailbody="テスト"; $mailbody=mb_convert_encoding($mailbody,"JIS","EUC-JP,SJIS"); $mailheader="From:*******@***.biglobe.ne.jp\nReply-To:*******@yahoo.co.jp\nX-Mailer:PHP/".phpversion(); mail($mailto,$mailsbj,$mailbody,$mailheader); ?> メールには76文字ルールとかいろいろ制約がありますので、 きちんと調べた方がいいですね。 ちなみにSJISの「テスト」をEUCでみると「eXg」と見える場合 あります

ityounomi
質問者

お礼

ありがとうございました。 あるサイトにmb_send_mailは文字化けの元凶ということが 書いてありました。mb_send_mailを使わないほうが良いのですね! mail関数では、文字化けしないで送信されました。 もっと勉強します。 お世話になりました。ありがとうございました。(^▽^)。。 ここ↓ http://hain.jp/index.php/tech-j/2007/02/13/%EF%BC%B0%EF%BC%A8%EF%BC%B0%E3%81%AE%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

原則にたちかえり、メール本文は7bit-jisで、subjectなどは ISO-2022-JPでエンコードしてください

ityounomi
質問者

お礼

参りました^^。全く文字化け解決できません。 送信されてくるメールのヘッダーを見てみますと、確かにご指摘の ようになっていました。 ------------------------------------------------- メールオプション内の記載されているもの Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit ------------------------------------------------- 送信されてくるメールは、件名、本文とも「テスト」と入力 しているのですが、届くのは「eXg」と文字化けされてます。 mb_language("ja"); mb_internal_encoding("utf-8"); の2行を取り除いても、やはり文字化けしています。 WEB状で色々調べても解決できませんが、この手の問題をすっきり 理解できるPHPの本をご存知でしたら紹介していただけると幸いです。 長時間の格闘はいつものことですが^^。48歳のおじさんでした。 <?php $mailto="*****@yahoo.co.jp"; $mailsbj="テスト"; $mailbody="テスト"; $mailheader="From:****@***.biglobe.ne.jp\nReply-To:****@yahoo.co.jp\nX-Mailer:PHP/".phpversion(); $mailbody=mb_convert_encoding($mailbody,"swe7","utf-8"); $mailsbj=mb_convert_encoding($mailsbj,"ISO-2022-JP","utf-8"); mb_language("ja"); mb_internal_encoding("utf-8"); if(mb_send_mail($mailto,$mailsbj,$mailbody,$mailheader)){ print "成功"; } else{      print "失敗"; } ?>

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.1

送信するメールの中身のエンコードがUTF-8を明示的に指定してないのが原因だと思います。

関連するQ&A