As mensagens de email enviadas para a sua app são implementadas como pedidos HTTP que contêm dados MIME. Para processar mensagens de email recebidas, associa endereços de email a processadores de scripts na configuração da app e, em seguida, inclui os processadores no código da app.
O email recebido gera pedidos HTTP, que são transmitidos aos scripts adequados. Os scripts que processam o email recebido têm de residir no seu serviço predefinido.
Para mais informações sobre o serviço de correio, consulte a vista geral da API Mail.
Configurar a sua aplicação para receber emails
Quando cria uma nova app, o email recebido está desativado por predefinição. Para ativar o email recebido, tem de modificar o ficheiro app.yaml
no seu serviço predefinido.
Adicione uma secção
inbound_services
que ative o serviço de email recebido. Por exemplo:Se não ativar o email recebido incluindo esta secção no ficheiro de configuração, o email recebido é desativado e as mensagens de email enviadas para a app são ignoradas.
Adicione mapeamentos que associam endereços de email mapeados por URL a controladores de scripts.
Para o serviço predefinido, o endereço de email para receber emails tem o seguinte formato:
[STRING]@[Google Cloud project ID].appspotmail.com
Para serviços não predefinidos, o endereço de email tem o seguinte formato:
[STRING]@[servicename]-dot-[Google Cloud project ID].appspotmail.com
As mensagens de email são enviadas para a sua app como pedidos HTTP POST através do seguinte URL, em que [ADDRESS] é um endereço de email completo, incluindo o nome do domínio:
/_ah/mail/[ADDRESS]
Para processar emails recebidos na sua app, mapeie os URLs de email para processadores no ficheiro
app.yaml
:No exemplo acima,
/_ah/mail/.+
corresponde a todos os emails enviados para a app. Se preferir, pode configurar vários controladores para diferentes endereços de email, como no exemplo seguinte:Os URLs das mensagens de email recebidas são comparados com esta lista do primeiro ao último. Por isso, se um URL de uma mensagem de email corresponder a mais do que um padrão, o processador correspondente executado é o primeiro. Isto permite-lhe incluir um controlador "catchall" como o último mapeamento. Os controladores são executados no módulo predefinido (ou na versão da aplicação).
Processamento de emails recebidos
O SDK Python define InboundMailHandler
, uma classe de app Web para processar emails recebidos. InboundMailHandler
está no pacote
google.appengine.ext.webapp.mail_handlers
.
Para usar a app InboundMailHandler
:
- Crie uma subclasse para
InboundMailHandler
e substitua o métodoreceive()
. - Chame o método
receive()
com um argumento da classeInboundEmailMessage
, definido pelo SDK Python.
Por exemplo, pode criar uma instância de InboundEmailMessage
da seguinte forma:
InboundMailHandler
contém um método de classe de conveniência mapping()
que devolve um par que corresponde a todos os endereços de email recebidos ao controlador de email e, naturalmente, pode chamá-lo em qualquer subclasse de InboundMailHandler
que codifique:
O objeto InboundEmailMessage
(mail_message
neste exemplo) contém a mensagem de email. O respetivo método bodies()
devolve os corpos na mensagem. Se chamar bodies()
sem argumentos, devolve um iterador que produz primeiro corpos HTML e, em seguida, corpos de texto simples. Se quiser apenas HTML ou apenas texto simples,
pode transmitir um argumento para bodies()
:
O objeto InboundEmailMessage
inclui atributos para aceder a outros campos de mensagens:
subject
contém o assunto da mensagem.sender
é a morada do remetente, por exemplo,"Nobody <nobody@example.com>"
.to
é uma lista separada por vírgulas dos destinatários principais da mensagem, por exemplo,"Joe <joe@example.com>, Bill <bill@example.com>"
.cc
contém uma lista separada por vírgulas dos destinatários em CC, por exemplo,"Joe <joe@example.com>, Bill <bill@example.com>"
.date
devolve a data da mensagem.attachments
é uma lista deAttachment
objetos, que pode estar vazia.original
é a mensagem completa, incluindo dados não expostos pelos outros campos, como cabeçalhos de email, como umemail.message.Message
do Python.
Simular mensagens recebidas com o servidor de desenvolvimento local
Depois de configurar a sua app para processar emails recebidos, pode usar a consola do servidor de desenvolvimento para simular mensagens de email recebidas:
- Aceda ao servidor de desenvolvimento como administrador acedendo a http://localhost:8080/console e selecionando Iniciar sessão como administrador.
- No servidor de desenvolvimento, clique em Correio recebido na navegação.
Preencha o formulário apresentado e clique em Enviar email.
Para saber mais, incluindo como executar o servidor de desenvolvimento, consulte o servidor de desenvolvimento do Python.