Enviando e-mails de aplicativos Python Flask com o Twilio SendGrid

Publicados: 2020-06-30

Determinar se deve construir ou comprar sua infraestrutura de e-mail não é uma decisão fácil. Você tem a largura de banda para suportar problemas de entrega? Você será capaz de acompanhar seu envio à medida que cresce? O que é mais rentável? Embora haja vários fatores a serem considerados, essa é uma conversa para outro guia (como este guia Construa ou Compre ).

Em vez disso, este tutorial mostrará como é fácil enviar e-mail por meio de um serviço de e-mail dedicado. Veremos como entregar email por meio do Twilio SendGrid usando a estrutura Flask e a extensão Flask-Mail .

Ferramentas de tutorial

Para seguir este tutorial você precisa dos seguintes itens:

  • Python 3.6 ou mais recente. Se o seu sistema operacional não fornece um interpretador Python 3.6+, você pode acessar python.org para baixar um instalador.
  • Uma conta gratuita do Twilio SendGrid. Se você é novo no Twilio SendGrid, inscreva-se para uma conta de avaliação . Com uma conta de avaliação, você pode enviar 40.000 e-mails por 30 dias, depois 100 e-mails por dia para sempre.

Configurando o SendGrid

Antes de poder enviar e-mail por meio do SendGrid, você precisa criar uma chave de API que será usada para autenticar o acesso aos serviços do SendGrid. Faça login na sua conta do SendGrid, clique na barra lateral esquerda, selecione “Configurações” e, em seguida, Chaves de API . Clique em “Criar chave de API”.

Dê à sua chave de API um nome amigável (mantenha-o simples e direto para que você se lembre a que se refere!). Para este tutorial, escolhemos o nome Flask-Mail . Selecionamos “Acesso total” para permissões, o que dá à chave a capacidade de executar todas as funções de envio de e-mail necessárias (acesso aos endpoints GET, PATCH, PUT, DELETE e POST). Se você preferir criar uma chave que tenha permissões muito específicas, selecione “Acesso restrito” e configure seu acesso conforme necessário.

Ao clicar no botão “Criar e Visualizar”, você será presenteado com sua chave. Esta chave nunca mais será mostrada, então você precisa clicar nela para copiá-la para a área de transferência. Em seguida, cole-o em um documento seguro para poder usá-lo mais tarde. Se você perder sua chave, precisará gerar uma nova. Depois de salvar sua chave, você pode clicar no botão "Concluído".

Construindo um ambiente Python

Agora que temos a configuração completa, podemos nos aprofundar em como enviar e-mail de aplicativos Python Flask. Começaremos criando um novo diretório em seu computador chamado *twilio-sendgrid-tests* (ou algo semelhante) e, em seguida, criando um novo ambiente virtual Python dentro dele.

Para usuários de Mac e Unix, os comandos são:

Para usuários do Windows, os comandos são:

Em seguida, instale o Flask, Flask-Mail e python-dotenv em seu ambiente virtual:

Configurando um aplicativo Flask

Vamos construir um aplicativo Flask e Flask-Mail inicial no arquivo app.py :

Aqui você pode ver como configurar corretamente o Flask-Mail para usar o serviço SMTP do SendGrid. As configurações importantes são:

  • O servidor de correio deve ser `smtp.sendgrid.net`.
  • A porta de correio deve ser 587. (Você sabe quais portas usar quando? Confira esta postagem no blog. )
  • O TLS deve estar ativado. (Qual é a diferença entre SSL e TLS ?)
  • A autenticação é necessária. Para o nome de usuário, você deve usar `apikey` (isso é o mesmo para todas as contas do SendGrid). A senha é a chave da API SendGrid que você criou na seção anterior.

Para este aplicativo Flask, adicionamos as configurações acima nas chaves de configuração apropriadas para a extensão Flask-Mail. Por motivos de segurança, importamos a chave de API de uma variável de ambiente chamada `SENDGRID_API_KEY`. Também definimos um endereço de e-mail do remetente padrão de uma variável de ambiente. Este é o endereço de e-mail que aparecerá no campo “de” de todos os e-mails por padrão.

Crie um arquivo .env com as duas variáveis ​​necessárias:

O Flask importará automaticamente as variáveis ​​definidas no arquivo .env (desde que você tenha o pacote python-dotenv instalado), então isso é suficiente para obter essas duas variáveis ​​na configuração do aplicativo Flask.

Enviando um e-mail de teste

Vamos ver como você pode enviar um e-mail de teste do shell do Python:

Observe que iniciamos o shell do Python com o comando `flask shell`. Isso garantirá que o aplicativo Flask que criamos em app.py seja importado.

Uma vez no shell, importe a instância `mail` que criamos em app.py e a classe `Message` do Flask-Mail:

Em seguida, crie uma instância `Message`:

O último passo é enviar este e-mail:

E é isso! Se tudo correr conforme o planejado, o e-mail deve chegar em sua caixa de entrada em apenas alguns segundos.

Se você quiser ver um exemplo de rota do Flask que integra essa funcionalidade, aqui está um simples que você pode adicionar na parte inferior de app.py :

Para concluir o aplicativo de exemplo, você precisa adicionar o arquivo de modelo index.html . Primeiro crie um diretório para seus templates:

E, em seguida, escreva o seguinte conteúdo no arquivo templates/index.html :

Execute o aplicativo de teste com:

Em seguida, navegue até http://localhost:5000 em seu navegador da Web para acessar o aplicativo.

Agora você pode inserir um endereço de e-mail de destinatário e, ao clicar no botão, um e-mail de teste será enviado para esse endereço.

Solução de problemas de entrega

Ao usar o aplicativo Flask acima, você deve ter sucesso no envio de e-mails. Há uma chance, no entanto, de que seus e-mails não sejam entregues. Como o SendGrid envia e-mails de forma assíncrona, a maioria dos erros de entrega ocorre após o remetente concluir seu lado da transação, portanto, seu aplicativo não terá nenhuma indicação de que houve um erro. Se isso acontecer, é provável que o email tenha sido rejeitado pelo servidor de email do destinatário.

Felizmente, se você experimentar isso enviando um e-mail como descrevemos, você pode usar o painel do Twilio SendGrid para ajudá-lo a depurar o que aconteceu. No painel do SendGrid , clique em Atividade e depois no botão “Mostrar todas as atividades” no meio da página. Isso mostrará uma lista de todos os e-mails que você tentou enviar, indicando se eles foram entregues com sucesso ou não.

Você pode ver na imagem acima que um e-mail enviado para um endereço example.com não foi entregue. Para quaisquer e-mails que não foram entregues, você pode clicar no e-mail para ver informações detalhadas, incluindo quaisquer respostas de erro enviadas pelo servidor de e-mail do destinatário.

Depois de determinar por que seus e-mails não estão sendo enviados, há várias maneiras de resolver esses problemas de entrega. Se você encontrar vários erros de ortografia nos e-mails (por exemplo, @yaho.com ou @gmal.com), pode valer a pena explorar uma ferramenta de validação de e-mail para detectar erros ortográficos comuns em sua lista de contatos de e-mail.

Há muitos outros problemas que podem levar à falha na entrega, incluindo uma má reputação de envio ou endereço IP bloqueado. Saiba tudo sobre a capacidade de entrega de e-mail em nosso Guia de entrega de e-mail 2020 .

Conclusão

Como você pode ver no tutorial, o Twilio SendGrid se integra facilmente ao fluxo de trabalho de envio de e-mail do Flask, tornando o envio de e-mail uma tarefa simples.

Se agora você está se perguntando como recebe e-mails do Flask Framework em Python, não se preocupe, nós o cobrimos! Confira este artigo: Como receber e-mails com o Flask Framework para Python .

E, para obter mais recursos sobre como integrar com o Twilio SendGrid ou enviar por meio de nossas APIs, confira nosso Centro de conhecimento .