數碼海洋的12天(第12天)- 使用重新發送功能發送確認郵件

歡迎來到我們的 12 天的 DigitalOcean 系列的最後一天!我們已經走了很長的路,建立了一個 基於電子郵件的收據處理服務,從 Postmark 中提取收據詳情,使用 DigitalOcean 的 GenAI 代理,安全地 將附件儲存在 DigitalOcean Spaces 中,並 將提取的數據保存到 Google Sheets 中

今天,我們將添加最後的觸控—將確認電子郵件發送回發件人,包含收據詳情、附件鏈接以及 Google Spreadsheet 的鏈接。這最後一步將所有內容聯繫在一起,確保用戶立即收到反饋,告知他們的收據已成功處理。

🚀 你將學到什麼

在本教程結束時,你將知道如何:

  1. 使用 Resend API 程式化地發送確認電子郵件。
  2. 安全地使用環境變數管理敏感憑證。
  3. 格式化並發送包含收據詳細信息、附件鏈接和電子表格URL的交易郵件。
  4. 測試和排除完整的電子郵件處理工作流程。

🛠 準備物品

如果您想要一起構建,我們假設您已經按照Day 11: 將收據數據和附件保存在Google表格中並且已擁有:

如果您只是想學習如何集成Resend以發送確認郵件,您將需要:

  • 一個Resend帳戶:在Resend註冊。
  • 一個API密鑰:從您的Resend儀表板生成。

步驟 1:建立一個 Resend 帳號並取得 API 金鑰

為了以程式方式發送郵件,我們將使用 Resend,這是一個開發者友好的 API,用於發送交易郵件。它簡化了發送郵件的過程,您無需擔心設置郵件伺服器、管理 SMTP 配置或擔心垃圾郵件過濾器。

  1. 首先,前往 Resend 並註冊一個免費帳號。登錄後,進入儀表板的 API 金鑰部分並生成一個新的 API 金鑰。

  2. 為您的 API 金鑰取一個描述性名稱,例如收據處理應用程式,並將其權限設置為完全訪問

  3. 複製 API 金鑰:您的 API 金鑰只會顯示一次,複製並妥善保存。您將需要在下一步中使用它來驗證您的應用程式與 Resend。

第 2 步:更新您的環境變數

現在我們有了 Resend API 金鑰,讓我們將其保存為 DigitalOcean 中的環境變數,就像我們在本系列中一直在做的那樣。

對於 Resend 整合,我們需要保存兩個環境變數:

  • RESEND_API_KEY:在第 1 步中生成的用於驗證您的應用程式與 Resend 的 API 金鑰。
  • RESEND_EMAIL_FROM:您將用於發送確認郵件的寄件人電子郵件地址。這應該是在您的 Resend 帳戶中驗證的地址。

要添加這些變數,請按照以下步驟進行操作:

  1. 請前往您的DigitalOcean應用平台儀表板,找到您的Flask應用程序,並導航到設置選項卡。在環境變數下,添加這兩個變數:
    • 鍵:RESEND_API_KEY

      • 值:粘貼您在第1步中生成的API密鑰。
    • 鍵:RESEND_EMAIL_FROM

      • 值:輸入您在Resend帳戶中驗證的寄件人電子郵件地址。
  2. 保存更改以使Resend API密鑰對您的Flask應用程序可用,接下來我們將更新應用程序。

步驟 3:安裝 Resend Python Library

接下來,我們將安裝 Resend Python Library 來處理 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應用程式平台的自動部署。

    git add .
    git commit -m "為確認郵件添加Resend集成"
    git push origin main
    
  2. 監控部署:您可以在應用儀表板的部署部分跟踪進度。

  3. 驗證部署:部署完成後,轉到應用的公共 URL 並測試其功能。您也可以在儀表板中檢查運行時日誌以確認應用程序是否成功啟動。

  4. 檢查運行時日誌:如果某些內容未按預期工作,請使用應用平台儀表板中的運行時日誌選項卡來調試運行時問題。查找與重新發送 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 Platform 儀表板上的運行日誌,以確保應用程序處理 JSON 負載。您應該會看到日誌顯示收據詳細信息已被提取,並且附件已上傳到 DigitalOcean Spaces。您可以在 DigitalOcean App Platform 儀表板的 日誌 標籤中訪問運行日誌。如果您對 DigitalOcean 日誌不太熟悉,我們在 第 9 天:使用 DigitalOcean 的 GenAI Agent 自動化收據解析 中探討過這個問題。

  4. 驗證空間上傳: 訪問您的DigitalOcean空間,確認文件已成功上傳。您應該在桶中看到附件,就像在Day 10: Storing Attachments in DigitalOcean Spaces中配置的那樣。如果一切順利,您的附件URL將是可訪問的。

  5. 檢查Google表格: 打開您的Google表格,確認已添加包含收據詳細信息和附件URL的新行,就像我們在Day 11: Saving Receipt Details in Google Sheets中設置的那樣。該行應包括:

    • 從郵件正文中提取的供應商、金額、貨幣和日期。
    • 在最後一列中用逗號分隔的上傳附件的URL。

  6. 驗證確認郵件:最後,檢查發送者郵件地址的收件箱,確保已收到確認郵件。這封郵件應包含:

    • 提取的收據詳細信息(供應商、金額、貨幣和日期)。
    • 上傳附件在 DigitalOcean Spaces 中的鏈接。
    • Google 表格的鏈接,其中記錄了收據數據。

疑難排解

如果工作流程未如預期般運作,請按照以下幾個疑難排解步驟進行:

  1. 檢查重新寄送郵件儀表板上的錯誤:訪問重新寄送儀表板,查看是否在發送確認郵件時出現任何錯誤。

  2. 驗證環境變數:確保在 DigitalOcean App 平台儀表板中正確配置 API 金鑰(RESEND_API_KEY)和寄件者郵件(RESEND_EMAIL_FROM)的環境變數。

  3. 檢查 DigitalOcean 運行時記錄:在 DigitalOcean App 平台儀表板中打開運行時記錄選項卡,檢查發送郵件或上傳附件時是否出現錯誤。這些記錄可以提供有用的洞察,特別是與 Postmark 或 Resend 的互動方面。

  4. 檢查 Postmark 活動:在 Postmark 的 活動 標籤中,確認測試電子郵件是否正確轉發到您的 Flask 應用。如果有任何問題,Postmark 將顯示與轉發或配置問題相關的錯誤。

🎁 總結

恭喜您!您已成功完成 DigitalOcean 的 12 天挑戰 系列,並建立了一個功能完善的 基於電子郵件的收據處理服務

今天,您:

  • 整合了 Resend API 以發送交易電子郵件。
  • 配置了環境變量以安全管理敏感憑證。
  • 發送了包含收據詳細信息、附件鏈接和電子表格網址的確認電子郵件。
  • 測試了從電子郵件提交到最終確認的完整工作流程。

通過添加確認郵件,您已經完成了一個處理郵件、提取細節、存儲附件並在Google Sheets中保持一切井然有序的項目。這是用戶友好、實用且準備解決現實問題的。

📚 數字海洋的12天

這標誌著數字海洋的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的Spaces來以可靠、可擴展的方式存儲和管理文件。
  5. 通過API增強應用程式:像TwilioPostmark和Resend這樣的API為您的應用程式帶來了功能,如短信通知、郵件轉發和確認郵件。
  6. 除錯和監控:使用像Papertrail這樣的工具,您學會了有效地除錯和監控您的應用程式,讓它們保持順利運行。

接下來

這只是個開始——您在這裡學到的知識可以應用於無數其他專案。以下是一些繼續前進的方法:

  • 加入DigitalOcean的Discord對話,與其他開發人員連線,分享您所建立的內容,並獲得靈感。
  • 在我們的教程庫中探索更多想法和專案。

如果您繼續前進,我很樂意看到您的創作——歡迎在Twitter上與我分享您的進度或反饋。

保持簡單。建立有用的東西。祝您建造愉快!🚀

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