• ベストアンサー

【PHP】メール受信時の文字化けについて

フリーのメーリングリスト http://www.k-sky.biz/ を使用しています。 phpファイルをサーバにアップロードし メールを送信し受信しましたが、 テスト送信と送ったところ、 文字化けして、 ?e?X?g???M と受信されました。 説明書どおり設定したのですが、 何度やっても文字化けします。 開発者様に問い合わせたのですが、 連絡がありません。 メール受信時の文字化けについて、 どのようなことが考えられますか? 素人で分かりづらい文章で大変すみませんが、 よろしくお願いします。

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

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

原因が判明しました。 【解決方法】 ・config.inc.phpを開く ・2行目あたりから以下のスクリプトを挿入 //----------------------------------------- mb_language('ja'); mb_internal_encoding('SJIS'); //----------------------------------------- ・サーバに上書きでアップロードする 以上です。 それ以外は変更の必要がなさそうです。 原因としては、mb_encode_mimeheader関数という、文字列をメールのMIMEヘッダで使用できる書式に変換する関数があるのですが、 それが上記の二行(特にmb_internal_encoding)に依存するため、正しく設定しないと文字化けする現象が起こります。 私も実際にスクリプトの動作を試してみました(さくらインターネットです) 余談ですが、質問者さんのご利用されているスクリプトは難読処理がかかっており、実際にバグがあった場合に作者様以外まったく触ることが出来ません。 タイミングを見て、別のスクリプトも探しておいたほうがいいかもしれません・・・

jaikoz
質問者

補足

hogehoge78さん 送信成功しました。 困っていたので、とてもうれしいです。 hogehoge78さんが大変ご親切な方で とても感謝しています。 色々と丁寧に教えてくださり ありがとうございましたm(__)m

その他の回答 (2)

回答No.2

該当するアプリケーションをダウンロードし、内容を見てみました。 ファイルは全て文字コードがSJISでエンコードされておりますが、 「ページに貼り付けるタグ例.txt」内のタグを貼り付けたHTMLないしは、PHP等のスクリプトはSJISになっておりますでしょうか。 文字コードがEUCで書かれているHTMLに貼り付けた場合、yamabejpさんのおっしゃっているように、「SJISとEUCのコンバートをしている」状態となり、文字化けすると思います。 質問者さんの使用されているHTMLの文字コードを変更するのが難しい場合は、メーリングリストのPHPファイル等該当するもの全てEUCに変える必要があります。 ただしその場合も、スクリプト中に記述されているmetaタグのcharset部分なども記述を直さなければならないので面倒が発生します。 また、アプリケーションの一部は暗号化がかかっているようなので、暗号化がかかっている部分でSJISの使用が前提となっている場合も修正が困難と思います。

jaikoz
質問者

補足

hogehoge78さん ご丁寧に色々とありがとうございます。 感謝しています。 ページに貼り付けるタグを貼り付けたページ (サイト内全体ドリームウィーバーで作成)の文字コードは、 <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" /> です。 HTMLファイル内に貼ったタグから、 アドレスも通常に登録されます。 ブラウザー上で http://www.○○.jp/php/admin.php 管理画面も表示され、 http://www.○○.jp/php/admin.php?do=email& でメール送信もできます。 http://www.○○.jp/php/admin.php?do=archive& 送信履歴には、日本語の文字表示で送信成功 とあります。 どの辺りで、JISとEUCのコンバートをしている状態 になっていますでしょうか? 素人の勝手な解釈でおかしな文章になっていて、 分かりづらいと思いますが、 よろしくお願いします。

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

それはSJISとEUCのコンバートをしているように見えますね。 phpファイルのどこかで文字列を変更する仕組みが抜けているか 間違った設定になっているように想像できます。 実際、メールを送るのであればSubjectはJISコンバートして MIMEにするし、本文も7bitJISにした方が、メーラー側の 設定を気にせずに文書が書けます。 (ただ、制限もそれなりにありますが・・・)

jaikoz
質問者

補足

yambejp様 ご回答ありがとうございます。 config.inc.phpというファイルに、 下記のことが書かれていましたが、 こちらが関係していますでしょうか? $cfg['headers'][] = 'Mime-Version: 1.0'; //送信メールのヘッダー共通 $cfg['headers'][] = 'Content-Transfer-Encoding: 7bit'; //送信メールのヘッダー共通 $cfg['header_html'] = 'Content-type: text/html; charset=ISO-2022-JP'; //送信メールのヘッダー(htmlメールの場合) $cfg['header_plain'] = 'Content-type: text/plain; charset=ISO-2022-JP'; //送信メールのヘッダー(テキストメールの場合) お忙しいところすみません。 よろしくお願いします。

関連するQ&A

専門家に質問してみよう