Product

Store(): un buzón temporal para todo tu email entrante

Puedes almacenar mensajes temporalmente (hasta tres días) creando una acción store() mediante el enrutamiento. ¿Quieres saber cómo? Más información –
Imagen para Store(): un buzón temporal para todo tu email entrante

Los clientes nos han planteado recientemente algunos casos de uso en los que el almacenamiento temporal de los emails entrantes resultaría muy útil. En algunos casos, los adjuntos son muy grandes y provocan tiempos de espera agotados cuando intentamos hacer un POST de los datos a sus servidores. En otros casos, hay un gran volumen de email entrante y los clientes prefieren simplemente ejecutar una solicitud GET con cierta frecuencia en lugar de tener que gestionar múltiples POST por nuestra parte. Por último, sirve como redundancia en caso de que su servicio web se caiga y no puedan aceptar nuestros POST.

A nosotros nos parecen buenos motivos, así que nos complace anunciar la última incorporación a Mailgun: el almacenamiento de email entrante.

Almacenamiento de mensajes mediante enrutamiento

Puedes almacenar mensajes temporalmente (hasta tres días) creando una acción store() mediante el enrutamiento. Esta acción se puede usar además de las acciones forward() o stop() con cualquier filtro.

La acción store está disponible en la pestaña de enrutamiento del panel de administración o a través de la API de enrutamiento. Cuando un mensaje entrante coincide con una ruta que tiene una acción store, dicho mensaje y sus adjuntos se almacenan en nuestros servidores durante un máximo de tres días. Si proporcionas una URL en la acción store (utilizando la palabra clave notify), enviaremos a ella el mensaje entrante mediante un POST. Este mensaje enviado por POST tendrá el mismo aspecto que los recibidos al utilizar la acción forward , salvo por los siguientes cambios.

  • Los adjuntos no estarán disponibles bajo el parámetro attachment-x y, en su lugar, un blob JSON bajo el parámetro attachments contendrá enlaces a los adjuntos.
  • El parámetro content-id-map cambia de forma similar; ahora los identificadores se asignan a las URL de los adjuntos en lugar de a los propios adjuntos.
  • El parámetro attachment-count no estará disponible.

Aquí tienes un ejemplo del parámetro attachments.

                                

                                        [  
       {
  "url":"https://api.mailgun.org/v2/domains/mydomain.com/messages/WyJhOTM4NDk1ODA3Iiw/attachments/0",
  "content-type":"image/jpeg",
  "name":"my-attachment.jpeg",
  "size":7465
       }
    ]
                                
                            

Puedes consultar la lista completa de parámetros en la sección Almacenamiento y recuperación de mensajes  de nuestra Manual de usuario.

Recuperación de mensajes mediante la Events API

Cada vez que se almacena un mensaje, se crea un evento stored que se puede recuperar mediante la Events API. De este modo, puedes recuperar todos tus mensajes almacenados incluso si no proporcionas una URL de webhook en la acción store. La URL para recuperar el mensaje almacenado se encontrará en los datos que devuelve la API. Cuando utilices esa URL para obtener un mensaje almacenado, recibirás un blob JSON con los mismos parámetros que el webhook notify de la acción store, excepto que los parámetros token, timestamp y signature no estarán presentes. Ejemplo de solicitud:

                                

                                        import requests  
    r = requests.get("https://api.mailgun.net/v2/mydomain.com/events",  
    auth=("api", "key-kjdh236r897rkwejhd98-sdjk3"))

    print r.json()['items'][0]['storage']['url']

    'https://api.mailgun.net/v2/domains/mydomain.com/messages/WyJhOTM4NDk1ODA3Iiw'
                                
                            

Además de otros datos sobre el evento, se devuelve una URL de la que puedes obtener el mensaje mediante GET. De forma predeterminada, el mensaje recuperado será un blob JSON, pero si configuras el encabezado accept en message/rfc2822, podrás descargar el MIME sin procesar, con los adjuntos y demás datos. También puedes hacer un DELETE del mensaje a través de la API, algo que te sugerimos que hagas una vez que lo hayas recuperado (siempre es buena idea deshacerte de la basura :).

Aplicación de muestra

Para probarlo, hemos escrito esta sencilla aplicación que nos permite ver los emails de estado diarios de nuestro equipo mediante la línea de comandos. Todos estos emails se envían con una lista de correo de Mailgun, así que es fácil identificar qué mensajes almacenar; simplemente usamos el alias de la lista de correo. A continuación tienes el código:

                                

                                        from requests import get

    from local import API_KEY

    MY_DOMAIN = "mailgun.net"
    MY_STATUS_LIST = "status-updates@mailgun.net"
    EVENTS_API_URL = "https://api.mailgun.net/v2/{}/events".format(MY_DOMAIN)

    def main():
response = get(EVENTS_API_URL,
               auth=('api', API_KEY),
               params={
                   "event": "stored"
               })

events = response.json()

message_urls = [event['storage']['url'] for event in events['items']
                if MY_STATUS_LIST in event['message']['recipients']]

for url in message_urls:
    message = get(url,
                  auth=('api', API_KEY)).json()

    print "From: ", message['from']
    print '--------------------------- {} --------------------------------'.format(message['subject'])
    print message['body-plain']

    if __name__ == "__main__":
main()
                                
                            

Esperamos que esta nueva función te resulte útil. Como siempre, si tienes algún comentario, ¡háznoslo saber!

¡Feliz envío!

El equipo de Mailgun