Tracの通知メール改造

Tracから送られてくるメールは単なるテキストなのに、マルチパートメッセージで送ってくるのがちょっと嫌だなあと思い、書いたこともないPythonのコードから該当箇所を探して修正を試みる。

運用中のTracはRPMでインストールしてあるので、とりあえずソースをダウンロードしてメールを送信しているコードを探す。きっと「smtp」という文字が含まれているだろうと予測して検索してみると、いくつか引っかかったファイルの中に「Notify.py」があり、名前からしてこれしかないと断定。

中身を見ると正しくそんな感じ。MIMEMultipart という「ズバリ私が犯人です」と言わんばかりのクラスが使われていた。コードを見る限りマルチパートである必要はなさそうなので、Pythonのリファレンスを見ながら、このクラスをMIMETextクラスに置き換える。

127行目付近

#msg = MIMEMultipart()
#msg.attach(MIMEText(body, 'plain', 'utf-8'))
#msg.epilogue = ''
msg = MIMEText(body, 'plain', 'utf-8')

これで解決。UTF-8ではなくISO-2022-JPにしてみたけど、ダメみたい。どうやら標準だと日本語コードは使えない様子。

ちなみにRPMでインストールした僕の環境の場合、/usr/lib/python2.3/site-packages/tracディレクトリにNotify.pyはありました。Tracのバージョンは0.9です。

Log4JのSMTPAppenderもマルチパートでメールを送るようになっていたのだけど(参照)、海外では単なるテキストメールもマルチパートで送るのが一般的なのかな?

Last updated on July 7, 2015