Mail API를 사용하여 이메일 주고받기

이 가이드에서는 Mail API를 사용하여 메일을 보내고 받는 방법을 설명합니다.

시작하기 전에

보내는 사람의 이메일을 승인된 보내는 사람으로 등록해야 합니다. 자세한 내용은 이메일을 보낼 수 있는 사람을 참조하세요.

메일 보내기

애플리케이션에서 메일을 보내려면 다음 안내를 따르세요.

  1. mail.Message 유형을 사용하여 메시지의 보내는 사람, 받는 사람, 제목, 메시지 본문을 설정합니다.

  2. mail.Send 함수를 사용하여 이메일을 보냅니다.

다음 예시는 애플리케이션을 사용하여 새로운 계정을 만들었음을 확인하는 이메일 메시지를 사용자에게 보냅니다.

import (
	"bytes"
	"fmt"
	"net/http"

	"google.golang.org/appengine"
	"google.golang.org/appengine/log"
	"google.golang.org/appengine/mail"
)

func confirm(w http.ResponseWriter, r *http.Request) {
	ctx := appengine.NewContext(r)
	addr := r.FormValue("email")
	url := createConfirmationURL(r)
	msg := &mail.Message{
		Sender:  "Example.com Support <support@example.com>",
		To:      []string{addr},
		Subject: "Confirm your registration",
		Body:    fmt.Sprintf(confirmMessage, url),
	}
	if err := mail.Send(ctx, msg); err != nil {
		log.Errorf(ctx, "Couldn't send email: %v", err)
	}
}

const confirmMessage = `
Thank you for creating an account!
Please confirm your email address by clicking on the link below:

%s
`

메일 받기

수신 이메일을 다음과 같은 형식의 주소로 받도록 설정할 수 있습니다.

anything@appid.appspotmail.com

이메일을 받으려면 다음 안내를 따르세요.

  1. 앱의 app.yaml 파일에서 수신 메일을 사용 설정합니다.

    inbound_services:
    - mail
  2. HTTP POST 요청에서 MIME 데이터로 앱에 제공되는 수신 이메일을 처리하는 핸들러를 설정합니다.

    1. 앱에서 /_ah/mail/ 경로에 핸들러를 등록합니다.

      func init() {
      	http.HandleFunc("/_ah/mail/", incomingMail)
      }
      
    2. 핸들러에서 *http.Request의 이메일 데이터를 읽습니다.

      func incomingMail(w http.ResponseWriter, r *http.Request) {
      	ctx := appengine.NewContext(r)
      	defer r.Body.Close()
      	var b bytes.Buffer
      	if _, err := b.ReadFrom(r.Body); err != nil {
      		log.Errorf(ctx, "Error reading body: %v", err)
      		return
      	}
      	log.Infof(ctx, "Received mail: %v", b)
      }
      

    표준 라이브러리의 net/mail 패키지를 사용하여 메일 메시지를 파싱할 수 있습니다.