前回のエントリでは、GAE/GoがWebサーバとしてちゃんと動くことが確認できたので、今回はGAEからmailを送る。
参考
送信元のメールアドレスに制限がある
For security purposes, the sender address of a message must be one of the following:
・The Gmail or Google Apps Account of the user who is currently signed in
・Any email address of the form anything@appname.appspotmail.com or anything@appalias.appspotmail.com
・Any email address listed in the Cloud Platform Console under Email API Authorized Senders
今回は3番目のやつでやる。プロジェクトごとにAuthorized Sendersが設定できるので、まず
- ここ Google Cloud Platform を訪問して
- プロジェクトを選択し
- アプリケーション設定の[編集]を押し
- [Email API の承認済み送信者]の欄に、送信元にしたいアドレスを追加する
こんな感じ

GAE/Goのアプリケーションを書く
package gae_go_mail_example_oppai import ( "fmt" "net/http" "github.com/otiai10/marmoset" "google.golang.org/appengine" "google.golang.org/appengine/mail" ) func init() { router := marmoset.NewRouter() router.GET("/", func(w http.ResponseWriter, r *http.Request) { ctx := appengine.NewContext(r) msg := &mail.Message{ Sender: "設定済みの送信元アドレス", To: []string{"送信先アドレス"}, Subject: "やっはろー", Body: "律っちゃんぺろぺろ", HTMLBody: "<h1>律っちゃんぺろぺろ</h1>", } err := mail.Send(ctx, msg) fmt.Fprint(w, fmt.Sprintf("ERROR? %v", err)) }) http.Handle("/", router) }
送信するだけならこれでおしまい。
デプロイ
% appcfg.py -A {アプリケーションID} -V v1 update ./ # このディレクトリは、app.yamlとmain.goが入ってるところ
09:12 PM Application: {アプリケーションID} (was: None); version: v1 (was: None)
09:12 PM Host: appengine.google.com
09:12 PM
Starting update of app: {アプリケーションID}, version: v1
09:12 PM Getting current resource limits.
09:12 PM Scanning files on local disk.
09:12 PM Cloning 38 application files.
09:12 PM Compilation starting.
09:12 PM Compilation: 37 files left.
09:12 PM Compilation completed.
09:12 PM Starting deployment.
09:12 PM Checking if deployment succeeded.
09:12 PM Deployment successful.
09:12 PM Checking if updated app version is serving.
09:12 PM Completed update of app: {アプリケーションID}, version: v1
で、
http://{アプリケーションID}.appspot.com/ にGETでアクセスしたら、メールが来た

雑感
- この「経由」ってのうざいよな
- GAEのデプロイって、APP IDさえ分かればどこからでもできるんじゃねえの?
- なんか最初にcliのactivateとかした覚えないしなあ、それでいいのか?
- そんなはずはないよなと思いつつ、教えてエロいひと
DRY