Joomla!を解剖せよ!~メールの文字化け~
Joomla!の日本語化を進める上で、主催者からJoomla! 1.5での不備を色々聞いていた。
まだベータ版なので、機能が不完全であるのは否めないところなんですがね。何せ複雑なシステムです。ちょっとやそっとPHPやプログラム習ったからと言って、全体像をつかむのは並大抵のことではありません。今回のお話は問い合わせフォームについてです。
まだベータ版なので、機能が不完全であるのは否めないところなんですがね。何せ複雑なシステムです。ちょっとやそっとPHPやプログラム習ったからと言って、全体像をつかむのは並大抵のことではありません。今回のお話は問い合わせフォームについてです。
HOMEからCONTACTへ進み、問い合わせフォームからメールを送ると、件名、本文などが文字化けして送られてきます。これを治していきたいと思います。
Joomla!のメールシステムは、PHPの組み込み関数ではなく、独自に設定しているユーザー定義関数とPHP Mailerという有名なライブラリを使っています。
問い合わせの処理は/Joomla!のディレクトリ/components/com_contact内にあります。
メールの送信処理をしているのはこの中のcontroller.phpです。これの79行目にsendmail()という関数を定義し、そして本文、件名、アドレスを変数に代入して、関数に渡します。ここでは文字コードの設定はされていません。
まずこのファイルの123行目付近に以下の処理を施します。(便宜上コメントを打ってあります)
PHPのマルチバイト関数mb_convert_encoding()を使って名前、本文、件名を内部エンコーディングからShiftJISに変換します。
このファイルを/Joomla!のディレクトリ/components/com_contactへアップロード(上書き)します。
これだけでは文字化けは解消しません。文字化けを解消するにはもうひとつ、メールのヘッダ情報を処理するスクリプトを変更しなければなりません。
通常メールにはヘッダ情報というものがあります。宛先、送信者、文字コード、日付、送信者のメールソフトなどそのメールのいわば裏の情報が記載されています。気になる方はメールソフトでそれぞれのメールのプロパティをご覧下さい。
Joomla!から送られてくるメールのヘッダ情報では、メールソフトはPHPMailer、文字コード(charset)はiso-8859-1でした。これの文字コードを変更します。
では/Joomla!のディレクトリ/libraries/phpmailer/phpmailer.phpを開きます。
PHP Mailer(phpmailer.php)は、ヘッダ情報を処理し、ポートを使ってメールサーバーに接続し、送信処理を行っています。controller.phpは、phpmailer.phpで定義されたJMail()関数やSend()関数を呼び出して使用しています。
このファイルの36行目が、ヘッダに定義される文字コードなので、以下のように書き換えました。36行目をコメントアウトし、37行目に新しい設定を記述します。
これで保存して、/Joomla!のディレクトリ/libraries/phpmailerにアップロード(上書き)してください。
最後にサイトから問い合わせフォームでメールを送り、メールソフトで確認してみてください。
文字化けは解消されているはずです。
Joomla!のメールシステムは、PHPの組み込み関数ではなく、独自に設定しているユーザー定義関数とPHP Mailerという有名なライブラリを使っています。
問い合わせの処理は/Joomla!のディレクトリ/components/com_contact内にあります。
メールの送信処理をしているのはこの中のcontroller.phpです。これの79行目にsendmail()という関数を定義し、そして本文、件名、アドレスを変数に代入して、関数に渡します。ここでは文字コードの設定はされていません。
まずこのファイルの123行目付近に以下の処理を施します。(便宜上コメントを打ってあります)
//***** ORIGINAL CODE (BEGIN) *****
$name = mb_convert_encoding ($name, "SJIS");
$body = mb_convert_encoding ($body, "SJIS");
$subject = mb_convert_encoding ($subject, "SJIS");
//***** ORIGINAL CODE ( END ) *****
$name = mb_convert_encoding ($name, "SJIS");
$body = mb_convert_encoding ($body, "SJIS");
$subject = mb_convert_encoding ($subject, "SJIS");
//***** ORIGINAL CODE ( END ) *****
PHPのマルチバイト関数mb_convert_encoding()を使って名前、本文、件名を内部エンコーディングからShiftJISに変換します。
このファイルを/Joomla!のディレクトリ/components/com_contactへアップロード(上書き)します。
これだけでは文字化けは解消しません。文字化けを解消するにはもうひとつ、メールのヘッダ情報を処理するスクリプトを変更しなければなりません。
通常メールにはヘッダ情報というものがあります。宛先、送信者、文字コード、日付、送信者のメールソフトなどそのメールのいわば裏の情報が記載されています。気になる方はメールソフトでそれぞれのメールのプロパティをご覧下さい。
Joomla!から送られてくるメールのヘッダ情報では、メールソフトはPHPMailer、文字コード(charset)はiso-8859-1でした。これの文字コードを変更します。
では/Joomla!のディレクトリ/libraries/phpmailer/phpmailer.phpを開きます。
PHP Mailer(phpmailer.php)は、ヘッダ情報を処理し、ポートを使ってメールサーバーに接続し、送信処理を行っています。controller.phpは、phpmailer.phpで定義されたJMail()関数やSend()関数を呼び出して使用しています。
このファイルの36行目が、ヘッダに定義される文字コードなので、以下のように書き換えました。36行目をコメントアウトし、37行目に新しい設定を記述します。
//var $CharSet = "iso-8859-1";
var $CharSet = "Shift_JIS";
var $CharSet = "Shift_JIS";
これで保存して、/Joomla!のディレクトリ/libraries/phpmailerにアップロード(上書き)してください。
最後にサイトから問い合わせフォームでメールを送り、メールソフトで確認してみてください。
文字化けは解消されているはずです。
コメント