Los mensajes de correo electrónico que se envían a tu aplicación se implementan como solicitudes HTTP que contienen datos MIME. Para procesar los mensajes de correo entrantes, asocia direcciones de correo electrónico a controladores de secuencias de comandos en la configuración de tu aplicación y, a continuación, incluye los controladores en el código de la aplicación.
El correo entrante genera solicitudes HTTP, que se transfieren a las secuencias de comandos correspondientes. Las secuencias de comandos que gestionan el correo entrante deben residir en tu servicio predeterminado.
Para obtener más información sobre el servicio de correo, consulta la descripción general de la API Mail.
Configurar tu aplicación para recibir correos
Cuando creas una nueva aplicación, el correo electrónico entrante se encuentra inhabilitado de forma predeterminada. Para habilitar el correo entrante, debes modificar el archivo app.yaml
de tu servicio predeterminado.
Añade una sección
inbound_services
que habilite el servicio de correo entrante. Por ejemplo:Si no habilitas el correo entrante incluyendo esta sección en tu archivo de configuración, el correo entrante se inhabilitará y los mensajes de correo enviados a la aplicación se ignorarán.
Añade asignaciones que asocien direcciones de correo electrónico asignadas a URL con los controladores de secuencias de comandos.
En el servicio predeterminado, la dirección de correo para recibir correos tiene el siguiente formato:
[STRING]@[Google Cloud project ID].appspotmail.com
En el caso de los servicios no predeterminados, la dirección de correo tiene el siguiente formato:
[STRING]@[servicename]-dot-[Google Cloud project ID].appspotmail.com
Los mensajes de correo se envían a tu aplicación como solicitudes HTTP POST mediante la siguiente URL, donde [ADDRESS] es una dirección de correo completa, incluido el nombre de dominio:
/_ah/mail/[ADDRESS]
Para gestionar el correo entrante en tu aplicación, asigna URLs de correo a controladores en el archivo
app.yaml
:En el ejemplo anterior,
/_ah/mail/.+
coincide con todos los correos dirigidos a la aplicación. Si lo prefieres, puedes configurar varios controladores para diferentes direcciones de correo, como en el siguiente ejemplo:Las URLs de los mensajes de correo entrantes se comparan con esta lista de la primera a la última, por lo que, si la URL de un mensaje de correo coincide con más de un patrón, se ejecutará el primer controlador que coincida. De esta forma, puedes incluir un controlador "catchall" como última asignación. Los controladores se ejecutan en el módulo predeterminado (o en la versión de la aplicación).
Gestionar el correo entrante
El SDK de Python define InboundMailHandler
, una clase de aplicación web para gestionar el correo entrante. InboundMailHandler
está incluido en el paquete
google.appengine.ext.webapp.mail_handlers
.
Para usar InboundMailHandler
:
- Crea una subclase para
InboundMailHandler
y anula el métodoreceive()
. - Llama al método
receive()
con un argumento de claseInboundEmailMessage
, definido por el SDK de Python.
Por ejemplo, puedes crear una instancia de InboundEmailMessage
de esta forma:
InboundMailHandler
contiene un método de clase de conveniencia mapping()
que devuelve un par que coincide con todas las direcciones de correo entrantes con el controlador de correo. Por supuesto, puedes llamarlo en cualquier subclase de InboundMailHandler
que codifiques:
El objeto InboundEmailMessage
(mail_message
en este ejemplo) contiene el mensaje de correo. Su método bodies()
devuelve los cuerpos del mensaje. Si llamas a bodies()
sin argumentos, devuelve un iterador que genera primero los cuerpos HTML y, después, los cuerpos de texto sin formato. Si solo quieres HTML o texto sin formato, puedes pasar un argumento a bodies()
:
El objeto InboundEmailMessage
incluye atributos para acceder a otros campos de mensaje:
subject
contiene el asunto del mensaje.sender
es la dirección del remitente, por ejemplo,"Nobody <nobody@example.com>"
.to
es una lista separada por comas de los destinatarios principales del mensaje, por ejemplo,"Joe <joe@example.com>, Bill <bill@example.com>"
.cc
contiene una lista de destinatarios de copia separada por comas, por ejemplo,"Joe <joe@example.com>, Bill <bill@example.com>"
.date
devuelve la fecha del mensaje.attachments
es una lista de objetosAttachment
, que puede estar vacía.original
es el mensaje completo, incluidos los datos que no se muestran en los demás campos, como las cabeceras de correo, en formato Pythonemail.message.Message
.
Simular mensajes entrantes con el servidor de desarrollo local
Una vez que hayas configurado tu aplicación para gestionar el correo entrante, puedes usar la consola del servidor de desarrollo para simular mensajes de correo entrantes:
- Accede al servidor de desarrollo como administrador. Para ello, ve a http://localhost:8080/console y selecciona Iniciar sesión como administrador.
- En el servidor de desarrollo, haz clic en Inbound Mail (Correo entrante) en el menú de navegación.
Rellena el formulario que aparece y haz clic en Enviar correo.
Para obtener más información, incluido cómo ejecutar el servidor de desarrollo, consulta Servidor de desarrollo de Python.