ブログ@kaorun55

HoloLensやKinectなどのDepthセンサーを中心に書いています。

Trac からのチケット操作通知メールのエンコードを日本語化した際に「差出人」が文字化けする

以前の方法Trac からのチケット操作通知メールを受け取っていたところ、「サイボウズ」と「SquirrelMail」とでメールを受け取ると「差出人」が文字化けすることに気づいた。


TracLightning 2.0.9 の場合、C:\TracLight\python\Lib\site-packages\Trac-0.11.1.ja1-py2.5.egg\trac にある notification.py をもう少しいじることで解決した。


エンコードの設定で self._charset.body_encoding のみ BASE64 にして、他もそれぞれ個別に設定したところ上手くいった。
ちゃんとした理由はないので、自己責任でお願いします。

    def _init_pref_encoding(self):
        from email.Charset import Charset, QP, BASE64
        self._charset = Charset()
        self._charset.input_charset = 'utf-8'
        pref = self.env.config.get('notification', 'mime_encoding').lower()
        if pref == 'iso-2022-jp':
            self._charset = Charset(pref)
            self._charset.header_encoding = 'iso-2022-jp'
            self._charset.body_encoding = BASE64
            self._charset.output_charset = 'iso-2022-jp'
            self._charset.input_codec = 'iso-2022-jp'
            self._charset.output_codec = 'iso-2022-jp'
        elif pref == 'base64':
            self._charset.header_encoding = BASE64
            self._charset.body_encoding = BASE64
            self._charset.output_charset = 'utf-8'
            self._charset.input_codec = 'utf-8'
            self._charset.output_codec = 'utf-8'
        elif pref in ['qp', 'quoted-printable']:
            self._charset.header_encoding = QP
            self._charset.body_encoding = QP
            self._charset.output_charset = 'utf-8'
            self._charset.input_codec = 'utf-8'
            self._charset.output_codec = 'utf-8'
        elif pref == 'none':
            self._charset.header_encoding = None
            self._charset.body_encoding = None
            self._charset.input_codec = None
            self._charset.output_charset = 'ascii'
        else:
            raise TracError(_('Invalid email encoding setting: %(str)s', str=pref))