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

Bem-vindo ao último dia da nossa série 12 Dias de DigitalOcean! Nós percorremos um longo caminho, construindo um Serviço de Processamento de Recibos por 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 emails de confirmação de volta ao remetente com os detalhes do recibo, links para os 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ê Aprenderá

Ao final deste tutorial, você saberá como:

  1. Usar a API Resend para enviar emails 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 um fluxo de trabalho completo de processamento de e-mails.

🛠 O Que Você Precisará

Se você deseja acompanhar, presumimos que você seguiu Dia 11: Salve Dados de Recibo e Anexos no Google Sheets e já tem:

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

  • Uma conta Resend: Inscreva-se em Resend.
  • Uma chave API: Gere-a a partir do seu painel do Resend.

Passo 1: Crie uma Conta no Resend e Obtenha a Chave da API

Para enviar e-mails programaticamente, usaremos Resend, uma API amigável para desenvolvedores que permite o envio de e-mails transacionais. Ela simplifica o envio de e-mails, para que você não precise se preocupar em configurar um servidor de e-mails, gerenciar configurações SMTP ou se preocupar com filtros de spam.

  1. Primeiro, acesse Resend e inscreva-se para uma conta gratuita. Uma vez logado, navegue até a seção Chaves da API do 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 como Acesso Total.

  3. Copie a Chave da API: Sua chave da 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 fizemos 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 do DigitalOcean App Platform, encontre seu aplicativo Flask e navegue até a aba Configurações. Em Variáveis de Ambiente, adicione as duas variáveis:

    • Chave: RESEND_API_KEY

      • Valor: Cole a chave API que você gerou na Etapa 1.
    • Chave: RESEND_EMAIL_FROM

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

Passo 3: Instale a Biblioteca Resend para Python

Em seguida, vamos instalar a biblioteca Resend para Python para gerenciar a API para nós. Isso 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 Emails

Agora é hora de adicionar a lógica para enviar emails de confirmação. Pense nisso como enviar um email para um amigo para informá-lo que seu pacote chegou—só que aqui, é para recibos.

Vamos escrever uma função send_confirmation_email que recebe o email do destinatário, detalhes do recibo, links de anexos e URL da Planilha do Google. Usando o Resend, ela irá formatar isso em um email 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 em 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 a aplicação Flask atualizada, siga os passos do Dia 7: Construindo e Implementando o Processador de Recibos Baseado em Email. Aqui está um resumo rápido:

  1. Envie Seu Código Atualizado para o GitHub: Após fazer as mudanças necessárias na sua aplicação Flask, faça commit e envie o código atualizado para o GitHub. Isso irá acionar uma implementação automática na Plataforma de Aplicativos do DigitalOcean.

    git add .
    git commit -m "Adicionar integração com o Resend para emails 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, navegue até 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 foi iniciado 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 e-mail seja processado, os anexos sejam decodificados e carregados no DigitalOcean Spaces, os detalhes do recibo e as URLs dos anexos sejam salvos no Google Sheets, e um e-mail de confirmação seja enviado ao remetente.

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

  1. Enviar um E-mail de Teste: Envie um e-mail para o Postmark com um corpo de texto e um anexo. Se você não tiver certeza de como configurar o Postmark, confira Dia 8: Conectando o Postmark ao Seu App Flask, onde mostramos como configurar o Postmark para encaminhar e-mails para seu aplicativo.

  2. Verificar JSON de Atividade do Postmark: No painel do Postmark, vá para a aba Atividade. Localize o e-mail que você enviou e verifique se 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 e-mail para o seu aplicativo, conforme configurado no Dia 8.

  3. Monitorar os Registos: Verifique os registos em tempo de execução no painel da Plataforma de Aplicativos DigitalOcean para garantir que a aplicação processe a carga JSON. Deverá ver registos que mostrem que os detalhes do recibo foram extraídos e os anexos foram carregados para os Espaços da DigitalOcean. Pode aceder aos registos em tempo de execução na guia Registos do painel da Plataforma de Aplicativos DigitalOcean. Se não estiver familiarizado com os registos DigitalOcean, exploramos isso durante o Dia 9: Automatização da Análise de Recibos com o Agente GenAI da DigitalOcean.

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

  5. Verificar o Google Sheets: Abra a sua Planilha do Google e confirme que uma nova linha com detalhes do recibo e URLs de anexos foi adicionada, conforme configurado no Dia 11: Salvando Detalhes do Recibo no Google Sheets. A linha deve incluir:

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

  6. Verificar 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 são registrados.

Resolução de Problemas

Se o fluxo de trabalho não funcionar conforme o esperado, siga alguns passos de resolução de problemas:

  1. Verifique o Painel de Reenvio de Emails em busca de Erros: Acesse o painel de reenvio para ver se ocorreram erros ao enviar o email de confirmação.

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

  3. Inspeccione os Registos de Tempo de Execução da DigitalOcean: Abra a guia de Registos de Tempo de Execução no painel da Plataforma de Aplicativos da DigitalOcean para verificar erros durante o processamento do email ou ao enviar anexos. Estes registos podem fornecer informações úteis, especialmente para interações com o Postmark ou o Reenvio.

  4. Revisar Atividade do Postmark: Na aba Atividade do Postmark, confirme se o e-mail de teste foi devidamente encaminhado para o seu aplicativo Flask. Se houver algum problema, o Postmark exibirá erros relacionados a encaminhamentos ou problemas de configuração.

🎁 Conclusão

Parabéns! Você completou 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ê:

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

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

📚 Os 12 Dias do DigitalOcean

Isso marca o fim da série 12 Dias do DigitalOcean. Nos últimos 12 dias, construímos duas aplicações do mundo real, um passo de cada vez. Ao longo do caminho, você utilizou ferramentas como Funções Serverless do DigitalOcean, App Platform, Armazenamento de Objetos Spaces, PostgreSQL, DigitalOcean GenAI, Twilio, API do Google Sheets, Postmark, PaperTrail e Resend. Cada parte se uniu para formar algo maior do que a soma de suas partes.

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

🎂 Dias 1–6: Crie 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.

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

📧 Dias 7–12: Construir um Processador de Recibo 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 gerencia recibos de ponta a ponta.

O Que Você Aprendeu

  1. Armazenamento e Gerenciamento de Dados: Você usou PostgreSQL para armazenamento de dados estruturados e Google Sheets para registro de dados fácil e compartilhável.
  2. Automatizando Fluxos de Trabalho: Com as Funções da DigitalOcean e gatilhos de agendamento, você automatizou processos e fez seus aplicativos funcionarem como um relógio.
  3. Adicionando Inteligência aos Seus Aplicativos: Ao integrar o GenAI da DigitalOcean, você trouxe extração e organização de dados inteligentes para seus fluxos de trabalho, tornando seus aplicativos mais inteligentes e capazes.
  4. Gerenciando Arquivos com Segurança: Você trabalhou com os Spaces da DigitalOcean para armazenar e gerenciar arquivos de forma confiável e escalável.
  5. Aprimorando 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 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ê acompanhar, adoraria ver o que você cria—sinta-se à vontade para compartilhar seu progresso ou feedback comigo no Twitter.

Mantenha simples. Construa algo útil. Boa construção! 🚀

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