Home 技術関連情報 Joomla Joomlaのメールを日本語に対応する
Joomlaのメールを日本語に対応する PDF 印刷 Eメール
作者 熊川 勝   
2008年09月 01日(月曜日) 18:19

Joomlaのメールを日本語(マルチバイト)に対応する

下記の内容は、Joomla 1.5.3~1.5.6での動作を確認しております。
それ以降のバージョンにつきましては、変更点を確認の上、パッチを当てて下さい。

Joomlaは海外製という事もあり、日本語とかに優しくありません。
その為、日本語を使うにはパッチを当てる必要があります。

正確に言うと、UTF-8でメールは送れるのですが、Subject部分もUTF-8で送ってしまうため、
相手側のメーラーによっては、文字が化けてしまいます。

そこで今回は、Subject及び本文をISO-2022-JPで送れる様にする変更です。

修正対象のファイルは下記になります。
libraries/joomla/utilities/utility.php

 

この「utility.php」の下記の部分を修正します。
function sendMail($from, $fromname, $recipient, $subject, $body, $mode=0, $cc=null, $bcc=null, $attachment=null, $replyto=null, $replytoname=null )
{
    // Get a JMail instance
    $mail =& JFactory::getMailer();
    
    // この部分にコードを追加します
    
    $mail->setSender(array($from, $fromname));

 

修正後のイメージは下記になります。
function sendMail($from, $fromname, $recipient, $subject, $body, $mode=0, $cc=null, $bcc=null, $attachment=null, $replyto=null, $replytoname=null )
 {
    // Get a JMail instance
    $mail =& JFactory::getMailer();
   
    // Change ISO-2022-JP(Subject, Body)
    $mail->CharSet='iso-2022-jp';
    $mail->Encoding = '7bit';
    $targetEncoding = 'utf-8';
    $orgEncoding = mb_internal_encoding();
    mb_internal_encoding($targetEncoding);
    $subject = mb_encode_mimeheader($subject, $targetEncoding, 'B', "\n");
    $body = mb_convert_encoding($body, $mail->CharSet);
    mb_internal_encoding($orgEncoding);

   
    $mail->setSender(array($from, $fromname));

 

色々と参照させて頂いた所、mb_internal_encodingの使い方に癖があり、この様なやり方でないと安定しないという事がわかりました。
詳しくは、下記の参照サイトなどを参考にしてください。

参照:「mb_encode_mimeheaderの都市伝説を検証する

LAST_UPDATED2
 
HSB WebSite - フリーITエンジニア 熊川のWebSite -, Powered by Joomla! and designed by SiteGround web hosting