Product

Store(): Ein temporäres Postfach für all Ihre eingehenden E-Mails

Speichern Sie Nachrichten vorübergehend (bis zu 3 Tage), indem Sie über Routing eine store()-Aktion erstellen. Möchten Sie erfahren, wie? Weiterlesen –
Bild für Store(): Ein temporäres Postfach für all Ihre eingehenden E-Mails

Kürzlich traten Kunden mit einigen Anwendungsfällen an uns heran, bei denen die vorübergehende Speicherung eingehender E-Mails nützlich wäre. In einigen Fällen sind die Anhänge groß und verursachen Time-outs, wenn wir versuchen, die Daten per POST an ihre Server zu senden. In anderen Fällen gibt es ein großes Aufkommen an eingehenden E-Mails, und Kunden ziehen es vor, einfach in bestimmten Abständen eine GET-Anfrage auszuführen, anstatt mehrere POSTs von uns verarbeiten zu müssen. Schließlich dient dies als Ausfallsicherheit für den Fall, dass ein Webdienst ausfällt und unsere POSTs nicht akzeptiert werden.

Dies scheinen uns gute Gründe zu sein, weshalb wir uns freuen, die neueste Ergänzung von Mailgun anzukündigen: Inbound Email Storage.

Nachrichten über Routing speichern

Speichern Sie Nachrichten vorübergehend (bis zu 3 Tage), indem Sie über Routing eine store()-Aktion erstellen. Diese Aktion lässt sich zusätzlich zu den Aktionen forward() oder stop() mit einem beliebigen Filter verwenden.

Die store-Aktion ist im Tab „Routing“ des Admin-Panels oder über die Routing-API. Wenn eine eingehende Nachricht einer Route mit einer store-Aktion entspricht, werden diese Nachricht und ihre Anhänge bis zu 3 Tage lang auf unseren Servern gespeichert. Wenn Sie in der store-Aktion (mit dem Keyword notify) eine URL angeben, senden wir die eingehende Nachricht per POST dorthin. Diese per POST gesendete Nachricht sieht aus wie jene, die über die forward -Aktion empfangen werden, mit Ausnahme der folgenden Änderungen.

  • Die Anhänge sind nicht unter dem Parameter attachment-x verfügbar. Stattdessen enthält ein JSON-Blob unter dem Parameter „attachments“ Links zu den Anhängen.
  • Der Parameter content-id-map wurde ebenfalls geändert; IDs verweisen nun auf Anhang-URLs statt auf die Anhänge selbst.
  • Der Parameter attachment-count ist nicht verfügbar.

Hier ist ein Beispiel für den Parameter attachments.

                                

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

Die vollständige Parameterliste finden Sie im Abschnitt „Nachrichten speichern und abrufen “ unserer Nutzerhandbuch.

Nachrichten über die Events API abrufen

Jedes Mal, wenn eine Nachricht gespeichert wird, wird ein stored-Event erstellt, das sich über die Events API. Auf diese Weise rufen Sie alle Ihre gespeicherten Nachrichten ab, auch wenn Sie in der store-Aktion keine Webhook-URL angeben. Die URL zum Abrufen der gespeicherten Nachricht befindet sich in den von der API zurückgegebenen Daten. Wenn Sie diese URL verwenden, um eine gespeicherte Nachricht abzurufen, erhalten Sie einen JSON-Blob mit den gleichen Parametern wie der notify-Webhook aus der store-Aktion, mit der Ausnahme, dass die Parameter token, timestamp und signature nicht vorhanden sind. Eine Beispielanfrage:

                                

                                        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'
                                
                            

Zusätzlich zu anderen Event-Daten wird eine URL zurückgegeben, unter der Sie die Nachricht per GET abrufen. Standardmäßig ist die abgerufene Nachricht ein JSON-Blob. Wenn Sie jedoch die accept-Kopfzeile auf message/rfc2822 setzen, laden Sie die Roh-MIME-Daten mitsamt allen Anhängen herunter. Zudem lässt sich die Nachricht über die API löschen (DELETE), was wir Ihnen nach dem Abruf empfehlen (Müll entsorgen ist immer eine gute Idee :).

Beispielanwendung

Um dies zu testen, haben wir diese einfache Anwendung geschrieben, mit der wir die täglichen Status-E-Mails unseres Teams über die Kommandozeile anzeigen. Alle diese E-Mails werden über eine Mailgun-Mailingliste versendet, sodass sich leicht ermitteln lässt, welche Nachrichten gespeichert werden sollen – wir verwenden einfach den Mailinglisten-Alias. Der Code ist unten aufgeführt:

                                

                                        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()
                                
                            

Wir hoffen, diese neue Funktion ist nützlich für Sie. Wie immer gilt: Falls Sie Feedback haben, teilen Sie es uns bitte mit!

Viel Spaß beim Senden!

Ihr Mailgun-Team