12 日間 (Day 12) - 確認メールの再送信
12 日間の DigitalOcean シリーズの最終日へようこそ!私たちは、DigitalOcean の GenAI エージェントを使用して消印から領収書の詳細を抽出し、添付ファイルを DigitalOcean Spaces に安全に保存し、抽出されたデータを Google スプレッドシートに保存する電子メールベースの領収書処理サービスを構築して、長い道のりを歩んできました。
今日は最後の仕上げとして、領収書の詳細、添付ファイルのリンク、Google スプレッドシートへのリンクを記載した確認メールを送信者に送り返します。この最後のステップではすべてが結び付けられ、ユーザーは領収書が正常に処理されたというフィードバックをすぐに受け取ることができます。
🚀 学ぶ内容
このチュートリアルを終えると、次の方法がわかるようになります。
- Resend API を使用して、プログラムで確認メールを送信します。
- 環境変数を使用して機密の認証情報を安全に管理します。
- 領収書の詳細、添付ファイルのリンク、スプレッドシートの URL を含むトランザクション電子メールをフォーマットして送信します。
- 完全な電子メール処理ワークフローをテストしてトラブルシューティングします。
🛠 必要なもの
一緒に学習したい場合は、「11 日目: 領収書のデータと添付ファイルを Google スプレッドシートに保存する」に従っており、以下をすでに完了していることを前提としています。
- 受信メールを処理するためにデプロイされた Flask アプリ。
- Google スプレッドシートと DigitalOcean Spaces の統合が設定されました。
確認メールを送信するために再送信を統合する方法を知りたいだけの場合は、次のものが必要です。
- 再送信アカウント: Resend でサインアップします。
- API キー: 再送信ダッシュボードから生成します。
ステップ 1: 再送信アカウントを作成して API キーを取得する
プログラムでメールを送信するには、トランザクション メールを送信するための開発者向け API である再送信を使用します。電子メールの送信が簡素化されるため、電子メール サーバーのセットアップ、SMTP 構成の管理、スパム フィルターの心配などに苦労する必要がなくなります。
まず、「再送信」に移動して無料アカウントにサインアップします。ログインしたら、ダッシュボードのAPI キーセクションに移動し、新しい API キーを生成します。
API キーに
Receipt Processor App
などのわかりやすい名前を付け、 その権限をフル アクセス
に設定します。API キーをコピーします: API キーは 1 回だけ表示されます。コピーして安全に保管してください。これは、次のステップでアプリを再送信で認証するために必要になります。
ステップ 2: 環境変数を更新する
Resend API キーを取得したので、このシリーズを通じて行ってきたのと同じように、それを DigitalOcean の環境変数として保存しましょう。
再送信統合の場合、2 つの環境変数を保存する必要があります。
RESEND_API_KEY
: ステップ 1 で生成した API キー。再送信でアプリを認証します。RESEND_EMAIL_FROM
: 確認メールの送信に使用する送信者のメール アドレス。これは、再送信アカウントで確認されたアドレスである必要があります。
これらの変数を追加するには、次の手順に従います。
DigitalOcean アプリ プラットフォームのダッシュボードに移動し、Flask アプリを見つけて設定タブに移動します。 [環境変数] で、次の 2 つの変数を追加します。
キー:
RESEND_API_KEY
- 値: ステップ 1 で生成した API キーを貼り付けます。
- キー:
RESEND_API_KEY
- 値: ステップ 1 で生成した API キーを貼り付けます。
キー:
RESEND_EMAIL_FROM
- 値: 再送信アカウントからの確認された送信者の電子メール アドレスを入力します。
変更を保存して、Flask アプリで Resend API キーを利用できるようにします。これは次に更新します。
ステップ 3: Resend Python ライブラリをインストールする
次に、API を処理するための Resend Python ライブラリをインストールします。これにより、コードがクリーンな状態に保たれ、生の HTTP リクエストの処理が回避されます。ターミナルでこれを実行します。
pip install resend
ステップ 4: requirements.txt
を更新する
requirements.txt
を手動で編集する代わりに、pip freeze
を使用して、インストールされているすべての依存関係を正確なバージョンで一覧表示します。これを実行します:
pip freeze > requirements.txt
これにより、requirements.txt
がアプリに必要なものすべて (resend
など) で更新されます。
ステップ 5: 電子メールを送信する関数を作成する
次に、確認メールを送信するためのロジックを追加します。友人に荷物が到着したことをメールで知らせるようなものだと考えてください。ここでは領収書のみが必要です。
受信者の電子メール、領収書の詳細、添付ファイルのリンク、Google スプレッドシートの URL を取得する send_confirmation_email
関数を作成します。再送信を使用すると、これを電子メールにフォーマットして送信します。機能は次のとおりです。
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') # Set this in your environment variables
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 日目: 電子メールベースの受信プロセッサの構築とデプロイ」の手順に従います。簡単な要約は次のとおりです。
更新されたコードを GitHub にプッシュする: Flask アプリに必要な変更を加えた後、更新されたコードをコミットして GitHub にプッシュします。これにより、DigitalOcean のアプリ プラットフォームへの自動デプロイメントがトリガーされます。
git add . git commit -m "Add Resend integration for confirmation emails" git push origin main
デプロイメントの監視: アプリのダッシュボードのデプロイメントセクションで進行状況を追跡できます。
デプロイメントを確認する: デプロイメントが完了したら、アプリのパブリック URL に移動し、その機能をテストします。ダッシュボードのランタイム ログをチェックして、アプリが正常に起動したことを確認することもできます。
ランタイム ログを確認する: 何かが期待どおりに動作しない場合は、App Platform ダッシュボードの [ランタイム ログ] タブを使用してランタイムの問題をデバッグします。 Resend API または他のアプリ コンポーネントに関連するエラーを探します。
ステップ 5: ワークフロー全体をテストする
アプリが完全に構成され準備が整ったので、ワークフロー全体をテストします。 メール本文が処理され、添付ファイルがデコードされてDigitalOcean Spaces にアップロードされ、領収書の詳細と添付ファイルの URL がGoogle スプレッドシートに保存されることを確認します。 > と確認メールが送信者に送信されます。
段階的にテストする方法は次のとおりです。
テストメールを送信: テキスト本文と添付ファイルを含むメールを消印まで送信します。 Postmark の設定方法がわからない場合は、「Day 8: Postmark を Flask アプリに接続する」を参照してください。ここでは、メールをアプリに転送するための Postmark の設定について説明しました。
消印アクティビティ JSON を確認: 消印ダッシュボードで、アクティビティ タブに移動します。送信した電子メールを見つけて、JSON ペイロードにテキスト本文と Base64 でエンコードされた添付データが含まれていることを確認します。これにより、8 日目で設定したように、Postmark がメール データをアプリに正しく転送していることが確認できます。
ログを監視: DigitalOcean アプリ プラットフォーム ダッシュボードのランタイム ログをチェックして、アプリが JSON ペイロードを処理していることを確認します。領収書の詳細が抽出され、添付ファイルが DigitalOcean Spaces にアップロードされたことを示すログが表示されるはずです。 DigitalOcean アプリ プラットフォーム ダッシュボードのログタブでランタイム ログにアクセスできます。 DigitalOcean のログに詳しくない方のために、9 日目「DigitalOcean の GenAI エージェントを使用したレシート解析の自動化」でこれについて説明しました。
スペースのアップロードを確認: DigitalOcean Space にアクセスして、ファイルが正常にアップロードされたことを確認します。 「10 日目: DigitalOcean Spaces に添付ファイルを保存する」で構成したように、バケット内の添付ファイルが表示されるはずです。すべてが期待通りに進んだ場合は、添付ファイルの URL にアクセスできるようになります。
Google スプレッドシートを確認する: Google スプレッドシートを開いて、「11 日目: Google スプレッドシートに領収書の詳細を保存する」で設定したように、領収書の詳細と添付ファイル URL を含む新しい行が追加されていることを確認します。行には以下を含める必要があります。
- 電子メール本文から抽出されたベンダー、金額、通貨、日付。
- 最後の列には、アップロードされた添付ファイルのカンマ区切りの URL。
確認メールを確認する: 最後に、送信者のメール アドレスの受信箱をチェックして、確認メールが受信されたことを確認します。このメールには次の内容を含める必要があります。
- 抽出された領収書の詳細 (ベンダー、金額、通貨、日付)。
- DigitalOcean Spaces にアップロードされた添付ファイルへのリンク。
- 領収書データが記録される Google スプレッドシートへのリンク。
トラブルシューティング
ワークフローが期待どおりに機能しない場合は、次のトラブルシューティング手順に従ってください。
メール再送信ダッシュボードでエラーを確認する: 再送信ダッシュボードにアクセスして、確認メールの送信中にエラーが発生したかどうかを確認します。
環境変数の確認: API キー (
RESEND_API_KEY
) と送信者の電子メール (RESEND_EMAIL_FROM
) が DigitalOcean アプリの環境変数で正しく設定されていることを確認してください。プラットフォームのダッシュボード。DigitalOcean ランタイム ログの検査: DigitalOcean アプリ プラットフォーム ダッシュボードのランタイム ログタブを開いて、電子メールの処理中または添付ファイルのアップロード中にエラーがないか確認します。これらのログは、特に消印や再送信とのやり取りについて役立つ洞察を提供します。
消印アクティビティの確認: 消印のアクティビティタブで、テストメールが Flask アプリに適切に転送されたことを確認します。問題がある場合、消印は転送または設定の問題に関連するエラーを表示します。
🎁 まとめ
おめでとう! 12 日間の DigitalOcean シリーズを無事に完了し、 完全に機能する電子メールベースの領収書処理サービスを構築しました。
今日、あなたは:
- トランザクション電子メールを送信するための Resend API を統合しました。
- 機密の認証情報を安全に管理するために環境変数を構成しました。
- 受領書の詳細、添付ファイルのリンク、スプレッドシートの URL を含む確認メールを送信しました。
- 電子メールの送信から最終確認までの完全なワークフローをテストしました。
確認メールを追加すると、メールの処理、詳細の抽出、添付ファイルの保存、すべてを Google スプレッドシートで整理するプロジェクトが完成します。ユーザーフレンドリーで実用的で、現実世界の問題をすぐに解決できます。
📚 DigitalOcean の 12 日間
これで12 日間の DigitalOcean シリーズは終了です。過去 12 日間にわたって、私たちは 2 つの現実世界のアプリケーションを一度に 1 ステップずつ構築してきました。その過程で、DigitalOcean のサーバーレス関数、アプリ プラットフォーム、Spaces オブジェクト ストレージ、PostgreSQLなどのツールを使用してきました。 、DigitalOcean GenAI、Twilio、Google Sheets API、消印、PaperTrail、および再送信します。それぞれの部分が組み合わされて、部分の合計よりも大きな何かが形成されました。
構築したものの簡単な要約は次のとおりです。
🎂 1 ~ 6 日目: 誕生日リマインダー サービスを構築する
このアプリは誕生日を追跡し、SMS リマインダーを自動的に送信します。軽量でサーバーレスで、メンテナンスが簡単です。
- 1 日目: PostgreSQL データベースのセットアップ
連絡先の詳細を保存するデータベースを作成します。 - 2 日目: Python を使用して PostgreSQL に接続する
データベースに安全に接続してデータを取得します。 - 3 日目: 誕生日を確認し、SMS 通知を送信する
Twilio を使用して、ユーザーに今後の誕生日を通知します。 - 4 日目: DigitalOcean 機能への展開
DigitalOcean Functions を使用してアプリをクラウドにデプロイします。 - 5 日目: トリガーを使用して毎日のリマインダーを自動化する
リマインダーを毎日自動的に実行するようにスケジュールを設定します。 - 6 日目: 外部ログを設定する
Papertrail を使用してアプリを監視し、トラブルシューティングを行います。
6 日目には、完全に自動化されたサービスがクラウドで実行されるようになります。それはちょうどうまくいきます。
📧 7 ~ 12 日目: 電子メール受信プロセッサを構築する
このアプリは、電子メールで送信された領収書を処理し、必要な詳細を抽出し、すべてをデータベースに整理します。
- 7 日目: Flask アプリを構築してデプロイする
受信メールを処理するための軽量アプリをセットアップします。 - 8 日目: メール処理に消印を統合する
処理のために電子メールをアプリに転送します。 - 9 日目: DigitalOcean の GenAI を使用してデータを抽出してクリーンアップする
GenAI を使用して電子メールのコンテンツから構造化データを抽出します。 - 10 日目: 安全なストレージ用に DigitalOcean Spaces を構成する
オブジェクト ストレージを使用して電子メールの添付ファイルを安全に保存します。 - 11 日目: 領収書データを Google スプレッドシートに保存する
構造化データをスプレッドシートに整理して簡単にアクセスできるようにします。 - 12 日目: 確認メールを送信する
正常に処理された領収書についてユーザーに通知します。
12 日目までに、領収書をエンドツーエンドで処理する完全なツールが構築されました。
学んだこと
- データの保存と管理: 構造化データ ストレージには PostgreSQL を、簡単で共有可能なデータ ログには Google スプレッドシートを使用しました。
- ワークフローの自動化: DigitalOcean Functions とトリガーのスケジュール設定を使用して、プロセスを自動化し、アプリを時計仕掛けのように実行できるようにしました。
- アプリにインテリジェンスを追加: DigitalOcean の GenAI を統合することで、ワークフローにインテリジェントなデータ抽出と編成が導入され、アプリがよりスマートでより機能的になりました。
- ファイルを安全に処理: DigitalOcean Spaces と協力して、信頼性が高くスケーラブルな方法でファイルを保存および管理しました。
- API によるアプリの強化: Twilio、Postmark、Resend などの API により、SMS 通知、メール転送、確認メールなどの機能がアプリに提供されました。
- デバッグと監視: Papertrail などのツールを使用して、アプリを効果的にデバッグおよび監視し、スムーズな実行を維持する方法を学びました。
次は何ですか
これはほんの始まりにすぎません。ここで学んだことは、他の無数のプロジェクトに応用できます。継続するには次のような方法があります。
- DigitalOcean の Discord での会話に参加して、他の開発者とつながり、構築したものを共有し、インスピレーションを得てください。
- チュートリアル ライブラリでさらに多くのアイデアやプロジェクトを探索してください。
フォローしていただければ、あなたが作成したものをぜひ見てみたいと思います。進捗状況やフィードバックを Twitter でお気軽に共有してください。
シンプルにしてください。役立つものを構築します。ハッピービルディング! 🚀