このエントリーをはてなブックマークに追加 Twitterでツイート 余計なことをしてましたか。。。

phpでメールを送信する際に、

@mb_language("ja");
@mb_internal_encoding("SJIS");
$send = @mb_send_mail($email,
    mb_convert_encoding($subject, "ISO-2022-JP", "SJIS"),
    mb_convert_encoding(mb_ereg_replace("\r", "", $mailtext), "ISO-2022-JP", "SJIS"),
    $headers);

こんな感じで書いてました。
ほとんどのケースでは問題ないのですが、サブジェクトがある程度長くなると、一部のメーラーでは文字化けが発生する場合があります。原因は、2バイトの文字コードが分断されて別々にエンコーディングされてしまうためでした。

Webなどを調べ確認していくと、mb_convert_encoding関数を使う必要がないことが判明。コードを次のように変更すると、Gmailなどでも文字化けしないようになりました。

@mb_language("ja");
@mb_internal_encoding("SJIS");
$send = @mb_send_mail($email,
    $subject,
    mb_ereg_replace("\r", "", $mailtext),
    $headers);

もともとmail関数でゴリゴリ書いたコードを流用し、安易にmb_send_mail関数に置き換えたのがよくなかったようです。

ちょっと反省。

投稿日:2008年8月14日
  • ※コメントは、スパム対策などのためIPアドレスにて制限しております。
  • ※誹謗や中傷、スパムなど、不適切な内容は公開いたしません。ご了承ください。