Recevoir des e-mails

Les e-mails envoyés à l'application sont mis en œuvre sous forme de requêtes HTTP contenant des données MIME. Pour traiter les e-mails entrants, associez des adresses e-mail aux gestionnaires de scripts dans la configuration de l'application, puis ajoutez les gestionnaires au code de l'application.

Les e-mails entrants génèrent des requêtes HTTP qui sont transmises aux scripts appropriés. Les scripts qui gèrent les e-mails entrants doivent résider dans le service par défaut.

Pour en savoir plus sur le service de messagerie, consultez la Présentation de l'API Mail.

Configurer votre application pour recevoir des e-mails

Lorsque vous créez une application, le traitement des e-mails entrants est désactivé par défaut. Pour activer le traitement des e-mails entrants, vous devez modifier le fichier app.yaml dans le service par défaut.

  1. Ajoutez une section inbound_services qui active le service de traitement des e-mails entrants. Exemple :

    inbound_services:
    - mail

    Si vous n'activez pas le traitement des e-mails entrants en incluant cette section dans le fichier de configuration, le traitement des e-mails entrants est désactivé et les e-mails envoyés à l'application sont ignorés.

  2. Ajoutez des mises en correspondance afin d'associer des adresses e-mail déjà mappées sur des URL à des gestionnaires de script.

    L'application peut recevoir des e-mails aux adresses de format :

    [STRING]@[GCP project ID].appspotmail.com
    

    Les e-mails sont envoyés à l'application en tant que requêtes HTTP POST à l'aide de l'URL suivante, où [ADDRESS] est une adresse e-mail complète, incluant le nom de domaine :

    /_ah/mail/[ADDRESS]
    

    Pour gérer les e-mails entrants dans l'application, mappez les URL de messagerie aux gestionnaires dans le fichier app.yaml :

    - url: /_ah/mail/.+
      script: handle_incoming_email.app
      login: admin

    Dans l'exemple ci-dessus, /_ah/mail/.+ correspond à tous les e-mails adressés à l'application. Si vous le souhaitez, vous pouvez configurer plusieurs gestionnaires pour différentes adresses e-mail, comme dans l'exemple suivant :

    - url: /_ah/mail/owner@.*your_app_id\.appspotmail\.com
      script: handle_owner.app
      login: admin
    - url: /_ah/mail/support@.*your_app_id\.appspotmail\.com
      script: handle_support.app
      login: admin
    - url: /_ah/mail/.+
      script: handle_catchall.app
      login: admin

    Les URL des e-mails entrants sont mises en correspondance avec cette liste, de la première à la dernière. Ainsi, si une URL de messagerie correspond à plusieurs modèles, le premier gestionnaire correspondant est exécuté. Cette option vous permet d'inclure un gestionnaire "collecteur" comme dernière mise en correspondance. Les gestionnaires s'exécutent dans le module par défaut (ou la version de l'application).

Gérer les e-mails entrants

Le SDK Python définit InboundMailHandler, une classe webapp permettant de gérer les e-mails entrants. InboundMailHandler se trouve dans le package google.appengine.ext.webapp.mail_handlers.

Pour utiliser InboundMailHandler :

  1. Créez une sous-classe pour InboundMailHandler et remplacez la méthode receive().
  2. Appelez la méthode receive() avec un argument de la classe InboundEmailMessage défini par le SDK Python.

Par exemple, vous pouvez créer une instance de InboundEmailMessage comme ceci :

import logging

from google.appengine.ext.webapp.mail_handlers import InboundMailHandler
import webapp2

class LogSenderHandler(InboundMailHandler):
    def receive(self, mail_message):
        logging.info("Received a message from: " + mail_message.sender)

InboundMailHandler contient une méthode de classe mapping() simplifiée qui renvoie une paire correspondant à toutes les adresses e-mail entrantes au gestionnaire de messagerie. Vous pouvez bien sûr l'appeler sur n'importe quelle sous-classe de InboundMailHandler que vous codez :

app = webapp2.WSGIApplication([LogSenderHandler.mapping()], debug=True)

L'objet InboundEmailMessage (mail_message dans cet exemple) contient l'e-mail. Sa méthode bodies() renvoie les corps contenus dans l'e-mail. Si vous appelez bodies() sans arguments, un itérateur, qui génère d'abord les corps HTML, puis les corps en texte brut, est renvoyé. Si vous voulez uniquement du HTML ou du texte brut, vous pouvez transmettre un argument à la méthode bodies() :

plaintext_bodies = mail_message.bodies('text/plain')
html_bodies = mail_message.bodies('text/html')

for content_type, body in html_bodies:
    decoded_html = body.decode()
    # ...

L'objet InboundEmailMessage comprend des attributs pour accéder à d'autres champs de message :

  • subject contient l'objet du message.
  • sender correspond à l'adresse de l'expéditeur (par exemple, "Nobody <nobody@example.com>").
  • to est une liste des principaux destinataires du message séparés par des virgules (par exemple, "Joe <joe@example.com>, Bill <bill@example.com>").
  • cc contient une liste des destinataires en copie (CC) séparés par des virgules (par exemple, "Joe <joe@example.com>, Bill <bill@example.com>").
  • date renvoie la date du message.
  • attachments est une liste d'objets Attachment éventuellement vides.
  • original est le message complet, y compris les données non exposées par les autres champs, tels que les en-têtes d'e-mails, sous la forme email.message.Message Python.

Simuler des e-mails entrants avec le serveur de développement local

Une fois que vous avez configuré l'application pour la gestion des e-mails entrants, vous pouvez utiliser la console du serveur de développement pour simuler des e-mails entrants :

  1. Accédez au serveur de développement en tant qu'administrateur via http://localhost:8080/_ah/login et en sélectionnant Se connecter en tant qu'administrateur.
  2. Sur le serveur de développement, cliquez sur Messagerie entrante dans la navigation.
  3. Remplissez le formulaire qui apparaît et cliquez sur Envoyer un e-mail.

    Pour en savoir plus, en particulier sur l'exécution du serveur de développement, consultez la section dédiée au Serveur de développement Python.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Environnement standard App Engine pour Python 2