久々に、GoogleAppEngineで遊んでみる。
従来から、メールを受信して、その内容に応じて何らかの
メールを返すみたいなアプリケーションを作ってみたかったのだので、
ためしに、メールの受信・送信をGAE[Java]上で試してみた。
まず、参考にしたページは、下記です。
ほとんど、この通りにやってけば、問題なく動くところまでいけます。
●受信
http://code.google.com/intl/en/appengine/docs/java/mail/receiving.html
●送信
http://code.google.com/intl/en/appengine/docs/java/mail/usingjavamail.html
ほとんど、上に書いていることだけど、一応、一通りポイントを書いておく。
appengine-web.xmlをいじくってメールの受信を行えるように追記をする。
(Rootの要素として)
==========================
<inbound-services>
<service>mail</service>
</inbound-services>
==========================
次にweb.xmlをいじってサーブレットのマッピングを行う。
=========================
<servlet>
<servlet-name>mailhandler</servlet-name>
<servlet-class>MailHandlerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>mailhandler</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>
==========================
ちなみにメールのあて先は、下記のように@以前の文字は任意の
文字列が利用できるので、この文字列により、サーブレットの
振り分けも行うことができる。
<url-pattern>/_ah/mail/*</url-pattern>
その場合には、下記のような感じでかけば振り分けられる
<url-pattern>/_ah/mail/support*</url-pattern>
これで、上記のサーブレットクラス「MailHandlerServlet」を
実装してあげれば、メールを受信できる用になる。
==========================
//受信して、そのまま返信するだけのサンプルコード
import java.io.IOException;
import java.io.IOException;
import java.util.Properties;
import java.util.logging.Logger;
import javax.mail.Address;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.*;
import javax.mail.Message;
public class MailHandlerServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest req,
HttpServletResponse resp)
throws IOException {
Properties props = new Properties();
Logger log = Logger.getLogger("MailHandlerServlet");
log.info("Send Mail");
Address[] sendAdress=null ;
Session session = Session.getDefaultInstance(props, null);
try {
MimeMessage message = new MimeMessage(session, req.getInputStream());
sendAdress = message.getFrom();
log.info(sendAdress[0].toString());
} catch (MessagingException e) {
e.printStackTrace();
}
// 送信
session = Session.getDefaultInstance(props, null);
String msgBody = "単に返信するだけです。";
try {
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("takes90@gmail.com", "serviceAdmin"));
msg.addRecipient(Message.RecipientType.TO, sendAdress[0]);
msg.setSubject("It's Test");
msg.setText(msgBody);
Transport.send(msg);
log.info("Send Mail");
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
==========================
これで、受信できるようになったので、まずは開発環境でテストしてみる。
これもきちんとツールが用意されている。
ローカル環境の
http://localhost:8888/_ah/admin/
にアクセスすると「Inbound Mail」というツールがあるので、それをクリックする。
ここから、送信すると先ほどのサーブレット「MailHandlerServlet 」が呼び出される
という感じです。
この段階では、メールは実際には送信されません。
で、うまく動きそうであれば、Deploy App Engine Projectを行えば、
実際に、メールを送信すると、すぐに帰ってくるのが確かめられます。
あとは、この中身のアプリを実装してあげれば思ったものができそうです。