メール文が途中で切れてしまった
mail関数を利用してメールを送信しようとしたところ、メール文章が途中からさっぱり切れてしまいました。
携帯の文字制限とかではありません。
入力画面はUTF-8で送信時にISO-2022-JP変換を行っています。
上記のミスは外字対策を施していなかった事です。 その為、変換部分の前に
上記の処理により、メールが途切れず送信できるようになりました。
$oldenc = mb_detect_encoding($mes,"auto,utf-8"); $str = mb_convert_encoding($mes,"ISO-2022-JP",$oldenc); $oldenc = mb_detect_encoding($subject,"auto,utf-8"); $subject = mb_convert_encoding($subject,"ISO-2022-JP",$oldenc); //登録者用のメールフォーム $headers = "MIME-Version: 1.0\n"; $headers .= "Content-type: text/plain; charset=$enc\n"; $headers .= "X-Priority: 3\n"; $headers .= "X-MSMail-Priority: Normal\n"; $headers .= "X-Mailer: php\n"; $headers .= "From: $from\n"; $headers .= "Subject:=?$enc?B?".base64_encode($subject). "?=\n"; mail($to,"=?$enc?B?".base64_encode($subject). "?=\n",$str,$headers);流れは上記のような感じでした。 問題はutf-8からISO-2022-JP変換を行う際に外字が発生していたという事です。 外字の部分から以降がmail関数で送信するときれいさっぱりなくなっていました。
上記のミスは外字対策を施していなかった事です。 その為、変換部分の前に
mb_substitute_character("long");
を設置しました。この関数は、文字コードが存在しない場合の代替文字を指定します。
引数は代替文字を設定しています。"long"で文字コードの値を出力しています。
ここでマップを作ってやって替えの文字まで用意してやればなお親切でしょう。上記の処理により、メールが途切れず送信できるようになりました。
2008年 12月 19日ドキュメント作成
2008年 12月 23日ドキュメント更新