数字洋12天(第12天)- 通过重新发送发送确认电子邮件

欢迎来到我们 12 Days of DigitalOcean 系列的最后一天!我们走过了很长的路,构建了一个 基于电子邮件的收据处理服务,它使用 Postmark 提取收据详细信息,通过 DigitalOcean 的 GenAI Agent 安全地 将附件存储在 DigitalOcean Spaces 中,并 将提取的数据保存到 Google Sheets 中

今天,我们将添加最后的环节——向发件人发送包含收据详细信息、附件链接和 Google 表格链接的确认邮件。这最后一步将所有内容串联在一起,确保用户立即收到反馈,确认他们的收据已成功处理。

🚀 您将学习到的内容

在本教程结束时,您将知道如何:

  1. 使用 Resend API 以编程方式发送确认邮件。
  2. 使用环境变量安全管理敏感凭据。
  3. 格式化并发送带有收据详情、附件链接和电子表格 URL 的交易性电子邮件。
  4. 测试和排除完整的电子邮件处理工作流。

🛠 您需要准备

如果您想跟随操作,我们假设您已经按照 第11天:在 Google Sheets 中保存收据数据和附件 进行操作,并且已经准备好:

如果您只是想学习如何集成 Resend 以发送确认邮件,您将需要:

  • 一个 Resend 账户:在 Resend 注册。
  • 一个 API 密钥:从您的 Resend 仪表板生成。

步骤 1:创建一个 Resend 账户并获取 API 密钥

要通过程序发送电子邮件,我们将使用 Resend,这是一个用于发送交易邮件的开发人员友好型 API。它简化了发送电子邮件的过程,让您无需费力地设置电子邮件服务器、管理 SMTP 配置或担心垃圾邮件过滤器。

  1. 首先,前往 Resend 网站注册一个免费账户。登录后,转到仪表板的 API 密钥部分生成一个新的 API 密钥。

  2. 为您的 API 密钥起一个描述性名称,如 Receipt Processor App,并将其权限设置为 Full Access

  3. 复制API密钥: 您的API密钥只会显示一次,请复制并妥善保管。在下一步中,您将需要使用它来验证您的应用程序与Resend。

第2步:更新您的环境变量

现在我们已经获得了Resend API密钥,让我们将其保存为DigitalOcean中的环境变量,就像我们在本系列中一直在做的那样。

对于Resend集成,我们需要保存两个环境变量:

  • RESEND_API_KEY: 在第1步中生成的API密钥,用于验证您的应用程序与Resend。
  • RESEND_EMAIL_FROM: 您将用于发送确认邮件的发件人电子邮件地址。这应该是您在Resend帐户中验证过的地址。

要添加这些变量,请按照以下步骤进行:

  1. 前往您的DigitalOcean应用平台仪表板,找到您的Flask应用,并导航到设置选项卡。在环境变量下,添加这两个变量:
    • 键:RESEND_API_KEY

      • 值:粘贴您在步骤1中生成的API密钥。
    • 键:RESEND_EMAIL_FROM

      • 值:输入您Resend帐户中已验证的发件人电子邮件地址。
  2. 保存更改以使Resend API密钥可用于您的Flask应用,接下来我们将更新。

步骤 3:安装 Resend Python 库

接下来,我们将安装 Resend Python 库,用于处理 API。它可以使您的代码更整洁,避免直接处理原始的 HTTP 请求。在终端中运行以下命令:

pip install resend

步骤 4:更新 requirements.txt

不要手动编辑 requirements.txt,而是使用 pip freeze 列出所有已安装的依赖项及其确切版本。运行以下命令:

pip freeze > requirements.txt

这将更新 requirements.txt,包括您的应用程序所需的所有内容,其中包括 resend

步骤 5:编写发送邮件的函数

现在是添加发送确认邮件逻辑的时候了。可以将其想象成给朋友发电子邮件告诉他们包裹已送达,只不过这里是为了收据。

我们将编写一个send_confirmation_email函数,该函数接收收件人的电子邮件、收据详情、附件链接和Google电子表格URL。使用Resend,它将把这些格式化为电子邮件并发送。以下是该函数:

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')  # 在您的环境变量中设置这个
    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}")

步骤5:部署到DigitalOcean

要部署更新后的Flask应用程序,请按照第7天:构建和部署基于电子邮件的收据处理器中的步骤。以下是一个快速摘要:

  1. 将更新的代码推送到GitHub:在对Flask应用程序进行必要更改后,将更新的代码提交并推送到GitHub。这将触发DigitalOcean的App平台的自动部署。

    git add .
    git commit -m "为确认电子邮件添加Resend集成"
    git push origin main
    
  2. 监控部署:您可以在应用程序仪表板的部署部分跟踪进度。

  3. 验证部署:部署完成后,转到应用程序的公共URL并测试其功能。您还可以在仪表板中检查运行时日志,以确认应用程序已成功启动。

  4. 检查运行时日志:如果某些内容未按预期工作,请使用App平台仪表板中的运行时日志选项卡来调试运行时问题。查找与Resend API或其他应用程序组件相关的任何错误。

步骤5:测试整个工作流程

现在您的应用已完全配置并准备就绪,是时候测试整个工作流程了。我们将确保电子邮件正文已处理,附件已解码并上传到DigitalOcean Spaces,收据详情和附件URL已保存到Google Sheets,并向发件人发送确认电子邮件

以下是逐步测试的方法:

  1. 发送测试电子邮件:向Postmark发送一封带有文本正文和附件的电子邮件。如果您不确定如何配置Postmark,请查看第8天:将Postmark连接到您的Flask应用,我们在那里介绍了如何设置Postmark以将电子邮件转发到您的应用。

  2. 检查Postmark活动JSON:在Postmark仪表板中,转到活动选项卡。找到您发送的电子邮件,并确保JSON有效载荷包括文本正文和Base64编码的附件数据。这证实了Postmark正确地将电子邮件数据转发到您的应用程序,就像我们在第8天设置的那样。

  3. 监控日志:在您的DigitalOcean App平台仪表板中检查运行时日志,以确保应用程序处理JSON负载。您应该看到日志显示收据详细信息已提取,并且附件已上传到DigitalOcean Spaces。您可以在DigitalOcean App平台仪表板的日志选项卡中访问运行时日志。如果您对DigitalOcean日志不熟悉,我们在第9天:使用DigitalOcean的GenAI Agent自动执行收据解析中有所探讨。

  4. 验证空间上传:访问您的DigitalOcean空间,确认文件已成功上传。您应该在存储桶中看到附件,就像在第10天:在DigitalOcean空间中存储附件中配置的那样。如果一切顺利,您的附件URL将是可访问的。

  5. 检查Google表格:打开您的Google表格,确认包含收据详细信息和附件URL的新行已添加,就像我们在第11天:在Google表格中保存收据详细信息中设置的那样。该行应包括:

    • 从电子邮件正文中提取的供应商、金额、货币和日期。
    • 上传附件的逗号分隔URL在最后一列。

  6. 验证确认电子邮件:最后,检查发件人电子邮件地址的收件箱,以确保收到确认电子邮件。此电子邮件应包含:

    • 提取的收据详情(供应商、金额、货币和日期)。
    • 指向 DigitalOcean Spaces 中上传附件的链接。
    • 指向记录收据数据的 Google 表格的链接。

故障排除

如果工作流程不如预期运行,以下是一些故障排除步骤:

  1. 检查重新发送电子邮件仪表板以查看错误:访问重新发送仪表板,查看是否在发送确认电子邮件时出现任何错误。

  2. 验证环境变量:确保在DigitalOcean应用平台仪表板上正确配置了API密钥(RESEND_API_KEY)和发件人电子邮件(RESEND_EMAIL_FROM)的环境变量。

  3. 检查DigitalOcean运行时日志:在DigitalOcean应用平台仪表板中打开运行时日志选项卡,检查处理电子邮件或上传附件时是否出现错误。这些日志可以提供有用的见解,特别是与Postmark或Resend的交互方面。
  4. 查看Postmark活动:在Postmark的活动选项卡中,确认测试邮件是否已正确转发到您的Flask应用程序。如果有任何问题,Postmark将显示与转发或配置问题相关的错误。

🎁 总结

恭喜!您已成功完成12天的DigitalOcean系列,并构建了一个完全功能的基于电子邮件的收据处理服务

今天,您:

  • 集成了Resend API以发送交易电子邮件。
  • 配置环境变量以安全管理敏感凭据。
  • 发送带有收据详情、附件链接和电子表格URL的确认电子邮件。
  • 测试了从电子邮件提交到最终确认的完整工作流程。

通过添加确认邮件,您已经完成了一个处理电子邮件、提取细节、存储附件并在Google Sheets中保持一切有序的项目。它用户友好、实用,可以解决现实世界中的问题。

📚 DigitalOcean 的 12 天

这标志着 DigitalOcean 的 12 天 系列的结束。在过去的12天里,我们一步一步地构建了两个现实世界的应用。在这个过程中,您使用了 DigitalOcean 的 无服务器函数应用平台Spaces 对象存储PostgreSQLDigitalOcean GenAITwilioGoogle Sheets APIPostmarkPaperTrailResend。每个部分汇聚在一起,形成了比其各自的总和更为重要的东西。

这是您所构建的内容的快速回顾:

🎂 第1-6天:构建一个生日提醒服务

这款应用程序可以跟踪生日并自动发送短信提醒。它轻巧、无服务器且易于维护。

到了第6天,您在云中运行一个完全自动化的服务。一切都很顺利。

📧 第7-12天:构建电子邮件收据处理器

此应用程序处理通过电子邮件发送的收据,提取所需的细节,并将所有内容组织在数据库中。

到第12天,你已经构建了一个可以端到端处理收据的完整工具。

你所学到的知识

  1. 存储和管理数据:你使用了PostgreSQL进行结构化数据存储,并使用Google Sheets进行简单且可共享的数据记录。
  2. 自动化工作流程:通过 DigitalOcean 函数调度触发器,您自动化了流程,使您的应用程序像时钟一样运行。
  3. 为您的应用添加智能:通过集成 DigitalOcean 的 GenAI,您将智能数据提取和组织引入了工作流程,使您的应用更加智能和强大。
  4. 安全处理文件:您使用 DigitalOcean 空间 以可靠、可扩展的方式存储和管理文件。
  5. 通过 API 增强应用:像 TwilioPostmark 和 Resend 这样的 API 为您的应用带来了短信通知、电子邮件转发和确认邮件等功能。
  6. 调试和监控:使用像Papertrail这样的工具,您学会了有效地调试和监控您的应用程序,使其保持顺畅运行。

接下来该做什么

这只是个开始,您在这里学到的知识可以应用于无数其他项目。以下是一些继续前进的方法:

  • 加入DigitalOcean的Discord对话,与其他开发人员交流,分享您的成就,并获得灵感。
  • 在我们的教程库中探索更多想法和项目。

如果您继续跟进,我很乐意看到您的创作──欢迎在Twitter上与我分享您的进展或反馈。

保持简单。构建有用的东西。祝您愉快!🚀

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