PloneFormGen のメールの文字コードを JIS にする
久しぶりに plone ネタを書こうと思います。
Plone 完全活用ガイド でおすすめプロダクトの一つとして紹介した PloneFormGen ですが、フォームからメール送信する場合、日本語のメールが utf-8 の文字コードで base64 でエンコードされて送信します。
最近のメーラはこの形式にも対応していますが、他のプログラムで処理するときとか面倒なので普通の日本語メールのように JIS で送信してほしいところです。
このサイトの右上にもある「連絡フォーム」からメールを送信する場合は jaMailHost というプロダクトを入れると日本語メールが JIS コードで出力されます。
しかし、 PloneFormGen ではメールを送信するところで、 MailHost を使っていないため、やっぱり日本語メールは utf-8 を base64 でエンコードして出力します。
というわけで、以下のように PloneFormGen のコードを書き換えることで、日本語のメールを JIS で出力するようになります。
書き換えるのは /content/formMailerAdapter.py ファイルです。
こんな感じで書き換えます。
本文処理(560行目あたり)の変更前:
mime_text = MIMEText(body,
_subtype=self.body_type or 'html', _charset=self._site_encoding())
attachments = self.get_attachments(fields, request)
本文処理の変更後:
jis_text = unicode(body, 'utf-8').encode('iso-2022-jp')
mime_text = MIMEText(jis_text,
_subtype=self.body_type or 'html', _charset='iso-2022-jp')
attachments = self.get_attachments(fields, request)
ヘッダ部分(780行目あたり)の変更前:
# transform subject into mail header encoded string msgSubject = str(Header(self.secure_header_line(subject), self._site_encoding())) headerinfo['Subject'] = msgSubject
ヘッダ部分の変更後:
# transform subject into mail header encoded string
msgSubject = self.secure_header_line(subject).encode('iso-2022-jp')
msgSubject = str(Header(msgSubject, 'iso-2022-jp'))
headerinfo['Subject'] = msgSubject
やっていることは簡単で、ヘッダや本文として設定されている文字列が、初期状態では utf-8 でエンコーディングされているので、それを強制的に JIS(iso-2022-jp) でエンコーディングしなおしています。
これで PloneFormGen から送信されるメールが JIS になります。めでたしめでたし。
# 日本語以外の文字が混ざった場合には対応できませんのでご注意ください
- カテゴリ
-
plone
-
- ¦
- 固定リンク
- ¦
- コメント (0)
- ¦
- トラックバック (0)
- トラックバック用URL:
- http://takanory.net/takalog/946/tbping