Product
Store() : une messagerie temporaire pour tous vos emails entrants
Des clients nous ont récemment fait part de quelques cas d’utilisation pour lesquels le stockage temporaire des emails entrants s’avérerait utile. Dans certains cas, les pièces jointes sont volumineuses et provoquent des expirations de délai lorsque nous essayons d’envoyer les données via une requête POST vers leurs serveurs. Dans d’autres cas, le volume d’emails entrants est important et les clients préfèrent simplement exécuter une requête GET à intervalles réguliers plutôt que de devoir gérer plusieurs envois POST de notre part. Enfin, cela sert de redondance au cas où leur service web serait hors ligne et dans l’impossibilité d’accepter nos requêtes POST.
Ces raisons nous ont paru valables, nous avons donc le plaisir de vous annoncer la dernière nouveauté de Mailgun : le stockage des emails entrants (Inbound Email Storage).
Stocker des messages via Routes
Vous pouvez stocker des messages temporairement (jusqu’à trois jours) en créant une action store() à l’aide de Routes. Cette action peut être utilisée en complément des actions forward() ou stop() avec n’importe quel filtre.
L’action store est disponible dans l’onglet Routes du panneau d’administration ou via l’ API Routes. Lorsqu’un message entrant correspond à une route comprenant une action store, ce message et ses pièces jointes sont stockés sur nos serveurs pendant une durée maximale de trois jours. Si vous fournissez une URL dans l’action store (à l’aide du mot-clé notify), nous y enverrons le message entrant via une requête POST. Ce message envoyé via POST ressemblera à ceux reçus à l’aide de l’action forward , à l’exception des modifications suivantes.
- Les pièces jointes ne seront pas disponibles sous le paramètre
attachment-x; à la place, un objet JSON sous le paramètre attachments contiendra des liens vers les pièces jointes. - Le paramètre
content-id-mapest modifié de la même manière ; les identifiants correspondent désormais aux URL des pièces jointes et non plus aux pièces jointes elles-mêmes. - Le paramètre
attachment-countne sera pas disponible.
Voici un exemple du paramètre attachments.
[
{
"url":"https://api.mailgun.org/v2/domains/mydomain.com/messages/WyJhOTM4NDk1ODA3Iiw/attachments/0",
"content-type":"image/jpeg",
"name":"my-attachment.jpeg",
"size":7465
}
]
Vous pouvez consulter la liste complète des paramètres dans la section Stocker et récupérer des messages de notre Manuel d’utilisation.
Récupérer des messages via l’Events API
Chaque fois qu’un message est stocké, un événement stored est créé et peut être récupéré via l’ Events API. De cette façon, vous pouvez récupérer tous vos messages stockés même si vous ne fournissez pas d’URL de webhook dans l’action store. L’URL pour récupérer le message stocké se trouvera dans les données renvoyées par l’API. Lorsque vous utilisez cette URL pour obtenir un message stocké, vous recevrez un objet JSON comprenant les mêmes paramètres que le webhook notify de l’action store, à l’exception des paramètres token, timestamp et signature qui ne seront pas présents. Exemple de requête :
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'
En plus des autres données concernant l’événement, une URL permettant d’obtenir le message via GET est renvoyée. Par défaut, le message récupéré sera un objet JSON, mais si vous définissez l’en-tête accept sur message/rfc2822, vous pouvez télécharger le fichier MIME brut, y compris les pièces jointes. Vous pouvez également supprimer le message via l’API (requête DELETE), ce que nous vous conseillons de faire une fois que vous l’avez récupéré (il est toujours préférable de supprimer les éléments inutiles :).
Exemple d’application
Pour tester cette fonctionnalité, nous avons écrit cette application simple qui nous permet de consulter les emails de statut quotidiens de notre équipe via la ligne de commande. Tous ces emails sont envoyés avec une liste de diffusion Mailgun, il est donc facile d’identifier les messages à stocker : nous utilisons simplement l’alias de la liste de diffusion. Voici le code :
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()
Nous espérons que cette nouvelle fonctionnalité vous sera utile. Comme toujours, si vous avez des commentaires, n’hésitez pas à nous en faire part !
Bons envois !
L’équipe Mailgun