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

[`google_buzz` not found]
[`friendfeed` not found]
このエントリーをはてなブックマークに追加
[`yahoo` not found]
[`livedoor` not found]

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);