読者です 読者をやめる 読者になる 読者になる

Natural Software

KinectなどのDepthセンサーを中心に活動しています

Trac のチケット操作通知メールのエンコードを日本語(ISO-2022-JP)にする

Trac

前々回前回でチケットを操作するとメールが送信されそのメールの項目が日本語になるところまで行った。


この時点で一つ問題があり、送信されたメールのエンコードUTF-8base64 という文字コード(?)でエンコードしている。
base64エンコードされえたメールを、base64 に対応していないメーラで閲覧すると文字が化ける。
#Thundebird は OK,、サイボウズの WEB メール閲覧は NG


この対策のためにエンコードを日本語(ISO-2022-JP)に変更する手順を探していたらみつけたのがこのサイト。
trac 0.10.4@OZACC.blog

ゴール

メールのエンコードISO-2022-JP に変更するとこのようになる

  • 事前



  • 事後


手順

詳細な手順についてはここを参照
注意点として、変更するファイルは「C:\TracLight\python\Lib\site-packages\trac*1」にある notification.py。
前回とフォルダが違うので注意
このファイルを以下のように変更する(参考サイトより引用)

--- notification.py.orig        2007-05-11 02:08:09.000000000 +0900
+++ notification.py     2007-05-11 04:01:53.000000000 +0900
@@ -172,7 +172,9 @@
         self._charset = Charset()
         self._charset.input_charset = 'utf-8'
         pref = self.env.config.get('notification', 'mime_encoding').lower()
-        if pref == 'base64':
+        if pref == 'iso-2022-jp':
+            self._charset = Charset(pref)
+        elif pref == 'base64':
             self._charset.header_encoding = BASE64
             self._charset.body_encoding = BASE64
             self._charset.output_charset = 'utf-8'
@@ -345,7 +347,10 @@
             headers['Cc'] = ', '.join(pcc)
         headers['Date'] = formatdate()
         # sanity check
-        if not self._charset.body_encoding:
+        if self._charset.input_charset == 'iso-2022-jp':
+            body = unicode(body, 'utf-8').replace(u'\uff5e', u'\u301c')
+            body = body.encode('iso-2022-jp')
+        elif not self._charset.body_encoding:
             try:
                 dummy = body.encode('ascii')
             except UnicodeDecodeError:

コードの修正が終わったらサーバを再起動し、[管理|notification|mime_encoding] を iso-2022-jp に変更する。
この変更だと該当プロジェクトのみ変更になるので、プロジェクトごとに設定する必要がある。

*1:Trac 0.11.ja1 :C:\TracLight\python\Lib\site-packages\Trac-0.11.ja1-py2.5.egg\tracTrac 0.11.1.ja1:C:\TracLight\python\Lib\site-packages\Trac-0.11.1.ja1-py2.5.egg\trac