Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
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.
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 les e-mails entrants, vous devez modifier votre fichier app.yaml dans votre service par défaut.
Ajoutez une section inbound_services pour activer le service de messagerie entrante.
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.
Ajoutez des mises en correspondance afin d'associer des adresses e-mail déjà mappées sur des URL à des gestionnaires de script.
Pour le service par défaut, l'adresse e-mail destinée à la réception des e-mails est au format suivant :
[STRING]@[Google Cloud projectID].appspotmail.com
Pour les services autres que ceux par défaut, l'adresse e-mail est au format suivant :
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 votre application, mappez les URL de messagerie aux gestionnaires dans le fichier app.yaml :
Dans l'exemple ci-dessus, /_ah/mail/.+ correspond à tous les e-mails adressés à l'application. Si vous préférez, vous pouvez configurer plusieurs gestionnaires pour différentes adresses e-mail, comme dans l'exemple suivant :
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 reçus
Le SDK Python définit InboundMailHandler, une classe webapp pour la gestion des e-mails entrants. InboundMailHandler fait partie du package google.appengine.ext.webapp.mail_handlers.
Pour utiliser InboundMailHandler :
Créez une sous-classe pour InboundMailHandler et remplacez la méthode receive().
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 :
importloggingfromgoogle.appengine.ext.webapp.mail_handlersimportInboundMailHandlerimportwebapp2classLogSenderHandler(InboundMailHandler):defreceive(self,mail_message):logging.info("Received a message from: "+mail_message.sender)
InboundMailHandler contient une méthode de classe mapping() simplifiée qui renvoie au gestionnaire de messagerie une paire correspondant à toutes les adresses e-mail entrantes. Vous pouvez bien sûr l'appeler sur n'importe quelle sous-classe de InboundMailHandler que vous codez :
L'objet InboundEmailMessage (mail_message dans cet exemple) contient le corps de 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 ne souhaitez que du HTML ou que du texte brut, vous pouvez transmettre un argument à bodies() :
L'objet InboundEmailMessage comprend des attributs qui permettent d'accéder à d'autres champs du message :
subject contient l'objet du message.
sender est 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 une virgule, par exemple, "Joe <joe@example.com>, Bill <bill@example.com>".
cc contient une liste des destinataires en copie 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 vide.
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 :
Accédez au serveur de développement en tant qu'administrateur via http://localhost:8080/console, et sélectionnez Se connecter en tant qu'administrateur.
Sur le serveur de développement, cliquez sur Messagerie entrante dans la navigation.
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.
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/09/04 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Difficile à comprendre","hardToUnderstand","thumb-down"],["Informations ou exemple de code incorrects","incorrectInformationOrSampleCode","thumb-down"],["Il n'y a pas l'information/les exemples dont j'ai besoin","missingTheInformationSamplesINeed","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/09/04 (UTC)."],[[["\u003cp\u003eIncoming emails to the app are processed as HTTP requests with MIME data, requiring configuration to associate email addresses with specific script handlers.\u003c/p\u003e\n"],["\u003cp\u003eTo enable incoming email, the \u003ccode\u003einbound_services\u003c/code\u003e section with the \u003ccode\u003e- mail\u003c/code\u003e parameter must be added to the \u003ccode\u003eapp.yaml\u003c/code\u003e file in the default service.\u003c/p\u003e\n"],["\u003cp\u003eEmail URLs, formatted as \u003ccode\u003e/_ah/mail/[ADDRESS]\u003c/code\u003e, must be mapped to handlers in the \u003ccode\u003eapp.yaml\u003c/code\u003e file to route incoming emails to the correct script.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eInboundMailHandler\u003c/code\u003e class, which must be subclassed, should be used to manage incoming emails, and its \u003ccode\u003ereceive()\u003c/code\u003e method should be overridden to process email messages.\u003c/p\u003e\n"],["\u003cp\u003eThe development server allows simulating incoming emails for testing purposes through its console, which can be used to test the email handlers.\u003c/p\u003e\n"]]],[],null,["# Receiving Email\n\nEmail messages sent to your app are implemented as HTTP requests containing MIME\ndata. To process incoming email messages, you associate email addresses with\nscript handlers in your app configuration, then include the handlers in your\napp's code.\n| This page describes how to use the legacy bundled services and APIs. This API can only run in first-generation runtimes in the App Engine standard environment. If you are updating to the App Engine Python 3 runtime, refer to the [migration guide](/appengine/migration-center/standard/migrate-to-second-gen/python-differences) to learn about your migration options for legacy bundled services.\n\nIncoming email generates HTTP requests, which are passed to the appropriate\nscripts. The scripts that handle the incoming email must reside in your default\nservice.\n\nFor more information on the Mail service, see the\n[Mail API Overview](/appengine/docs/legacy/standard/python/mail).\n\nConfiguring your application to receive email\n---------------------------------------------\n\nWhen you create a new app, incoming email is disabled by default. To enable the\nincoming email, you must modify your `app.yaml` file in your default service.\n\n1. Add an `inbound_services` section that enables the incoming email service.\n For example:\n\n inbound_services:\n - mail\n\n If you don't enable incoming email by including this section in your\n configuration file, then incoming email is disabled, and email messages sent\n to the app are ignored.\n2. Add mappings that associate URL-mapped email addresses with script handlers.\n\n For the [default service](/appengine/docs/legacy/standard/python/configuration-files#the_default_service), the email address for receiving email has the following format: \n\n [STRING]@[Google Cloud project ID].appspotmail.com\n\n For non-default services, the email address has the following format: \n\n [STRING]@[servicename]-dot-[Google Cloud project ID].appspotmail.com\n\n Email messages are sent to your app as HTTP POST requests using the\n following URL, where \u003cvar translate=\"no\"\u003e[ADDRESS]\u003c/var\u003e is a full email address, including\n domain name: \n\n /_ah/mail/[ADDRESS]\n\n To handle incoming email in your app, map email URLs to handlers in the\n `app.yaml` file: \n\n - url: /_ah/mail/.+\n script: handle_incoming_email.app\n login: admin\n\n In the above example, `/_ah/mail/.+` matches all email addressed to the app.\n If you prefer, you can set up multiple handlers for different email\n addresses, as in the following example: \n\n - url: /_ah/mail/owner@.*your_app_id\\.appspotmail\\.com\n script: handle_owner.app\n login: admin\n - url: /_ah/mail/support@.*your_app_id\\.appspotmail\\.com\n script: handle_support.app\n login: admin\n - url: /_ah/mail/.+\n script: handle_catchall.app\n login: admin\n\n URLs of incoming email messages are matched to this list from first to last,\n so if an email message URL matches more than one pattern, the first matching\n handler will be the one executed. This allows you to include a \"catchall\"\n handler as the last mapping. The handlers run in the default module (or\n application version).\n\nHandling incoming email\n-----------------------\n\nThe Python SDK defines `InboundMailHandler`, a webapp class for handling\nincoming email. `InboundMailHandler` is in the\n[`google.appengine.ext.webapp.mail_handlers`](/appengine/docs/legacy/standard/python/refdocs/google.appengine.ext.webapp.mail_handlers)\npackage.\n\nTo use `InboundMailHandler`:\n\n1. Create a subclass for `InboundMailHandler` and override the `receive()` method.\n2. Call the `receive()` method with an argument of class `InboundEmailMessage`, defined by the Python SDK.\n\nFor example, you can create an instance of `InboundEmailMessage` like this: \n\n import logging\n\n from google.appengine.ext.webapp.mail_handlers import InboundMailHandler\n import webapp2\n\n\n class LogSenderHandler(InboundMailHandler):\n def receive(self, mail_message):\n logging.info(\"Received a message from: \" + mail_message.sender)\n\n| **Note:** Even if you are using the [webapp2](/appengine/docs/legacy/standard/python/tools/webapp2) framework, you still need to use the `InboundMailHandler` class provided by the old `webapp` framework. This handler is specific to the App Engine mail service, whereas webapp2 is provided by a third party.\n\n`InboundMailHandler` contains a `mapping()` convenience class method that\nreturns a pair matching all incoming email addresses to the mail handler and of\ncourse you can call it on any subclass of `InboundMailHandler` you code: \n\n app = webapp2.WSGIApplication([LogSenderHandler.mapping()], debug=True)\n\nThe `InboundEmailMessage` object (`mail_message` in this example) contains the\nemail message. Its `bodies()` method returns the bodies within the message. If\nyou call `bodies()` without arguments, it returns an iterator that yields HTML\nbodies first, then plain text bodies. If you want just HTML or just plain text,\nyou can pass an argument to `bodies()`: \n\n plaintext_bodies = mail_message.bodies('text/plain')\n html_bodies = mail_message.bodies('text/html')\n\n for content_type, body in html_bodies:\n decoded_html = body.decode()\n # ...\n\nThe `InboundEmailMessage` object includes attributes to access other message\nfields:\n\n- `subject` contains the message subject.\n- `sender` is the sender's address e.g. `\"Nobody \u003cnobody@example.com\u003e\"`.\n- `to` is a comma-separated list of the message's primary recipients e.g. `\"Joe \u003cjoe@example.com\u003e, Bill \u003cbill@example.com\u003e\"`.\n- `cc` contains a comma-separated list of the cc recipients e.g. `\"Joe \u003cjoe@example.com\u003e, Bill \u003cbill@example.com\u003e\"`.\n- `date` returns the message date.\n- `attachments` is a list of [`Attachment`](/appengine/docs/legacy/standard/python/refdocs/google.appengine.api.mail#google.appengine.api.mail.Attachment) objects, possibly empty.\n- `original` is the complete message, including data not exposed by the other fields such as email headers, as a Python [`email.message.Message`](http://docs.python.org/library/email.message.html).\n\nSimulating incoming messages with the local development server\n--------------------------------------------------------------\n\nOnce you set up your app to handle incoming email, you can use the\ndevelopment server console to simulate incoming email messages:\n\n1. Access the development server as an administrator by going to \u003chttp://localhost:8080/console\u003e and selecting **Sign in as administrator**.\n2. In the development server, click **Inbound Mail** in the navigation.\n3. Fill out the form that appears, and click **Send Email**.\n\n To learn more, including how to get the development server running, see\n [the Python Development Server](/appengine/docs/legacy/standard/python/tools/using-local-server)."]]