GoogleAppEngine for JAVAでメール受信しようとして失敗したこと

GAEではメール受信できる。試してみたときの失敗項目を書いておく。
こんなことで失敗する私の注意力の無さを記録する。
Googleの無料サービスは、制限が厳しくなりつつあるが使い方次第なのだと思う。
自分に反省。

(1)まずはGAEの設定を変える。特にInstancesを「1」。

Administration>Application Settingsで設定変更。
変更しないと、すぐに無料枠を使いきってしまうためらしい。
下記のように設定すれば大丈夫らしいが、よく分からない。
1)Max Idle Instances: ( 1 )
2)Min Pending Latency: ( 15.0s )
※過去バージョンのGAEツール群でデプロイしたままだと、設定変更できなかった。


(2)PleiadesのDataNucleus Enhancerは外しておこう。

勝手に起動して、全く停止してくれないときがある。
コードの保存すら出来なくなってしまう・・・。
プロジェクトのプロパティー>Google>Appエンジン>ORMで、
全部「除去」してしまおう。
※ORM:オブジェクト/リレーショナル・マッピングらしいが、何に使うのか不明。
http://stackoverflow.com/questions/1015727/how-to-turn-off-datanucleus-enhancer-while-working-with-google-app-engine

(3)デバッグのローカルサーバーで動かなくても気にするな。

http://localhost:8888/_ah/admin/inboundmailのローカルサーバーでは
エラーばっかりでも気にするな。
デプロイすれば、うまく動く。・・・こともある。
環境が違うからデプロイすればOKだ。

(4)デフォルトのdoGetだとダメかもしれない。「doPost」にしてみる。

Eclipseの新規で作成するとdoGetの記述となる。

@SuppressWarnings("serial")
public class Mailrestool2Servlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {...

だけど、メール受信を使うときはPOSTなので「public void doGet」はダメ。
上記は、「public void doPost」に変更する。
GETとPOSTは違うらしい。下記の投稿を読んでやっと気づいた・・・。

http://www.rominirani.com/2009/10/31/episode-6-handling-incoming-email-in-your-application/

これのせいで、Gmailからstring@myappid.appspotmail.comにメール送信すると、
POSTエラーのため、スパム並に何回も送信してきた。
リソースもかなり食われてしまっていた。

(5)Logをしっかりと読もう。
上記に関わることだが、Logの内容を理解できるようにしておこう。
右の3つに注意。status、RequestTime、ResponseSizeだ。
とくにStatusが200以外のときはエラーかもしれないので気をつけよう。

2012-05-11 03:40:11.930 /test 200 75ms 0kb

2012-05-11 03:40:11.930 /test02 405 30ms 0kb
2012-05-11 03:40:11.930 /test03 500 400ms 0kb


(6)デバッグのために変数を知るには、Logに記録する
GAEではファイルに記録するとかの手段が少ないので、手っ取り早く使うのはLogらしい。


import java.util.logging.Logger;
import java.util.logging.Level;
private static final Logger _logmess = Logger.getLogger({CLASSNAME}.class.getName());
を最初のどこかで宣言。下記のようにすれば、Logに変数の中身が記録される。

_logmess.warning("メッセージです!");

_logmess.warning("Subject = " + subject);
※デフォルトの記録レベルはWarning。

ハロの外部記憶インターフェイスさんより

コメント