jaMailHost on Zope 2.6.1

日本語にするとき、
http://ml.zope.jp/pipermail/zope-users/2002-August/002651.html
が解決策かと。
http://ml.zope.jp/pipermail/zope-users/2002-August/002642.html
も重要。知らなかった。jaMailHostの__init__.pyよんでも、あれがEUCがinであることが前提とはよめにゃい・・・。
とおもったら内部で使われているkconvもJapaneseCodecも、EUCのinが前提だったらしい。
http://mass.tdiary.net/20030330.html#p02
さんによる。うーん・・・・・・これによればEUCは8bitで可変長*1だから、ブラウザから受け取ったメッセージをいったんunicode()を利用してunicodeから変換するロジックのJapaneseCodecは使えないような気がする・・。実際エラーになったような感じだったし*2。ただ、このページには、プログラムに記載されたとあるので、今回は別ルートからのデータなので挙動は違うのかもしれない。加えて言えばpython仕様書やソースまで見る必要はありそうだけど、気力ないので調査はこれくらいにしてやっつけながら納得しておく。

なるほど。。。つーことは
1)kconvが入ってるかどうか確かめておく。*3
2)jaMailHostをインストールする。
3)管理画面と、送信元ページをeuc-jpにする。送信後はいらないんだろうなぁ。で、フォームページを作成する。日本語OK。
4)受け付け側で、sendmailヘッダに
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding:7bit
を入れるようにしておく。

という対応になりそう。ブラウザ、メーラ、サーバその他の環境に依存する話なのはもちろんですが、博打としては勝ち組の予感がする。送信するブラウザは一般にページのコンテンツタイプに依存してメッセージを送信するし、これでpythonがMTAに送信するメッセージは7bitだし、*4加えてiso-2022-jpは大体どこでも合意が取れてて、問題なく扱える*5。大丈夫かなぁと思う。

もしかして、もともとのMailHostはISO-2022-JPを問題なく扱えるのか?という疑問もあるけど疲れました。(だめじゃん) じゃないや、少なくともタイトルはbase64エンコーディングの必要があるだろうから、問題ありますね。

文字コードの問題はいつもドキドキする。致命的な部分で間違いやすい。この文章もこわごわ書く。こういう問題に対応してきた先人には頭が下がります。

*1:一般に。

*2:これは気のせいなのかもしれません。加えて言えば、site.pyの記述でpython自身のディフォルトエンコーディングを指定できそうなのでそれで回避可能かも。

*3:なんでしょうけど、何でか知りませんが私の環境は動かなくなりました。そういう人はpykfとかにしましょう。id:moAnnetenna:20031201#p3

*4:8bitを通さないMTAもあるからね。http://3web.ne.jp/3web/faq/01/index.html#08

*5:と私は思っている