2005年12月 1日
Linux | Tracの通知メール改造
Tracから送られてくるメールは単なるテキストなのに、マルチパートメッセージで送ってくるのがちょっと嫌だなあと思い、書いたこともないPythonのコードから該当箇所を探して修正を試みる。
運用中のTracはRPMでインストールしてあるので、とりあえずソースをダウンロードしてメールを送信しているコードを探す。きっと「smtp」という文字が含まれているだろうと予測して検索してみると、いくつか引っかかったファイルの中に「Notify.py」があり、名前からしてこれしかないと断定。
中身を見ると正しくそんな感じ。MIMEMultipart という「ズバリ私が犯人です」と言わんばかりのクラスが使われていた。コードを見る限りマルチパートである必要はなさそうなので、Pythonのリファレンスを見ながら、このクラスをMIMETextクラスに置き換える。
127行目付近
#msg = MIMEMultipart()これで解決。UTF-8ではなくISO-2022-JPにしてみたけど、ダメみたい。どうやら標準だと日本語コードは使えない様子。
#msg.attach(MIMEText(body, 'plain', 'utf-8'))
#msg.epilogue = ''
msg = MIMEText(body, 'plain', 'utf-8')
ちなみにRPMでインストールした僕の環境の場合、/usr/lib/python2.3/site-packages/tracディレクトリにNotify.pyはありました。Tracのバージョンは0.9です。
Log4JのSMTPAppenderもマルチパートでメールを送るようになっていたのだけど(参照)、海外では単なるテキストメールもマルチパートで送るのが一般的なのかな?
Comment
僕もpythonは門外漢なんですが、ISO-2022-JP等を使うにはJapaneseCodecsというものをインストールする必要があるみたいですよ。
Posted by: juno : 2005年12月 1日 12:50
なるほど。これですね。
http://www.python.jp/Zope/download/JapaneseCodecs
入れてみたいけど、何かが動かなくなったりしないか不安だ。
Posted by: otsuka : 2005年12月 1日 20:28