- ベストアンサー
phpフォームで携帯へメール送信した場合の文字化け
過去のよく似た事象を検索しましたが解決しなかったので 質問します。よろしくお願いします。 携帯電話のメールアドレスに送信するWEBフォームをphpで 作成したいのですが、文字化けが直らずに困っています。 コードは次のような感じです。 PCへのメールは文字化けせず、DoCoMoへ送るとsubjectは正常で本文が化けます。 またauとvodafoneへ送るとすべて化けます。 $to = "$_REQUEST['$email']"; $from = "info@aaa.bbb"; $subject = "テスト送信"; $message = "テストメールです" . $headers ='From: '. $from . "\r\n" .'MIME-Version: 1.0' . "\r\n" .'Content-Type: text/plain; charset=iso-2022-jp' . "\r\n" .'Content-Transfer-Encoding:7bit' . "\r\n" .'X-Mailer: PHP/' . phpversion(); if(mail($to, $subject, $message, $headers)==TRUE) print("メールを送信しました"); else print("メール送信に失敗しました"); 動作環境はSunOS5.7、Apache2.0、php5.0.3です。 コードはEUCで書いています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
マイムは文字長制限もあるのでいかのように 処理するとよいでしょう。 function conv_auto_mime($str){ $pos = 0; $str=mb_convert_encoding($str,"JIS","EUC-JP"); while ($pos < mb_strlen($str, "JIS")){ $output = mb_strimwidth($str,$pos,36,"","JIS"); $pos += mb_strlen($output, "JIS"); $TempStr .=(($TempStr)?" ":"")."=?ISO-2022-JP?B?".base64_encode($output)."?="; } return $TempStr; } $subject = "テスト送信"; $subject =conv_auto_mime($subject); bodyはたんにコンバートすればよいでしょう $message=mb_convert_encoding($message, 'JIS','EUC-JP');
その他の回答 (2)
- taketan_mydns_jp
- ベストアンサー率58% (450/773)
mb_send_mail関数も試してみましたか? mail関連は文字コード変換でつまづく事が多いですね。 添付ファイルがあったりすると特に。。。。
補足
試してみましたが、mb_send_mailを使うとPCでも駄目になってしまいます。 サーバー側の設定でしょうか。
- yambejp
- ベストアンサー率51% (3827/7415)
mailコマンドはマルチバイトをエンコードしてくれる わけではありません。うけとった側が運良く 送り元の勝手に設定した文字エンコードを解釈 してくれれば、文字化けしないこともあるでしょうけど 基本的にはsubjectはマイムで、bodyは7bit jisで エンコードしてやるのがルールです。 メールの基本をよく学習なさった上で運用なさることを お勧めします。
補足
ありがとうございます。 $subject = mb_convert_encoding($subject, "JIS", "auto"); $subject = base64_encode($xSubject); $subject = "=?iso-2022-jp?B?".$xSubject."?="; こんな感じでしょうか? 結果は化け方が変わっただけで駄目でした。
お礼
コードまで書いて頂きありがとうございます。 試したところ、3キャリアにおいて題名・本文ともうまくいきました。 本文のところは $message=mb_convert_encoding($message, 'JIS','auto'); としていたのでうまくいきませんでした。'auto'ではダメなんですね。 ともあれyambejpさんのコードで一発解決できました。 本当にありがとうございました。