PloneFormGen
今回は、PloneFormGenについて。
このプロダクトを使うと、コーディングの知識とかがなくとも、また、Plone/Zopeの管理者権限が無くとも、簡単に『連絡』フォームのようなものが作成できます。
凝ったレイアウトはできませんが、通常、入力フォームは上から下にレイアウトして行けばいいので、その点は問題なし。プルダウンやチェックボックスなども、コンポーネント化されているので、面倒なHTMLを書かなくとも、GUIっぽく追加、位置を調整するだけで済みます。
プロダクトに関しては、以下のサイトにとても詳しく書かれていますので、ご興味のある方は、ぜひどうぞ 。
(作者のお二方、本当にありがとうございます!)
- nyusukeさま / http://nagosui.org/Nagosui/COREBlog2/ploneformgen
- 鈴木たかのりさま / http://takanory.net/takalog/946
※メールのJIS化についても、2の鈴木さまの方法で対応できました。
さて、動作確認のため、簡単なフォームを作ったのはいいのですが、気になる点が2つほど出てきました…。
- メッセージをPOSTした本人には、メッセージのコピーがCCという感じで送信されたりしない。
- jaMailHostと組み合わせると、添付ファイル(テキスト)がうまく扱えないらしい。(添付ファイルがtext/plainの場合、メール本文中にインライン展開されるが、その際のエンコーディングがasciiで文字化けしてしまう)
1点目は、ZMI上のテンプレートやスクリプトで対応できるかしら、と思ったのですが、どうやらそうではなさそうです。
差出人のアドレス(replytoというフォーム名)の値は、毎回動的に変わりますが、ToおよびCCは編集画面で指定した値が固定になってしまいます。
Poiもそうなのですが、投稿者本人にも内容をCcして欲しいなあと思ったので、ソースを見て修正してみることに。
PloneFormGenは、buildout.cfgでeggs = に指定していたので、ソースを修正してコンパイルしてくれるように、buildout.cfg を変更しました。
# Provide the *paths* to the eggs you are developing here:
develop = src/Products.SecureMailHost
src/Products.PloneFormGen
つぎに、それらしい箇所を見つけたので、修正してみました。
修正ファイルは、以下です。
- PloneFormGen/content/formMailerAdapter.py
返信用のReplyToは、reply_addr という変数に入ります。この値をCCに追加できれば良いので、次にCCの指定をしている箇所を探しました。
headerinfo['Cc'] = self._destFormat( cc_recips ) という一行があったので、ここでCCを指定しているはず。
ここにreply_addrを追加すればいいや…と思って、以下のような感じにしてみました。
headerinfo['Cc'] = self.secure_header_line(reply_addr) + ',' + self._destFormat( cc_recips )
無理やりですが、めでたくCCにPOSTした本人も加わったみたいです…。
もう一点のほうは、すごく安直?な方法ですが、インライン展開させず、ほかのコンテンツタイプ(画像やバイナリ)などと同じ扱いにすることにしました。
#if maintype == 'text':
# msg = MIMEText(content, _subtype=subtype)
#elif maintype == 'image':
if maintype == 'image':
msg = MIMEImage(content, _subtype=subtype)
elif maintype == 'audio':
msg = MIMEAudio(content, _subtype=subtype)
else:
msg = MIMEBase(maintype, subtype)
msg.set_payload(content)
# Encode the payload using Base64
Encoders.encode_base64(msg)# Set the filename parameter
msg.add_header('Content-Disposition', 'attachment', filename=filename)
outer.attach(msg)
つまり、mimetypeがtextの場合はMIMETextとして扱っていたものをコメントアウトしてしまい、その他のMIMEBaseと一緒にしてしまいました。
今のところ、これでうまく行ってくれているようです。
なお、メールの送信については、2の鈴木さまのエントリで触れられているとおり、MailHostが使われていません。この点は、同じようにメール送信を行うPoiというプロダクトでかなり悩まされていたので、Pythonに明るくない私にとっては、コードの調整のために非常に参考になりました。
コメント
コメントを投稿