Envía y recibe correos con la API de correo

En esta guía, se describe cómo usar la API de correo para enviar y recibir correos electrónicos.

Antes de comenzar

Debes registrar los correos electrónicos de tus remitentes como remitentes autorizados. Para obtener más información, consulta quién puede enviar correos electrónicos.

Enviar correos electrónicos

Para enviar un correo electrónico desde la aplicación, realiza los siguientes pasos:

  1. Usa el tipo mail.Message para configurar el remitente, destinatario, asunto y cuerpo del mensaje.

  2. Envía el correo electrónico con la función mail.Send.

En el siguiente ejemplo, se envía un mensaje de correo electrónico al usuario como confirmación de que creó una cuenta nueva con la aplicación:

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
`

Cómo recibir correos electrónicos

Puedes configurar la aplicación para que reciba correos electrónicos entrantes en las direcciones con el siguiente formato:

anything@appid.appspotmail.com

Para recibir correos electrónicos, realiza los siguientes pasos:

  1. Habilita el correo electrónico entrante en el archivo app.yaml de tu app:

    inbound_services:
    - mail
  2. Configura un controlador para procesar los correos electrónicos entrantes, que se suministran a la app como datos MIME en una solicitud POST HTTP.

    1. En la app, registra un controlador para la ruta de acceso /_ah/mail/:

      func init() {
      	http.HandleFunc("/_ah/mail/", incomingMail)
      }
      
    2. En el controlador, lee los datos del correo electrónico desde *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)
      }
      

    Puedes usar el paquete net/mail de la biblioteca estándar para analizar los mensajes de correo electrónico.