2010/10/09
GAE/Jでメールを受信。
いままで気が付かなかったがGAEはメールの受信ができるらしい。
ちょっと試してみた。
前準備。
appengine-web.xml に設定を追加する。
こんだけ。
後は xxxxx@{app-id}.appspotmail.com にメールを送ると
http://{app-id}.appspot.com/_ah/mail/xxxxx@{app-id}.appspotmail.com へ
メールの内容がそのまま転送される。
WSJSで試そうと思ったがWSJSは現状、拡張子ベースになっているので
ちょっと都合が悪い。
しょうが無いので mod_rewrite 的な機能を書き足した。
RewriteProc.java:
config.js:
これで /_ah/mail/* が /mail/receiver.ssjs に転送される。
とりあえず、receiver.ssjs で POSTのボディをそのまま別のページに
吐き出すようにしてみた。
/mail/receiver.ssjs:
test@wsjs-gae.appspotmail.com にメールを送ってみる。
おお、ちゃんと受け取れた。ヘッダも込の全文ですね。
メールボットがいろいろ作れそう。
MLは送信に 2000 件の制限があるからきついかも。
テストでダミーのメールアドレスが大量に必要な時とかは役に立ちそう。
ちょっと試してみた。
前準備。
appengine-web.xml に設定を追加する。
<inbound-services>
<service>mail</service>
</inbound-services>
こんだけ。
後は xxxxx@{app-id}.appspotmail.com にメールを送ると
http://{app-id}.appspot.com/_ah/mail/xxxxx@{app-id}.appspotmail.com へ
メールの内容がそのまま転送される。
WSJSで試そうと思ったがWSJSは現状、拡張子ベースになっているので
ちょっと都合が悪い。
しょうが無いので mod_rewrite 的な機能を書き足した。
RewriteProc.java:
package kotemaru.wsjs.proc;
import java.io.* ;
import java.net.* ;
import java.util.* ;
import java.text.* ;
import javax.servlet.*;
import javax.servlet.http.*;
import org.mozilla.javascript.*;
import java.util.regex.*;
import kotemaru.auth.* ;
import kotemaru.util.* ;
import kotemaru.wsjs.* ;
public class RewriteProc extends ProcessorBase {
private Pattern pattern;
private String destPageName;
private Processor destProc;
public RewriteProc(String patt, String dest) {
super();
this.pattern = Pattern.compile(patt);
this.destPageName = dest;
}
private RewriteProc(Processor proc) {
destProc = proc;
}
public Processor getInstance(WsjsContext ctx, Page page) throws IOException {
Matcher matcher = pattern.matcher(page.getPageName());
if (!matcher.matches()) return null;
Processor proc = ctx.getProcessor(destPageName);
return new RewriteProc(proc);
}
public boolean isCachable() {
return false;
}
public void dispose() {
}
public void processing(WsjsContext ctx) throws IOException, javax.servlet.ServletException {
destProc.processing(ctx);
}
}
config.js:
config.processors = [
new Packages.kotemaru.wsjs.proc.RewriteProc("^/_ah/mail/.*$","/mail/receiver.ssjs"),
:
これで /_ah/mail/* が /mail/receiver.ssjs に転送される。
とりあえず、receiver.ssjs で POSTのボディをそのまま別のページに
吐き出すようにしてみた。
/mail/receiver.ssjs:
function doPost(req, res) {
var page = __ENV__.getPage("/tmp/maildata.txt");
page.putBodyStream(req.getInputStream());
}
test@wsjs-gae.appspotmail.com にメールを送ってみる。

おお、ちゃんと受け取れた。ヘッダも込の全文ですね。

メールボットがいろいろ作れそう。
MLは送信に 2000 件の制限があるからきついかも。
テストでダミーのメールアドレスが大量に必要な時とかは役に立ちそう。
この投稿へのコメント

コメント・フォーム