Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
As mensagens de e-mail enviadas para seu app são implementadas como solicitações HTTP contendo dados MIME. Para processar as mensagens de e-mail recebidas, associe os endereços de e-mail aos gerenciadores de script na configuração do app e inclua os gerenciadores no código do app.
O e-mail recebido gera solicitações HTTP, que são passadas aos scripts apropriados. Os scripts que gerenciam os e-mails recebidos precisam residir em seu serviço padrão.
Quando você cria um novo app, o recebimento de e-mail está desativado por padrão. Para ativar o recebimento de e-mail, é preciso modificar o arquivo app.yaml em seu serviço padrão.
Adicione uma seção inbound_services que ative o serviço de recebimento de e-mail.
Exemplo:
inbound_services:-mail
Se você não ativar o recebimento de e-mail incluindo essa seção no seu arquivo de configuração, o recurso será desativado e as mensagens de e-mail enviadas para o aplicativo serão ignoradas.
Adicione mapeamentos que associem os endereços de e-mail mapeados por URL aos gerenciadores de script.
Para o serviço padrão, o endereço de e-mail de recebimento tem este formato:
[STRING]@[Google Cloud projectID].appspotmail.com
Para serviços não padrão, o endereço de e-mail tem este formato:
As mensagens de e-mail são enviadas para seu app como solicitações POST HTTP usando o URL a seguir, em que [ADDRESS] é um endereço de e-mail completo, incluindo o nome do domínio:
/_ah/mail/[ADDRESS]
Para manipular os e-mails recebidos em seu app, mapeie os URLs de e-mail para os gerenciadores no arquivo app.yaml:
No exemplo acima, /_ah/mail/.+ corresponde a todos os e-mails endereçados ao app. Se preferir, configure vários gerenciadores para endereços de e-mail diferentes, como no exemplo a seguir:
URLs de mensagens de e-mail recebidas são comparados a essa lista, do primeiro ao último, e se o URL de uma mensagem de e-mail corresponder a mais de um padrão, o primeiro gerenciador correspondente será o executado. Isso possibilita incluir um gerenciador "pega-tudo" como o último mapeamento. Os gerenciadores são executados no módulo padrão (ou versão do aplicativo).
Como manipular os e-mails recebidos
O SDK do Python define InboundMailHandler, uma classe webapp para manipular e-mails recebidos. InboundMailHandler está no pacote google.appengine.ext.webapp.mail_handlers.
Para usar InboundMailHandler:
Crie uma subclasse para InboundMailHandler e modifique o método receive().
Chame o método receive() com um argumento da classe InboundEmailMessage, definido pelo SDK do Python.
Por exemplo, é possível criar uma instância de InboundEmailMessage como esta:
importloggingfromgoogle.appengine.ext.webapp.mail_handlersimportInboundMailHandlerimportwebapp2classLogSenderHandler(InboundMailHandler):defreceive(self,mail_message):logging.info("Received a message from: "+mail_message.sender)
InboundMailHandler contém um método de classe de conveniência mapping(), que retorna ao gerenciador de e-mails um par correspondente a todos os endereços de e-mail recebidos. É possível, claro, chamá-lo em qualquer subclasse de InboundMailHandler que você codificar:
O objeto InboundEmailMessage (mail_message neste exemplo) contém a mensagem de e-mail. O método bodies() retorna os corpos dentro da mensagem. Se você chamar bodies() sem argumentos, ele retornará um iterador que produz corpos HTML primeiro e, em seguida, corpos de texto simples. Se quiser apenas HTML ou apenas texto simples, passe um argumento para bodies():
O objeto InboundEmailMessage inclui atributos para acessar outros campos de mensagens:
subject contém o assunto da mensagem.
sender é o endereço do remetente, como "Nobody <nobody@example.com>".
to é uma lista separada por vírgulas dos principais destinatários da mensagem, por exemplo, "Joe <joe@example.com>, Bill <bill@example.com>".
cc contém uma lista separada por vírgulas dos destinatários cc, por exemplo, "Joe <joe@example.com>, Bill <bill@example.com>".
date retorna a data da mensagem.
attachments é uma lista de objetos Attachment, possivelmente vazia.
original é a mensagem completa, incluindo dados não expostos por outros campos, como cabeçalhos de e-mail, na forma de email.message.Message do Python (em inglês).
Como simular mensagens recebidas no servidor de desenvolvimento local
Depois de definir o aplicativo para processar o recebimento de e-mail, é possível usar o console do servidor de desenvolvimento para simular mensagens de e-mail recebidas.
Acesse o servidor de desenvolvimento como administrador. Para isso, navegue até
http://localhost:8080/console e
clique em Fazer login como administrador.
No servidor de desenvolvimento, clique em E-mail de entrada na navegação.
Preencha o formulário exibido e clique em Enviar e-mail.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Informações incorretas ou exemplo de código","incorrectInformationOrSampleCode","thumb-down"],["Não contém as informações/amostras de que eu preciso","missingTheInformationSamplesINeed","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 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)."]]