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に対応
- roundcubemail-0.7.1-ja-20120126taka2.diff (差分のみ)
- roundcubemail-0.7.1-ja-20120126taka2.tar.gz (ファイル一式)
最初に公開した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);
修正版使ってます。ありがとうございます。
メールクライアントのフォントの扱いの都合上、iso-2022-jpで使いたかったのでとても助かってます。
素晴らしいです。
0.31から、JIS対応の日本語版は無いと思っていました
どうも、返信時にメールアドレスが”xxxxx”といった形式の時に
(とか入っていると、エスケープしたままになるので
rcube_imap.php
4101行目を
- $name = trim($val[‘name’]);
+ $name = preg_replace(array(‘/^[\'”]/’, ‘/[\'”]$/’), ”, trim($val[‘name’]));
としています。
吉田様
ご利用ありがとうございます。使ってくれる人がいるとは、公開した甲斐がありました。
RoundCube 0.7.2 が出ましたのでパッチを更新しました。
吉田様のrcube_imap.php への修正も一緒に入れてあります。
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に置き換えてあげるとうまくいくと思います。
書いておきながら訂正箇所微妙かも。。現在調整中。。
0.8.0日本語対応版のエントリで、ISO-2022-JP-MS対応についてのコメントをいただきまして、
RoundCube 0.8.1 の日本語対応版で、ISO-2022-JP-MS対応を取り込んでます。
お試しください。