« 2010March »
Su Mo Tu We Th Fr Sa
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
このBlogについて
このブログはCMScomが公開する、公式ブログです。 Zope/Ploneのことや、Pythonのことなどを掲載しています。 また、個人的な内容も一部含まれております。
最近のエントリ
第9回開発合宿の成果 terada 2010年03月14日
Zope/Plone開発勉強会(2009年2月)の報告 terada 2010年02月25日
Zope/Plone開発勉強会(合宿バージョン)の報告2 terada 2010年02月15日
Zope/Plone開発勉強会(合宿バージョン)の報告1 terada 2010年02月01日
Ploneの英語のメーリングリスト紹介 terada 2010年01月29日
2010年も既に半月経過 terada 2010年01月17日
PloneでMS-Officeファイルを検索対象にするプロダクト公開 terada 2009年12月18日
Plone研究会&Ploneパーティー2009 terada 2009年12月10日
Plone3の日本語検索とメールバグ terada 2009年12月08日
Pythonスクリプトを使って便利な機能を実装 terada 2009年12月04日
MeCabで日本語読みを出力 on Windows terada 2009年12月03日
Plone3のメールバグ解消プロダクト公開 terada 2009年11月23日
Plone Conference 2009 の報告(4) terada 2009年11月18日
Plone Conference 2009 の報告(3) terada 2009年11月18日
Plone Conference 2009 の報告(2) terada 2009年11月10日
Plone Conference 2009 の報告(1) terada 2009年11月09日
Plone Conference 2009 がはじまりました terada 2009年10月28日
Plone Conference 2009 へ(2) terada 2009年10月23日
Plone Conference 2009 へ terada 2009年10月22日
【終了】Zope/Plone開発勉強会 #4 terada 2009年10月21日
最近のコメント
Re:第9回開発合宿の成果 t2y 2010年03月14日
Re:PloneでMS-Officeファイルを検索対象にするプロダクト公開 NK 2010年02月15日
Re:Plone3のメールバグ解消プロダクト公開 terada 2009年11月23日
Re:Zope Essentials 7 無事終了 t2y 2009年08月23日
Re:Plone3.0以降のメール送信 akiko 2009年08月10日
Re:Google App Engine と Google Apps はすい 2009年08月04日
Re:PyLuceneの日本のコミュニティが立ち上がった t2y 2009年08月04日
Re:Plone3.0以降のメール送信 siebo 2009年01月20日
Re:Plone3.0以降のメール送信 Shigeo Honda 2009年01月20日
Re:Plone Conference 2008 で知り合った人々(1) 伊藤@b-mark 2008年11月23日
Re:Plone Conference 2008 に参加 terada 2008年10月16日
Re:Plone Conference 2008 に参加 terada 2008年10月16日
Re:Plone Conference 2008 に参加 malik 2008年10月16日
Re:Plone Conference 2008 に参加 Yasu. 2008年10月16日
Re:Twitterどうでしょうか zen 2007年05月26日
Re:Plone2.5からの注意 Anonymous User 2007年04月21日
Re: Windows Vista良い感じ terada 2006年11月15日
Re: Windows Vista良い感じ ナルディ 2006年11月15日
Re:Ploneのケータイ対応 sayg 2005年12月02日
Re:Ploneのケータイ対応 terada 2005年12月02日
 
編集操作

Plone3.0以降のメール送信

概要

Plone3.0以降は、メール送信する際に、Ploneサイトのルートにある、プロパティを参照して、文字コード変換してくれます。デフォルトはUTF-8になっています。これを、ISO-2022-JPとすれば良いのですが、残念ながらエラーとなる箇所が存在ます。それは、UTF-8に対しISO-2022-JPにマッピング出来ていない物が存在するからです。

その為に、Pythonでは、encodeメソッドの、第2引数(decodeメソッドは第3引数)に'replace'や'ignore'を付加することができます。'replace'は安全な文字に置き換わり、'ignore'は無いものとして扱います。Ploneのコード内では、このようになっている箇所がほとんどありません。

Plone3.0-3.1の対策方法

さて、Ploneがメールを送る箇所は何カ所もあります。
それの洗い出しを全てしないとなりません。
これら以外をご存じの方は、連絡下さい。

ユーザ登録関係では、下記の2カ所だと思います。

Products/CMFPlone/RegistrationTool.py
mailPasswordメソッド

Products/CMFPlone/RegistrationTool.py
registeredNotifyメソッド

これら2つは、Ploneサイトルートにある、プロパティのemail_charset を使っています。
ただ、ここで、ISO-2022-JP を指定すると、エラーになってしまいます。
それらの対策は、下記の通りです。

mailPasswordメソッドは、
mail_text = mail_text.encode(email_charset)

mail_text = mail_text.encode(email_charset, 'replace')

registeredNotifyメソッド
host.send(mail_text.encode(encoding))

host.send(mail_text.encode(encoding, 'replace'))

と変更することで、エラーが無くなります。

Ploneには、お問い合わせフォーム

Products/CMFPlone/skins/plone_form_scripts/send_feedback_site.cpy
から、
Products/SecureMailHost/SecureMailHost.py
secureSendメソッド
を使っています。

secureSendメソッドは、unicodeでメッセージを渡すと、
文字コードを変更してくれます。
message = context.site_feedback_template(context, **variables)

message = context.site_feedback_template(context, **variables).decode()

しかし、そこでも、エラーを起こす可能性があるので、
message = message.encode(charset)

message = message.encode(charset, 'replace')
と変更する必要があります。

最後に

なお、この対策をした場合、jaMailHostがあると処理が重なり問題になると思います。

早い段階で、これらの対策をした、パッチプロダクトをリリースしたいと思います。

カテゴリ
Zope/Plone
トラックバック用URL:

Re:Plone3.0以降のメール送信

投稿者 Shigeo Honda 投稿日時: 2009年01月20日 20時10分
このパッチをplone.orgに送って取り込んでもらいましょうよ。

Re:Plone3.0以降のメール送信

投稿者 siebo 投稿日時: 2009年01月20日 20時10分
Thanks to your work on discovering this issue and proposing a solution. Have you posted an issue report to http://dev.plone.org ? If not, please do so. Perhaps your Plone patch will be made a part of Plone. It will also bring this issue to the attention of the development and internationalization teams to make sure that you have fixed the problem on the appropriate level.

(attempted translated version)

あなたの仕事のおかげでこの問題を発見し、解決策を提案する。 http://dev.plone.orgにバグレポートを投稿することがありますか? 、そうでない場合をご覧ください。おそらく、あなたのパッチをPloneの一部を構成することができます。また、機会の開発チームとの修正協議を提案できるようになりますして、適切なレベルでこの問題を修正していることを確認します。

Re:Plone3.0以降のメール送信

投稿者 akiko 投稿日時: 2009年08月10日 14時58分
はじめまして、こんにちは!
Plone3でJISのメールが送れるとは知りませんでした。
Plone2.1からの流れで jaMailHostを利用しています。Plone標準ではなく、個別のプロダクトまで含めると、対応が難しそうなのでそのようにしてみました。

#サイトのエンコーディングはUTF-8、メールはJISでという場合は、email_charset をISO-2022-JPにすれば良いということでよろしいでしょうか。

今頃のコメントで恐れ入りますが、個別プロダクト以外で「ここもそうかな?」と思ったのが、「コンテンツルール」の箇所です。

サイト設定->コンテンツルールのところで、コンテンツの状態をトリガにしてロギングやメッセージ送信をしたりします。
こちらにもメール通知機能があります。

plone.app.contentrules-1.1.5-py2.4.egg/plone/app/contentrules/actions/mail.py に、secureSendを呼び出す箇所があります。

何かお役に立てればいいのですが...。
コメントを追加

下のフォームに記入してコメントを追加できます。平文テキスト形式。

(必須)
(必須)
(必須)
(Required)