GAE/Goでメールを受信する
GAE(GoogleAppEngine)ではMail APIを使ったメールの受信が行えます。
メールをキーに何かの処理を行ったり、メールのテストに使ったり、とても便利に使うことが出来たので紹介させて頂きます。
Receiving Mail with the Mail API
Sending and Receiving Mail with the Mail API
上記のドキュメントを見ていただければわかる通り、このAPIは [任意の名前]@[GAEのAppID].appspotmail.com にメールを送ることで、GAEでメールをHTTPリクエストとして受け取ることが出来ます。
動かす
サンプルコードはGitHubにあげてあります。
app.yaml
inbound_services:
- mail
上の設定を追加することで、Mail受信を有効にします。
メールの受信処理
package app
import (
"github.com/nissy/bon"
"google.golang.org/appengine"
"google.golang.org/appengine/log"
"io/ioutil"
"net/http"
"net/mail"
)
func init() {
r := bon.NewRouter()
r.Post("/_ah/mail/:ToAddress", func(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
defer r.Body.Close()
m, err := mail.ReadMessage(r.Body)
if err != nil {
log.Errorf(c, "Error reading r.body: %v", err)
return
}
header := m.Header
log.Infof(c, "Date:", header.Get("Date"))
log.Infof(c, "From:", header.Get("From"))
log.Infof(c, "To:", header.Get("To"))
log.Infof(c, "Subject:", header.Get("Subject"))
body, err := ioutil.ReadAll(m.Body)
if err != nil {
log.Errorf(c, "Error reading m.body: %v", err)
}
log.Infof(c, "Body:", string(body))
})
http.Handle("/", r)
}
/_ah/mail/[送信先に指定されたアドレス]
のpathにPOSTリクエストが来て、リクエストボディがメールの内容になるのでそれに合わせて実装します。
メールについてはnet/mail
など適当なパッケージでパースして使うことが出来ます。
ローカルでのデバッグ
admin server (http://localhost:8000) のInbound Mailからローカルで起動しているアプリに対してメールを送信することが出来ます。
Author And Source
この問題について(GAE/Goでメールを受信する), 我々は、より多くの情報をここで見つけました https://qiita.com/keitaro_1020/items/667bb1396015d32df09e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .