風柳メモ

ソフトウェア・プログラミング関連の覚書が中心。

Google App Engineのメールの扱いづらさに辟易中

先日、Google App Engine/PythonがSDK Version 1.2.6 - October 13, 2009からメール受信に対応したので、

  1. メールを受信したら任意のWebフックをコールする(URLにPOSTする)。

ようなサービスを作っておいて、Webフック(コール側)対応サービスやHugeDomains.com - HookHub.com is for sale (Hook Hub)とかと連携させたら面白いかも、と思い、とりあえず GAE のメール送受信を試していたのですが、挫折しそうです。

とりあえず

メールでの投稿・通知しか対応していない携帯百景で、

  1. 直接、携帯百景に送る代わりに、GAE宛にメールすると、登録しておいた携帯百景にメール
  2. 携帯百景からの投稿完了メールやコメント通知メールはGmail宛に付くようにしておき(携帯百景にGmailでアドレス登録)、通知メールがあったら GMailのフィルタ機能を使ってGAE 宛にメールを転送。
  3. GAE側で、受け取ったメールの内容(URL等)を加工 or Hookhub をコールしていい感じに加工して、Twitterに投稿*1

というのを試そうとしているのですが……。

メール受信のつまづき

  1. 説明に書かれているように、ローカル環境ではThe Python Development Server(http://localhost:8080/_ah/admin/)からメール送信のテストが出来る……のだけど、ろくなものじゃない。1回送ったらその後送信でエラーがでるためにサーバを再起動しないといけないとか(mail.pyにバグが有るみたいで、email.message_from_stringを呼ぶとこけてる。直前でimport emailしなおすようにパッチを当てたらとりあえず直った)、添付ファイルは付けられないし、とにかくほとんど使い物にならない。
  2. 予想通りというかなんというか、提供されている InboundMailHandler の receive()を使うと、日本語の扱いが難しくて……バグもあるみたいだし、他にも扱いづらいところが多かったので、post()でself.request.body を直接取得して、email.message_from_string()し、パース&デコードするコードを自分で書いてしまいました。MIMEとか触ったことないんで、こことかここを見ながら手探りで適当に(苦笑)。落ち着いたらその内コード公開予定。
  3. で、さんざ苦労してどうにかメールの受信〜デコードして各部取り出しまで出来るようになったところで、ふとGAEのコンソールを見て、Free Quotaはメール受信が2000件/日までということに気がついて魂が抜けた……。いくらなんでも公開サービス作ろうとするには少なすぎ。追加は$0.0001/Emailって、1万件追加するだけで$1/日か……ええ商売してはるなぁ……。

メール送信のつまづき

  1. sender(from)には、adminか、もしくはログインしているユーザのGmailアドレスしか指定出来なすエラーとなる。でも、E-Mail受信時に自動送信する場合、ログイン状態は admin(app.yamlでlogin:adminつけなければなし)なので、実質 admin のアドレスしか入れられないことに……せめて、ユーザ単位でfromアドレス使い分けられないと話にならない→ユーザ登録などでログインしたときのCookie(ACSID)保存しておけばなんとかなるか?でも有効期間とかあるだろうし、ログアウト状態にされちゃうと無効になったりしたら駄目だしなぁ……。
  2. mail.send_mail()で、subjectやbody、html、attachmentsを引数に付ける場合は、空(u'')だとエラーになる。特にsender、to、subject、bodyまでは必須項目なので、ダミーで何かいれておかないとならない……これもちょっと。
  3. mail.send_mail()で attachments を指定するときは、タプルのリスト([(ファイル名,実体),...])にして渡すのだけれど、MIMETYPEを拡張子で判別しているのでファイル名に拡張子必須。しかも、小文字じゃないと受け付けない……。
  4. mail.send_mail()で指定した body は一定の長さを越えた行は勝手に折り返されて送信されてしまう模様。

いまここ。
なんか、たかだかメール受信・送信するだけなのに、ハードル高すぎっす、いろいろ……。

*1:携帯百景がTwitter連携できるのは知ってますが、定型フォーマットだし、コメント通知の方は連携できないですよね、多分。