以前の方法で 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))