12 Dias de DigitalOcean (Dia 12) – Enviando E-mails de Confirmação com Reenvio

Bem-vindo ao último dia da nossa série 12 Dias de DigitalOcean! Chegamos longe, construindo um Serviço de Processamento de Recibos Baseado em Email que extrai detalhes de recibos do Postmark usando o Agente GenAI da DigitalOcean, armazena com segurança anexos no DigitalOcean Spaces, e salva os dados extraídos no Google Sheets.

Hoje, vamos adicionar o toque final—enviando e-mails de confirmação de volta ao remetente com os detalhes do recibo, links dos anexos, e um link para a Planilha do Google. Este passo final conecta tudo, garantindo que os usuários recebam um feedback imediato de que seus recibos foram processados com sucesso.

🚀 O Que Você Vai Aprender

No final deste tutorial, você saberá como:

  1. Usar a API Resend para enviar e-mails de confirmação programaticamente.
  2. Gerencie com segurança credenciais sensíveis usando variáveis de ambiente.
  3. Formate e envie e-mails transacionais com detalhes do recibo, links de anexos e URLs de planilhas.
  4. Teste e solucione problemas em um fluxo de trabalho completo de processamento de e-mails.

🛠 O que você vai precisar

Se você deseja acompanhar a construção, presumimos que você seguiu o Dia 11: Salvar Dados de Recibo e Anexos no Google Sheets e já possui:

Se você está apenas interessado em aprender como integrar o Resend para enviar e-mails de confirmação, você vai precisar de:

  • Uma conta Resend: Cadastre-se em Resend.
  • Uma chave de API: Gere-a no seu painel Resend.

Passo 1: Criar uma Conta no Resend e Obter a Chave da API

Para enviar e-mails programaticamente, vamos usar o Resend, uma API amigável para desenvolvedores para envio de e-mails transacionais. Ele simplifica o envio de e-mails para que você não precise lidar com a configuração de um servidor de e-mail, gerenciamento de configurações SMTP ou se preocupar com filtros de spam.

  1. Primeiro, acesse o Resend e crie uma conta gratuita. Após fazer login, vá para a seção de Chaves da API no painel e gere uma nova chave da API.

  2. Dê à sua chave da API um nome descritivo, como Aplicativo Processador de Recibos, e defina sua permissão para Acesso Total.

  3. Copie a Chave da API: Sua chave de API será mostrada apenas uma vez – copie-a e mantenha-a segura. Você precisará dela na próxima etapa para autenticar seu aplicativo com o Resend.

Passo 2: Atualize suas Variáveis de Ambiente

Agora que temos a chave da API do Resend, vamos salvá-la como uma variável de ambiente no DigitalOcean, assim como temos feito ao longo desta série.

Para a integração com o Resend, precisamos salvar duas variáveis de ambiente:

  • RESEND_API_KEY: A chave da API que você gerou no Passo 1, que autentica seu aplicativo com o Resend.
  • RESEND_EMAIL_FROM: O endereço de e-mail do remetente que você usará para enviar e-mails de confirmação. Este deve ser um endereço verificado em sua conta do Resend.

Para adicionar essas variáveis, siga estes passos:

  1. Vá para o painel da sua Plataforma de Aplicativos DigitalOcean, encontre seu aplicativo Flask e acesse a guia Configurações. Em Variáveis de Ambiente, adicione as duas variáveis:
    • Chave: RESEND_API_KEY

      • Valor: Cole a chave da API que você gerou no Passo 1.
    • Chave: RESEND_EMAIL_FROM

      • Valor: Insira um endereço de e-mail do remetente verificado da sua conta Resend.
  2. Salve suas alterações para disponibilizar a chave da API do Resend para o seu aplicativo Flask, que atualizaremos em seguida.

Passo 3: Instale a Biblioteca Resend Python

Em seguida, vamos instalar a biblioteca Resend Python para lidar com a API para nós. Ela mantém seu código limpo e evita lidar com solicitações HTTP brutas. Execute isso no seu terminal:

pip install resend

Passo 4: Atualize requirements.txt

Em vez de editar requirements.txt manualmente, use pip freeze para listar todas as dependências instaladas com versões exatas. Execute isso:

pip freeze > requirements.txt

Isso atualiza requirements.txt com tudo o que seu aplicativo precisa, incluindo resend.

Passo 5: Escreva a Função para Enviar E-mails

Agora é hora de adicionar a lógica para enviar e-mails de confirmação. Pense nisso como enviar um e-mail para um amigo avisando que o pacote dele chegou – só que aqui, é para recibos.

Vamos escrever uma função send_confirmation_email que recebe o e-mail do destinatário, detalhes do recibo, links de anexo e URL da Planilha do Google. Usando o Resend, ele irá formatar isso em um e-mail e enviá-lo. Aqui está a função:

def send_confirmation_email(to_email, receipt_data, attachment_urls, spreadsheet_url):
    """
    Send a confirmation email with receipt details and attachment URLs.
    """
    email_from = os.getenv('RESEND_EMAIL_FROM')  # Defina isso nas suas variáveis de ambiente
    subject = "Receipt Processed Successfully"
    email_body = f"""
    <h1>Receipt Confirmation</h1>
    <p>Your receipt has been successfully processed. Here are the details:</p>
    <ul>
        <li><strong>Vendor:</strong> {receipt_data.get('vendor', 'N/A')}</li>
        <li><strong>Amount:</strong> {receipt_data.get('amount', 'N/A')}</li>
        <li><strong>Currency:</strong> {receipt_data.get('currency', 'N/A')}</li>
        <li><strong>Date:</strong> {receipt_data.get('date', 'N/A')}</li>
    </ul>
    <p><strong>Attachments:</strong></p>
    <ul>
        {''.join(f'<li><a href="{url["url"]}">{url["file_name"]}</a></li>' for url in attachment_urls)}
    </ul>
    <p>You can view the processed data in the spreadsheet: <a href="{spreadsheet_url}">Google Spreadsheet</a></p>
    """
    try:
        resend.Emails.send({
            "from": email_from,
            "to": to_email,
            "subject": subject,
            "html": email_body
        })
        logging.info(f"Confirmation email sent to {to_email}.")
    except Exception as e:
        logging.error(f"Failed to send confirmation email: {e}")

Passo 5: Implementar no DigitalOcean

Para implementar o aplicativo Flask atualizado, siga os passos do Dia 7: Construindo e Implementando o Processador de Recibos Baseado em E-mail. Aqui está um resumo rápido:

  1. Envie Seu Código Atualizado para o GitHub: Após fazer as alterações necessárias no seu aplicativo Flask, faça commit e envie o código atualizado para o GitHub. Isso irá acionar uma implantação automática na Plataforma de Aplicativos do DigitalOcean.

    git add .
    git commit -m "Adicionar integração do Resend para e-mails de confirmação"
    git push origin main
    
  2. Monitore a Implantação: Você pode acompanhar o progresso na seção Implantações do painel do seu aplicativo.

  3. Verifique Sua Implantação: Após a conclusão da implantação, acesse a URL pública do seu aplicativo e teste sua funcionalidade. Você também pode verificar os logs de runtime no painel para confirmar que o aplicativo iniciou com sucesso.

  4. Verifique os Logs de Runtime: Se algo não estiver funcionando como esperado, use a aba Logs de Runtime no painel da App Platform para depurar problemas de runtime. Procure por quaisquer erros relacionados à API Resend ou outros componentes do aplicativo.

Passo 5: Testar Todo o Fluxo de Trabalho

Agora que seu aplicativo está totalmente configurado e pronto, é hora de testar todo o fluxo de trabalho. Vamos garantir que o corpo do email seja processado, os anexos sejam decodificados e enviados para o DigitalOcean Spaces, os detalhes do recibo e URLs de anexos sejam salvos no Google Sheets, e um email de confirmação seja enviado para o remetente.

Aqui está como você pode testar passo a passo:

  1. Enviar um Email de Teste: Envie um email para o Postmark com um corpo de texto e um anexo. Se você não tem certeza de como configurar o Postmark, confira Dia 8: Conectando o Postmark ao Seu Aplicativo Flask, onde mostramos como configurar o Postmark para encaminhar emails para o seu aplicativo.

  2. Verificar JSON de Atividade do Postmark: No painel do Postmark, acesse a aba Atividade. Localize o email que você enviou e certifique-se de que o payload JSON inclui o corpo do texto e os dados do anexo codificados em Base64. Isso confirma que o Postmark está encaminhando corretamente os dados do email para o seu aplicativo, conforme configuramos no Dia 8.

  3. Monitorar os Logs: Verifique os logs de tempo de execução no painel da Plataforma de Aplicativos DigitalOcean para garantir que o aplicativo processe a carga JSON. Você deve ver logs mostrando que os detalhes do recibo foram extraídos e os anexos foram enviados para DigitalOcean Spaces. Você pode acessar os logs de tempo de execução na guia Logs do painel da Plataforma de Aplicativos DigitalOcean. Se você não estiver familiarizado com os logs da DigitalOcean, exploramos isso durante o Dia 9: Automatizando a Análise de Recibos com o Agente GenAI da DigitalOcean.

  4. Verificar o Upload de Espaços: Visite seu Espaço DigitalOcean para confirmar que os arquivos foram enviados com sucesso. Você deverá ver os anexos em seu bucket conforme configurado no Dia 10: Armazenando Anexos no Espaço DigitalOcean. Se tudo ocorreu como esperado, os URLs dos anexos estarão acessíveis.

  5. Verificar as Planilhas do Google: Abra sua Planilha do Google e confirme que uma nova linha com detalhes do recibo e URLs dos anexos foi adicionada, conforme configuramos no Dia 11: Salvando Detalhes do Recibo nas Planilhas do Google. A linha deve incluir:

    • Fornecedor, valor, moeda e data extraídos do corpo do e-mail.
    • URLs separados por vírgulas para os anexos enviados na última coluna.

  6. Verifique o E-mail de Confirmação: Por fim, verifique a caixa de entrada do endereço de e-mail do remetente para garantir que o e-mail de confirmação tenha sido recebido. Este e-mail deve conter:

    • Os detalhes do recibo extraídos (fornecedor, valor, moeda e data).
    • Links para os anexos enviados no DigitalOcean Spaces.
    • Um link para a Planilha do Google onde os dados do recibo estão registrados.

Resolução de Problemas

Se o fluxo de trabalho não funcionar como esperado, aqui estão algumas etapas de solução de problemas a seguir:

  1. Verifique o Painel de Reenvio de E-mails para Erros: Visite o painel de reenvio para ver se ocorreram erros ao enviar o e-mail de confirmação.

  2. Verifique as Variáveis de Ambiente: Certifique-se de que a chave da API (RESEND_API_KEY) e o e-mail do remetente (RESEND_EMAIL_FROM) estejam configurados corretamente em suas variáveis de ambiente no painel da Plataforma de Aplicativos da DigitalOcean.

  3. Inspeccione os Logs de Tempo de Execução da DigitalOcean: Abra a guia de Logs de Tempo de Execução no painel da Plataforma de Aplicativos da DigitalOcean para verificar erros ao processar o e-mail ou ao enviar anexos. Esses logs podem fornecer insights úteis, especialmente para interações com Postmark ou Resend.

  4. Revise a Atividade do Postmark: Na guia de Atividade do Postmark, confirme se o e-mail de teste foi encaminhado corretamente para o seu aplicativo Flask. Se houver problemas, o Postmark exibirá erros relacionados ao encaminhamento ou problemas de configuração.

🎁 Conclusão

Parabéns! Você concluiu com sucesso a série 12 Dias de DigitalOcean e construiu um Serviço de Processamento de Recibos Baseado em E-mail totalmente funcional.

Hoje, você:

  • Integrou a API do Resend para enviar e-mails transacionais.
  • Configurou variáveis de ambiente para gerenciar com segurança credenciais sensíveis.
  • Enviou e-mails de confirmação com detalhes do recibo, links de anexos e uma URL de planilha.
  • Testou todo o fluxo de trabalho, desde o envio do e-mail até a confirmação final.

Ao adicionar emails de confirmação, você concluiu um projeto que processa emails, extrai detalhes, armazena anexos e mantém tudo organizado no Google Sheets. É amigável ao usuário, prático e pronto para resolver problemas do mundo real.

📚 Os 12 Dias da DigitalOcean

Este marca o fim da série Os 12 Dias da DigitalOcean. Ao longo dos últimos 12 dias, construímos duas aplicações do mundo real, passo a passo. No caminho, você utilizou ferramentas como Funções Sem Servidor da DigitalOcean, Plataforma de Aplicativos, Armazenamento de Objetos Spaces, PostgreSQL, GenAI da DigitalOcean, Twilio, API do Google Sheets, Postmark, PaperTrail e Resend. Cada peça se uniu para formar algo maior do que a soma de suas partes.

Aqui está um resumo rápido do que você construiu:

🎂 Dias 1–6: Construir um Serviço de Lembrete de Aniversário

Este aplicativo rastreia aniversários e envia lembretes por SMS automaticamente. É leve, sem servidor e fácil de manter.

Ao chegar no Dia 6, você terá um serviço totalmente automatizado em execução na nuvem. Simplesmente funciona.

📧 Dias 7–12: Construir um Processador de Recibos por E-mail

Este aplicativo lida com recibos enviados por e-mail, extrai os detalhes necessários e organiza tudo em um banco de dados.

Até o Dia 12, você construiu uma ferramenta completa que lida com recibos de ponta a ponta.

O Que Você Aprendeu

  1. Armazenando e Gerenciando Dados: Você usou o PostgreSQL para armazenamento de dados estruturados e o Google Sheets para registro de dados fácil e compartilhável.
  2. Automatização de Fluxos de Trabalho: Com Funções do DigitalOcean e agendamento de gatilhos, você automatizou processos e fez com que seus aplicativos funcionassem como um relógio.
  3. Adicionando Inteligência aos Seus Aplicativos: Ao integrar GenAI da DigitalOcean, você trouxe extração inteligente de dados e organização para seus fluxos de trabalho, tornando seus aplicativos mais inteligentes e capazes.
  4. Manuseio Seguro de Arquivos: Você trabalhou com Spaces da DigitalOcean para armazenar e gerenciar arquivos de forma confiável e escalável.
  5. Melhorando Aplicativos com APIs: APIs como Twilio, Postmark e Resend trouxeram funcionalidades como notificações SMS, encaminhamento de e-mails e e-mails de confirmação para seus aplicativos.
  6. Depuração e Monitoramento: Usando ferramentas como o Papertrail, você aprendeu a depurar e monitorar seus aplicativos de forma eficaz, mantendo-os funcionando sem problemas.

O que vem a seguir

Isso é apenas o começo – o que você aprendeu aqui pode ser aplicado a inúmeros outros projetos. Aqui estão algumas maneiras de continuar:

Se você seguir em frente, adoraria ver o que você cria – sinta-se à vontade para compartilhar seu progresso ou feedback comigo no Twitter.

Mantenha simples. Construa algo útil. Feliz desenvolvimento! 🚀

Source:
https://www.digitalocean.com/community/tutorials/sending-confirmation-emails-with-resend