Words in the WWW

ウェブユーザーの登録メールが文字化け

ウェブ上でユーザー登録をさせる為にWebloginスニペットを利用しますが、その登録確認のメールが文字化けしてしまいます。

※メーラーによって文字化けしない場合もあります。

これは、MODxから送られるメールがUTF-8で送られていて、それに対し、日本語のメーラーが対応していない場合がある為に起こります。

そこで、日本語メールで標準的な“ISO-2022-JP”で送信できるように改良します。

変更するファイルは assets/snippets/weblogin/weblogin.common.inc.php ファイルです。

43行目あたりに「function webLoginSendNewPassword($email,$uid,$pwd,$ufn)」というコードブロックがあると思います。
ここが、メール送信しているファンクション関数です。

変更前:

if(!mail($email, $emailsubject, $message, “From: “.$emailsender.”\r\n”.”X-Mailer: Content Manager - PHP/”.phpversion())) {
    return webLoginAlert(”Error while sending mail to $mailto”,1);
}

変更後:

mb_language(”ja”);
if(!mb_send_mail($email, $emailsubject, $message, “From: “.$emailsender.”\r\n”.”X-Mailer: Content Manager - PHP/”.phpversion())) {
    return webLoginAlert(”Error while sending mail to $mailto”,1);
}

まず、変更前にmail()でメール送信していたものをmb_send_mail()に変更します。
これは、mail()関数がマルチバイトのメール送信をサポートしていないので、必ず変更しておきます。
(mail()関数のまま、やる方法もある事はあるけど、mb_send_mail()を使った方がスマートじゃないかなぁ)

それから、mb_send_mail()関数の前に、mb_language()関数でエンコード設定を日本語の“ja”に設定します。
設定値は、“ja”または、“Japanese”が使用できます。

本来ならば、mb_language()関数に設定する値も、マネージャからの設定とかで反映できればもっとスマートなのでしょうが、使えそうな設定がありません。

一つ、「マネージャの言語コード」という設定に“ja”を設定しているところがあり、これを使ってもとりあえず問題はないでしょうが、「マネージャの言語設定」に基づいて「ユーザーのメール」を送信するのはどうかと思うので、今回は、スニペットにハードコーディングです。

という事で、この改造は、日本語向けなので、その他のマルチバイト環境の方は、この部分をそれぞれの環境に合わせて変更してみてください。 

ページは“UTF-8”または“EUC-JP”、メールは“ISO-2022-JP”という日本の複雑なウェブ言語環境もどうにかならないかと・・
(“SJIS”も忘れてはいけない)