Webメールソフト RoundCube 0.7 の日本語化


WWWサーバー上にGmailのようなWebメールシステムを構築できるRoundCubeというWebアプリケーションソフトがあります。このRoundCubeを日本語化(ISO-2022-JP文字セットとヘッダのBase64エンコーディングに対応)させてみました。

追記: 最新のパッチは 2012.8.27 公開のRoundCube 0.8.1 対応版です。From/To/Ccのbase64エンコードを行うようにし、ISO-2022-JP-MS にも対応しました。

私は今までSquirrelMailを使っていたのですが、老舗的ソフトだけあって、今時のAjaxバリバリなWebアプリケーションと比べるとちょっと古くさい感じがしてました。

そんなおり、某日経Linux誌でRoundCubeが紹介されていましたので、試しに使ってみました。

この記事のタイトルに「日本語化」とありますが、そもそも本家のRoundCubeは日本語に対応しています。言語自動認識で、単純にインストールするだけでもメニューやメッセージなどはすべて日本語で表示されます。また、その操作感自体もなかなか良い感じです。ところが、メール送信については、以下のような問題がありました(ためしてみたのは、2011-12-14 に公開されたばかりの、RoundCube 0.7 です)。

  • 文字セットが UTF-8固定
  • ヘッダがQエンコーディングされる

まあ、今時のメールクライアントはこれでも問題ないのですが、古い人間としてはちょっと気持ち悪さを感じます。

というわけで、RoundCubeを、昔ながらの日本語電子メールの標準であるRFC1468 「ISO-2022-JP対応で、 ヘッダはBエンコーディング」に対応させてみました。

変更内容

以下の機能を追加しています

  • 「個人設定」画面の「メールの作成」
    • 「ヘッダをMIME Base64エンコードする」チェックボックスを追加
    • 「標準の文字エンコード」ドロップダウンリストを追加
  • 「メールの作成」画面の「メッセージのオプション」ダイアログ
    • 「文字エンコード」ドロップダウンリストを追加

個人設定でBase64エンコードにチェックを入れ、文字エンコードをISO-2022-JPにすれば、昔ながらの標準的な日本語メール送信ができます。日本以外にメールを送る時は、メール作成時にISO8859-1などにエンコーディングを変えればOK。

(個人設定は、config/main.inc.php 内の、「head_encoding_base64」「send_charset」でもデフォルト設定記述できます。)

コード修正内容

日本語に対応させようとコードを覗いていて気づいたのですが、実はRoundCubeは内部的には文字エンコーディングの変更に対応しています。ただし、メール作成画面でフォームから文字エンコーディングの設定を受け取るようになっているのですが、メール作成画面側のフォームには文字エンコーディングが送信項目にありません。…

つまり、メール作成フォームから文字エンコーディングも送信させれば、それだけでISO-2022-JP対応になるのです。ISO-2022-JP固定なら、修正はたったの1行。でもそれだけだと面白くないので、設定画面で切り替えられるように修正してみました。

ヘッダのエンコーディングについても、本家はQエンコーディング決めうちになっていたので、設定画面で切り替えるようにしました。

なお、メール作成画面での文字セット選択については、スキンのテンプレートファイルを修正しリストボックスを追加しています。そのため、別のスキンに切り替えた場合には、文字セットが選択できなくなります。そういうスキンを使う場合、個人設定での送信文字セット設定決めうちということになります。

ダウンロード

roundcube-0.7 ISO-2022-JP対応&ヘッダBase64エンコーディング対応版

2012.1.26 Version 0.7.1に対応

最初に公開した0.7対応版

(ライセンスは、本家と同じくGPLv2に従います)

おまけ

ISO-2022-JP固定で手っ取り早く対応させる場合の修正方法は下記の通りです。

ISO-2022-JP対応

program/steps/mail/sendmail.inc 212行目

修正前:

$message_charset = isset($_POST['_charset']) ? $_POST['_charset'] : $input_charset;

修正後:

$message_charset = 'ISO-2022-JP';

ヘッダBase64エンコーディング対応

program/steps/mail/sendmail.inc 575行目

修正前:

$MAIL_MIME->setParam('head_encoding', 'quoted-printable');

修正後:

$MAIL_MIME->setParam('head_encoding', 'base64');

program/steps/mail/sendmail.inc 585行目

修正前:

  $headers['Subject'] = mb_encode_mimeheader($headers['Subject'],
    $message_charset, 'Q', "\r\n", 8);

修正後:

  $headers['Subject'] = mb_encode_mimeheader($headers['Subject'],
    $message_charset, 'B', "\r\n", 8);
カテゴリー: サーバ管理 タグ: , , , パーマリンク

Webメールソフト RoundCube 0.7 の日本語化 への6件のフィードバック

  1. 最近RoundCube使い始めました のコメント:

    修正版使ってます。ありがとうございます。
    メールクライアントのフォントの扱いの都合上、iso-2022-jpで使いたかったのでとても助かってます。

  2. 吉田浩 のコメント:

    素晴らしいです。
    0.31から、JIS対応の日本語版は無いと思っていました
    どうも、返信時にメールアドレスが”xxxxx”といった形式の時に
    (とか入っていると、エスケープしたままになるので
    rcube_imap.php
    4101行目を
    - $name = trim($val[‘name’]);
    + $name = preg_replace(array(‘/^[\'”]/’, ‘/[\'”]$/’), ”, trim($val[‘name’]));
    としています。

    • taka2 のコメント:

      吉田様
      ご利用ありがとうございます。使ってくれる人がいるとは、公開した甲斐がありました。

      RoundCube 0.7.2 が出ましたのでパッチを更新しました。
      吉田様のrcube_imap.php への修正も一緒に入れてあります。

  3. debizoh のコメント:

    ISO-2022-JP対応にはなるのですが、ISO-2022-JP-MSではなくなってしまうので、FULL WIDTH FULLWIDTH TILDEなどが消えてしまいます。

    program/lib/sendmail.inc
    $message_charset = isset($_POST[‘_charset’]) ? $_POST[‘_charset’] :
    $send_charset != ” ? $send_charset : $input_charset;

    に更に追記で
    if ($message_charset == “ISO-2022-JP”)
    {
    $message_charset = “ISO-2022-JP-MS”;
    }
    というようにISO-2022-JPがmessage_charset できたらISO-2022-JP-MSに置き換えてあげるとうまくいくと思います。

コメントは停止中です。