欢迎来到我们 12 Days of DigitalOcean 系列的最后一天!我们走过了很长的路,构建了一个 基于电子邮件的收据处理服务,它使用 Postmark 提取收据详细信息,通过 DigitalOcean 的 GenAI Agent 安全地 将附件存储在 DigitalOcean Spaces 中,并 将提取的数据保存到 Google Sheets 中。
今天,我们将添加最后的环节——向发件人发送包含收据详细信息、附件链接和 Google 表格链接的确认邮件。这最后一步将所有内容串联在一起,确保用户立即收到反馈,确认他们的收据已成功处理。
🚀 您将学习到的内容
在本教程结束时,您将知道如何:
- 使用 Resend API 以编程方式发送确认邮件。
- 使用环境变量安全管理敏感凭据。
- 格式化并发送带有收据详情、附件链接和电子表格 URL 的交易性电子邮件。
- 测试和排除完整的电子邮件处理工作流。
🛠 您需要准备
如果您想跟随操作,我们假设您已经按照 第11天:在 Google Sheets 中保存收据数据和附件 进行操作,并且已经准备好:
- 用于处理收据邮件的 部署的 Flask 应用。
- Google Sheets 和 DigitalOcean Spaces 集成 已设置好。
如果您只是想学习如何集成 Resend 以发送确认邮件,您将需要:
- 一个 Resend 账户:在 Resend 注册。
- 一个 API 密钥:从您的 Resend 仪表板生成。
步骤 1:创建一个 Resend 账户并获取 API 密钥
要通过程序发送电子邮件,我们将使用 Resend,这是一个用于发送交易邮件的开发人员友好型 API。它简化了发送电子邮件的过程,让您无需费力地设置电子邮件服务器、管理 SMTP 配置或担心垃圾邮件过滤器。
-
首先,前往 Resend 网站注册一个免费账户。登录后,转到仪表板的 API 密钥部分生成一个新的 API 密钥。
-
为您的 API 密钥起一个描述性名称,如
Receipt Processor App
,并将其权限设置为Full Access
。 -
复制API密钥: 您的API密钥只会显示一次,请复制并妥善保管。在下一步中,您将需要使用它来验证您的应用程序与Resend。
第2步:更新您的环境变量
现在我们已经获得了Resend API密钥,让我们将其保存为DigitalOcean中的环境变量,就像我们在本系列中一直在做的那样。
对于Resend集成,我们需要保存两个环境变量:
RESEND_API_KEY
: 在第1步中生成的API密钥,用于验证您的应用程序与Resend。RESEND_EMAIL_FROM
: 您将用于发送确认邮件的发件人电子邮件地址。这应该是您在Resend帐户中验证过的地址。
要添加这些变量,请按照以下步骤进行:
- 前往您的DigitalOcean应用平台仪表板,找到您的Flask应用,并导航到设置选项卡。在环境变量下,添加这两个变量:
-
键:
RESEND_API_KEY
- 值:粘贴您在步骤1中生成的API密钥。
-
键:
RESEND_EMAIL_FROM
- 值:输入您Resend帐户中已验证的发件人电子邮件地址。
-
-
保存更改以使Resend API密钥可用于您的Flask应用,接下来我们将更新。
步骤 3:安装 Resend Python 库
接下来,我们将安装 Resend Python 库,用于处理 API。它可以使您的代码更整洁,避免直接处理原始的 HTTP 请求。在终端中运行以下命令:
步骤 4:更新 requirements.txt
不要手动编辑 requirements.txt
,而是使用 pip freeze
列出所有已安装的依赖项及其确切版本。运行以下命令:
这将更新 requirements.txt
,包括您的应用程序所需的所有内容,其中包括 resend
。
步骤 5:编写发送邮件的函数
现在是添加发送确认邮件逻辑的时候了。可以将其想象成给朋友发电子邮件告诉他们包裹已送达,只不过这里是为了收据。
我们将编写一个send_confirmation_email
函数,该函数接收收件人的电子邮件、收据详情、附件链接和Google电子表格URL。使用Resend,它将把这些格式化为电子邮件并发送。以下是该函数:
步骤5:部署到DigitalOcean
要部署更新后的Flask应用程序,请按照第7天:构建和部署基于电子邮件的收据处理器中的步骤。以下是一个快速摘要:
-
将更新的代码推送到GitHub:在对Flask应用程序进行必要更改后,将更新的代码提交并推送到GitHub。这将触发DigitalOcean的App平台的自动部署。
-
监控部署:您可以在应用程序仪表板的部署部分跟踪进度。
-
验证部署:部署完成后,转到应用程序的公共URL并测试其功能。您还可以在仪表板中检查运行时日志,以确认应用程序已成功启动。
-
检查运行时日志:如果某些内容未按预期工作,请使用App平台仪表板中的运行时日志选项卡来调试运行时问题。查找与Resend API或其他应用程序组件相关的任何错误。
步骤5:测试整个工作流程
现在您的应用已完全配置并准备就绪,是时候测试整个工作流程了。我们将确保电子邮件正文已处理,附件已解码并上传到DigitalOcean Spaces,收据详情和附件URL已保存到Google Sheets,并向发件人发送确认电子邮件。
以下是逐步测试的方法:
-
发送测试电子邮件:向Postmark发送一封带有文本正文和附件的电子邮件。如果您不确定如何配置Postmark,请查看第8天:将Postmark连接到您的Flask应用,我们在那里介绍了如何设置Postmark以将电子邮件转发到您的应用。
-
检查Postmark活动JSON:在Postmark仪表板中,转到活动选项卡。找到您发送的电子邮件,并确保JSON有效载荷包括文本正文和Base64编码的附件数据。这证实了Postmark正确地将电子邮件数据转发到您的应用程序,就像我们在第8天设置的那样。
-
监控日志:在您的DigitalOcean App平台仪表板中检查运行时日志,以确保应用程序处理JSON负载。您应该看到日志显示收据详细信息已提取,并且附件已上传到DigitalOcean Spaces。您可以在DigitalOcean App平台仪表板的日志选项卡中访问运行时日志。如果您对DigitalOcean日志不熟悉,我们在第9天:使用DigitalOcean的GenAI Agent自动执行收据解析中有所探讨。
-
验证空间上传:访问您的DigitalOcean空间,确认文件已成功上传。您应该在存储桶中看到附件,就像在第10天:在DigitalOcean空间中存储附件中配置的那样。如果一切顺利,您的附件URL将是可访问的。
-
检查Google表格:打开您的Google表格,确认包含收据详细信息和附件URL的新行已添加,就像我们在第11天:在Google表格中保存收据详细信息中设置的那样。该行应包括:
- 从电子邮件正文中提取的供应商、金额、货币和日期。
- 上传附件的逗号分隔URL在最后一列。
-
验证确认电子邮件:最后,检查发件人电子邮件地址的收件箱,以确保收到确认电子邮件。此电子邮件应包含:
- 提取的收据详情(供应商、金额、货币和日期)。
- 指向 DigitalOcean Spaces 中上传附件的链接。
- 指向记录收据数据的 Google 表格的链接。
故障排除
如果工作流程不如预期运行,以下是一些故障排除步骤:
-
检查重新发送电子邮件仪表板以查看错误:访问重新发送仪表板,查看是否在发送确认电子邮件时出现任何错误。
-
验证环境变量:确保在DigitalOcean应用平台仪表板上正确配置了API密钥(
RESEND_API_KEY
)和发件人电子邮件(RESEND_EMAIL_FROM
)的环境变量。 - 检查DigitalOcean运行时日志:在DigitalOcean应用平台仪表板中打开运行时日志选项卡,检查处理电子邮件或上传附件时是否出现错误。这些日志可以提供有用的见解,特别是与Postmark或Resend的交互方面。
-
查看Postmark活动:在Postmark的活动选项卡中,确认测试邮件是否已正确转发到您的Flask应用程序。如果有任何问题,Postmark将显示与转发或配置问题相关的错误。
🎁 总结
恭喜!您已成功完成12天的DigitalOcean系列,并构建了一个完全功能的基于电子邮件的收据处理服务。
今天,您:
- 集成了Resend API以发送交易电子邮件。
- 配置环境变量以安全管理敏感凭据。
- 发送带有收据详情、附件链接和电子表格URL的确认电子邮件。
- 测试了从电子邮件提交到最终确认的完整工作流程。
通过添加确认邮件,您已经完成了一个处理电子邮件、提取细节、存储附件并在Google Sheets中保持一切有序的项目。它用户友好、实用,可以解决现实世界中的问题。
📚 DigitalOcean 的 12 天
这标志着 DigitalOcean 的 12 天 系列的结束。在过去的12天里,我们一步一步地构建了两个现实世界的应用。在这个过程中,您使用了 DigitalOcean 的 无服务器函数、应用平台、Spaces 对象存储、PostgreSQL、DigitalOcean GenAI、Twilio、Google Sheets API、Postmark、PaperTrail 和 Resend。每个部分汇聚在一起,形成了比其各自的总和更为重要的东西。
这是您所构建的内容的快速回顾:
🎂 第1-6天:构建一个生日提醒服务
这款应用程序可以跟踪生日并自动发送短信提醒。它轻巧、无服务器且易于维护。
- 第1天:设置 PostgreSQL 数据库
创建一个数据库来存储联系人详细信息。 - 第2天:使用 Python 连接到 PostgreSQL
安全地连接到您的数据库并获取数据。 - 第3天:检查生日并发送短信通知
使用 Twilio 通知用户即将到来的生日。 - 第4天:部署到 DigitalOcean Functions
使用 DigitalOcean Functions 将您的应用程序部署到云端。 - 第5天:使用触发器自动化每日提醒
安排提醒每天自动运行。 - 第6天:设置外部日志记录
使用Papertrail监视和排除应用程序故障。
到了第6天,您在云中运行一个完全自动化的服务。一切都很顺利。
📧 第7-12天:构建电子邮件收据处理器
此应用程序处理通过电子邮件发送的收据,提取所需的细节,并将所有内容组织在数据库中。
- 第7天:构建并部署Flask应用
设置一个轻量级应用程序来处理收据电子邮件。 - 第8天:集成Postmark进行电子邮件处理
将电子邮件转发到您的应用程序进行处理。 - 第9天:使用DigitalOcean的GenAI提取和清理数据
使用GenAI从电子邮件内容中提取结构化数据。 - 第10天:配置DigitalOcean Spaces以实现安全存储
使用对象存储安全地存储电子邮件附件。 - 第11天:将收据数据保存到Google Sheets
在电子表格中组织结构化数据,以便于访问。 - 第12天:发送确认邮件
通知用户已成功处理的收据。
到第12天,你已经构建了一个可以端到端处理收据的完整工具。
你所学到的知识
- 存储和管理数据:你使用了PostgreSQL进行结构化数据存储,并使用Google Sheets进行简单且可共享的数据记录。
- 自动化工作流程:通过 DigitalOcean 函数 和 调度触发器,您自动化了流程,使您的应用程序像时钟一样运行。
- 为您的应用添加智能:通过集成 DigitalOcean 的 GenAI,您将智能数据提取和组织引入了工作流程,使您的应用更加智能和强大。
- 安全处理文件:您使用 DigitalOcean 空间 以可靠、可扩展的方式存储和管理文件。
- 通过 API 增强应用:像 Twilio、Postmark 和 Resend 这样的 API 为您的应用带来了短信通知、电子邮件转发和确认邮件等功能。
- 调试和监控:使用像Papertrail这样的工具,您学会了有效地调试和监控您的应用程序,使其保持顺畅运行。
接下来该做什么
这只是个开始,您在这里学到的知识可以应用于无数其他项目。以下是一些继续前进的方法:
- 加入DigitalOcean的Discord对话,与其他开发人员交流,分享您的成就,并获得灵感。
- 在我们的教程库中探索更多想法和项目。
如果您继续跟进,我很乐意看到您的创作──欢迎在Twitter上与我分享您的进展或反馈。
保持简单。构建有用的东西。祝您愉快!🚀
Source:
https://www.digitalocean.com/community/tutorials/sending-confirmation-emails-with-resend