E-Mail-Nachrichten werden als HTTP-Anfragen mit MIME-Daten an die Anwendung gesendet. Zur Verarbeitung eingehender E-Mail-Nachrichten ordnen Sie in der Anwendungskonfiguration E-Mail-Adressen den Skript-Handlern zu und nehmen die Handler anschließend in den Code der Anwendung auf.
Eingehende E-Mails generieren HTTP-Anfragen, die an die entsprechenden Skripts weitergeleitet werden. Die Skripts, die die eingehende E-Mails behandeln, müssen sich in Ihrem Standarddienst befinden.
Weitere Informationen zum Mail-Dienst finden Sie in der Übersicht zur Mail API.
Anwendung für den Empfang von E-Mails konfigurieren
Wenn Sie eine neue Anwendung erstellen, werden eingehende E-Mails standardmäßig deaktiviert. Um die eingehenden E-Mails zu aktivieren, müssen Sie die Datei app.yaml
in Ihrem Standarddienst ändern.
Fügen Sie den
inbound_services
-Abschnitt hinzu, der den Dienst für eingehende E-Mails aktiviert. Beispiel:Wenn Sie eingehende E-Mails nicht aktivieren, indem Sie diesen Abschnitt in die Konfigurationsdatei einschließen, werden eingehende E-Mails deaktiviert und E-Mail-Nachrichten ignoriert, die an die Anwendung gesendet werden.
Fügen Sie Zuordnungen zwischen URL-zugeordneten E-Mail-Adressen und Skript-Handlern hinzu.
Beim Standarddienst hat die E-Mail-Adresse zum Empfangen von E-Mails das folgende Format:
[STRING]@[Google Cloud project ID].appspotmail.com
Bei nicht standardmäßigen Diensten hat die E-Mail-Adresse folgendes Format:
[STRING]@[servicename]-dot-[Google Cloud project ID].appspotmail.com
E-Mail-Nachrichten werden als HTTP POST-Anfragen über die folgende URL an die Anwendung gesendet. Dabei steht [ADDRESS] für eine vollständige E-Mail-Adresse, einschließlich des Domainnamens:
/_ah/mail/[ADDRESS]
Um eingehende E-Mails in Ihrer App zu verarbeiten, ordnen Sie E-Mail-URLs den Handlern in der Datei
app.yaml
zu:Im obigen Beispiel entspricht
/_ah/mail/.+
allen E-Mails, die an die App adressiert sind. Sie können auch mehrere Handler für verschiedene E-Mail-Adressen einrichten, wie im folgenden Beispiel gezeigt:Die URLs der eingehenden E-Mail-Nachrichten werden absteigend mit dieser Liste abgeglichen. Sollte also die URL einer E-Mail-Nachricht mit mehreren Mustern übereinstimmen, so wird der erste übereinstimmende Handler ausgeführt. Dadurch können Sie als letzte Zuordnung einen "Catchall"-Handler einfügen. Die Handler werden im Standardmodul (oder in der Anwendungsversion) ausgeführt.
Eingehende E-Mails verarbeiten
Das Python SDK definiert InboundMailHandler
, eine webapp-Klasse für die Verarbeitung eingehender E-Mails. InboundMailHandler
befindet sich im Paket google.appengine.ext.webapp.mail_handlers
.
Mithilfe von InboundMailHandler
:
- Erstellen Sie eine Unterklasse für
InboundMailHandler
und überschreiben Sie die Methodereceive()
. - Rufen Sie an
receive()
-Methode mit einem -Argument der -KlasseInboundEmailMessage
, definiert durch das Python SDK.
Sie können beispielsweise eine Instanz von InboundEmailMessage
wie folgt erstellen:
InboundMailHandler
enthält eine Convenience-Klassenmethode vom Typ mapping()
, die ein Paar zurückgibt, das mit allen eingehenden E-Mail-Adressen an den E-Mail-Handler übereinstimmt. Sie können es natürlich in jeder abgeleiteten Klasse von InboundMailHandler
aufrufen, die Sie codieren:
Das InboundEmailMessage
-Objekt (mail_message
in diesem Beispiel) enthält die E-Mail-Nachricht. Die Methode bodies()
gibt die Textkörper in der Nachricht zurück. Wenn Sie bodies()
ohne Argumente aufrufen, wird ein Iterator zurückgegeben, der zuerst HTML-Textkörper und dann Nur-Text-Textkörper liefert. Wenn Sie nur HTML oder nur Text verwenden möchten, übergeben Sie ein Argument an bodies()
:
Das InboundEmailMessage
-Objekt enthält Attribute für den Zugriff auf andere Nachrichtenfelder:
subject
enthält den Betreff der Nachricht.sender
ist die E-Mail-Adresse des Senders, z. B."Nobody <nobody@example.com>"
.to
ist eine durch Kommas getrennte Liste der primären Empfänger der Nachricht, z.B."Joe <joe@example.com>, Bill <bill@example.com>"
.cc
enthält eine durch Kommas getrennte Liste der Cc-Empfänger, z.B."Joe <joe@example.com>, Bill <bill@example.com>"
.date
gibt das Datum der Nachricht zurück.attachments
ist eine Liste vonAttachment
-Objekten, möglicherweise leer.original
ist die vollständige Nachricht, einschließlich der Daten, die in den anderen Feldern wie E-Mail-Headern nicht als Python-email.message.Message
verfügbar gemacht werden.
Eingehende Nachrichten mit lokalem Entwicklungsserver simulieren
Nachdem Sie die Anwendung für die Verarbeitung eingehender E-Mails eingerichtet haben, können Sie mithilfe der Entwicklungsserverkonsole eingehende E-Mail-Nachrichten simulieren:
- Greifen Sie als Administrator auf den Entwicklungsserver zu. Dazu rufen Sie http://localhost:8080/console auf und wählen Als Administrator anmelden aus.
- Klicken Sie im Menü des Entwicklungsservers auf Eingehende Mail.
Füllen Sie das angezeigte Formular aus und klicken Sie auf E-Mail senden.
Weitere Informationen, einschließlich zum Ausführen des Entwicklungsservers, finden Sie unter Python-Entwicklungsserver.