Invio e ricezione di email con l'API Mail

Questa guida descrive come utilizzare l'API Mail per inviare e ricevere email.

Prima di iniziare

Devi registrare gli indirizzi email dei mittenti come mittenti autorizzati. Per maggiori informazioni le informazioni, vedi chi può inviare email.

Invio di email

Per inviare posta dalla tua applicazione:

  1. Utilizza il tipo mail.Message per impostare il mittente, il destinatario, l'oggetto e il corpo del messaggio.

  2. Invia l'email con la funzione mail.Send.

L'esempio seguente invia un messaggio email all'utente come conferma della creazione di un nuovo account con l'applicazione:

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
`

Ricezione della posta

Puoi configurare l'app in modo che riceva le email in arrivo agli indirizzi: formato:

anything@appid.appspotmail.com

Per ricevere email:

  1. Attiva la posta in arrivo nel file app.yaml dell'app:

    inbound_services:
    - mail
  2. Configura un gestore per elaborare le email in arrivo, che vengono fornite alla tua app come dati MIME in una richiesta HTTP POST.

    1. Nell'app, registra un gestore per il percorso /_ah/mail/:

      func init() {
      	http.HandleFunc("/_ah/mail/", incomingMail)
      }
      
    2. Nel gestore, leggi i dati dell'email da *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)
      }
      

    Puoi utilizzare il pacchetto net/mail nella biblioteca standard per analizzare i messaggi di posta.