2009年11月8日日曜日

GAEでメール受信

GAEにメール受信する機能が増えたんですね。
またまたやってくれます。。。。って思ってたら
やっぱり限定の機能なんですね。

・・・まぁそれだけでもすごい事です。
えーと、、、仕組みはここにあります。

string@appid.appspotmail.com

に送ると、

/_ah/mail/


に届くみたいですね。。。。
Cronとか駆使して、、、って考えてたんですけど、
開発環境でみる限り、メールを送信したら、サーブレットをPostしてくれるみたいです!
なんだ、、、色々楽ですね。。。

まず、appengine-web.xmlに


<inbound-services>
<service>mail</service>
</inbound-services>


を追加します。

その後web.xmlに


<servlet>
<servlet-name>mailHandle</servlet-name>
<servlet-class>bz.ziro.kanbe.servlet.MailHandlerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>mailHandle</servlet-name>
<url-pattern>/_ah/mail/*</url-pattern>
</servlet-mapping>



<security-constraint>
<web-resource-collection>
<url-pattern>/_ah/mail/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>


を追加します。
servletの上はクラス名、下はURLです。
URLは固定ですね。

下のはセキュリティ設定です。
第三者が触れないようにadmin(アプリ管理者)のみ触れるようにしておきます。

その後HttpServletを派生したクラスを作成して
doPost()を実装します。


@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {

try {
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
MimeMessage message = new MimeMessage(session, req.getInputStream());



} catch (MessagingException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}


これで、メールを受け取ったら動作します。
http://localhost:8080/_ah/admin/
にアクセスすると、inboundMailっていうのがあるので
開発環境ではここから送信できます。

先だって話したように、URLとメールアドレスが連動しているので
何のメールかとかをToで判断したりすればOKだと思います。

0 件のコメント: