Envoyer et recevoir des e-mails avec l'API Mail

Ce guide explique comment utiliser l'API Mail pour envoyer et recevoir des e-mails.

Avant de commencer

Vous devez enregistrer vos adresses e-mail d'expédition en tant qu'expéditeurs autorisés. Pour en savoir plus, consultez la section Utilisateurs autorisés à envoyer des e-mails.

Envoyer des e-mails

Pour envoyer un message depuis l'application, procédez comme suit :

  1. Utilisez le type mail.Message pour définir l'expéditeur, le destinataire, l'objet et le corps du message.

  2. Envoyez le message à l'aide de la fonction mail.Send.

L'exemple suivant envoie un e-mail à l'utilisateur pour confirmer la création de son compte via l'application :

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
`

Recevoir des messages

Vous pouvez configurer votre application afin que les messages entrants soient reçus par certaines adresses au format suivant :

anything@appid.appspotmail.com

Pour recevoir des e-mails, procédez comme suit :

  1. Activez les messages entrants dans le fichier app.yaml de votre application :

    inbound_services:
    - mail
  2. Configurez un gestionnaire pour traiter les messages entrants, qui sont fournis à votre application sous forme de données MIME dans une requête HTTP POST.

    1. Dans votre application, enregistrez un gestionnaire au chemin d'accès /_ah/mail/ :

      func init() {
      	http.HandleFunc("/_ah/mail/", incomingMail)
      }
      
    2. Dans le gestionnaire, lisez les données des e-mails à partir de la requête *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)
      }
      

    Vous pouvez utiliser le package net/mail de la bibliothèque standard pour analyser les messages.