またまたやってくれます。。。。って思ってたら
やっぱり限定の機能なんですね。
・・・まぁそれだけでもすごい事です。
えーと、、、仕組みはここにあります。
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 件のコメント:
コメントを投稿