デジタルオーシャンの12日間 (12日目) – Resendを使った確認メールの送信

私たちの12 Days of DigitalOceanシリーズの最終日へようこそ!長い道のりを共に歩んできましたが、メールベースのレシート処理サービスを構築し、Postmarkから受領書の詳細を抽出し、DigitalOceanのGenAI Agentを使用して安全にDigitalOcean Spacesに添付ファイルを保存し、抽出したデータをGoogle Sheetsに保存します。

本日は、確認メールを送信元に送り返す最終的な仕上げを追加します。この最終ステップにより、ユーザーがレシートが正常に処理されたことをすぐにフィードバックを受け取ることができるようになります。

🚀 学べること

このチュートリアルの最後までに以下の方法を学ぶことができます:

  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などの説明的な名前を付け、完全アクセス権限を設定します。

  3. APIキーをコピー: あなたのAPIキーは一度だけ表示されます—コピーして安全な場所に保管してください。次のステップで、Resendとアプリを認証するために必要になります。

ステップ2: 環境変数を更新する

ResendのAPIキーを取得したので、これをDigitalOceanの環境変数として保存しましょう。これまでこのシリーズを通して行ってきたように。

Resend統合のために、2つの環境変数を保存する必要があります:

  • RESEND_API_KEY: ステップ1で生成したAPIキーで、Resendとアプリを認証します。
  • RESEND_EMAIL_FROM: 確認メールを送信するために使用する送信者のメールアドレス。このアドレスはあなたのResendアカウントで確認済みである必要があります。

これらの変数を追加するには、次の手順に従ってください:

  1. DigitalOcean App Platformのダッシュボードに移動し、Flaskアプリを見つけて、設定タブに移動します。環境変数の下に、次の2つの変数を追加します:

    • キー: RESEND_API_KEY

      • 値: ステップ1で生成したAPIキーを貼り付けます。
    • キー: RESEND_EMAIL_FROM

      • 値: Resendアカウントから確認済みの送信者メールアドレスを入力します。
  2. 変更内容を保存して、Resend APIキーをFlaskアプリで利用できるようにします。次に更新します。

ステップ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:メールを送信する関数の作成

今、確認メールを送信するロジックを追加する時です。友達に荷物が届いたことを知らせるためにメールを送るように考えてください—ここでは、領収書のためのものです。

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 アプリをデプロイするには、Day 7: Building and Deploying the Email-Based Receipt Processor の手順に従ってください。以下に簡単な要約を示します:

  1. GitHub に更新されたコードをプッシュする: Flask アプリを必要な変更後、コミットして GitHub に更新されたコードをプッシュします。これにより、DigitalOcean の App Platform で自動的にデプロイがトリガーされます。

    git add .
    git commit -m "確認メール用の Resend 統合を追加"
    git push origin main
    
  2. デプロイメントを監視: アプリのダッシュボードのデプロイメントセクションで進捗状況を追跡できます。

  3. デプロイメントを確認: デプロイメントが完了したら、アプリの公開URLに移動して機能をテストしてください。ダッシュボードのランタイムログを確認して、アプリが正常に起動したことを確認できます。

  4. ランタイムログを確認: 期待通りに動作しない場合は、App Platformダッシュボードのランタイムログタブを使用してランタイムの問題をデバッグしてください。Resend APIやその他のアプリコンポーネントに関連するエラーを探してください。

ステップ5: ワークフロー全体のテスト

アプリが完全に設定され、準備が整ったので、ワークフロー全体をテストする時が来ました。メール本文が処理されること、添付ファイルがデコードされてDigitalOcean Spacesにアップロードされること、受取詳細と添付ファイルのURLがGoogle Sheetsに保存されること、そして確認メールが送信者に送信されることを確認します。

以下に、ステップバイステップでのテスト方法を示します:

  1. テストメールを送信: テキスト本文と添付ファイルを含むメールをPostmarkに送信します。Postmarkの設定方法がわからない場合は、8日目: PostmarkをFlaskアプリに接続するを確認してください。ここでは、Postmarkを設定してアプリにメールを転送する手順を説明しました。

  2. PostmarkアクティビティJSONを確認する: Postmarkダッシュボードで、アクティビティタブに移動します。送信したメールを見つけ、JSONペイロードにテキスト本文とBase64エンコードされた添付データが含まれていることを確認します。これは、Postmarkが正しくメールデータをアプリに転送していることを確認するものです。これも8日目で設定した内容です。

  3. ログの監視: アプリがJSONペイロードを処理していることを確認するために、DigitalOcean App Platformのダッシュボードで実行時ログをチェックしてください。レシートの詳細が抽出され、添付ファイルがDigitalOcean Spacesにアップロードされたことを示すログが表示されるはずです。実行時ログには、DigitalOcean App Platformのダッシュボードのログタブからアクセスできます。DigitalOceanのログに不慣れな場合は、9日目: DigitalOceanのGenAIエージェントによるレシート解析の自動化でこれを探求しました。

  4. スペースアップロードの確認: あなたのDigitalOceanスペースにアクセスして、ファイルが正常にアップロードされたことを確認してください。第10日: DigitalOceanスペースに添付ファイルを保存するで設定した通り、バケット内に添付ファイルが表示されるはずです。すべてが順調に進んでいれば、添付ファイルのURLにアクセスできるようになります。

  5. Googleシートの確認: あなたのGoogleシートを開いて、レシートの詳細と添付ファイルのURLを含む新しい行が追加されたことを確認してください。これは第11日: Googleシートにレシートの詳細を保存するで設定した通りです。その行には以下が含まれるべきです:

    • ベンダー、金額、通貨、およびメール本文から抽出された日付。
    • 最後の列にアップロードされた添付ファイルのカンマ区切りのURL。

  6. 確認メールを確認する:最後に、送信者のメールアドレスの受信トレイを確認して、確認メールが受信されたことを確認してください。このメールには以下が含まれている必要があります:

    • 抽出された領収書の詳細(ベンダー、金額、通貨、日付)。
    • DigitalOcean Spacesにアップロードされた添付ファイルへのリンク。
    • 領収書データが記録されているGoogleスプレッドシートへのリンク。

トラブルシューティング

期待どおりにワークフローが機能しない場合は、以下のトラブルシューティング手順を実行してください:

  1. エラーを確認するためにResendメールダッシュボードをチェック: 確認メールの送信中にエラーが発生していないかを確認するためにResendダッシュボードを訪れてください。

  2. 環境変数を確認する: デジタルオーシャンApp Platformダッシュボードの環境変数でAPIキー(RESEND_API_KEY)と送信元メールアドレス(RESEND_EMAIL_FROM)が正しく設定されていることを確認してください。

  3. デジタルオーシャンランタイムログを調査する: デジタルオーシャンApp Platformダッシュボードのランタイムログタブを開いて、メールの処理や添付ファイルのアップロード中にエラーが発生していないかを確認してください。特にPostmarkやResendとのやり取りに関する洞察が得られるかもしれません。

  4. Postmarkのアクティビティを確認: Postmarkのアクティビティタブで、テストメールが適切にFlaskアプリケーションに転送されたことを確認してください。問題がある場合、Postmarkは転送や構成に関連するエラーを表示します。

🎁 まとめ

おめでとうございます!あなたは12 Days of DigitalOceanシリーズを成功裏に完了し、メールベースの領収書処理サービスを完全に構築しました。

今日、あなたは:

  • Resend APIを統合してトランザクションメールを送信しました。
  • 環境変数を構成して機密情報を安全に管理しました。
  • 受領明細、添付ファイルリンク、スプレッドシートURLを含む確認メールを送信しました。
  • メールの送信から最終確認までのフルワークフローをテストしました。

確認メールを追加することで、メールを処理し、詳細を抽出し、添付ファイルを保存し、すべてをGoogle スプレッドシートで整理するプロジェクトを完了しました。ユーザーフレンドリーで実用的で、現実世界の問題を解決する準備が整いました。

📚 デジタルオーシャンの12日間

これで、デジタルオーシャンの12日間シリーズが終了します。過去12日間で、一歩ずつ2つの実世界アプリケーションを構築してきました。その過程で、DigitalOceanのサーバーレス関数App PlatformSpacesオブジェクトストレージPostgreSQLDigitalOcean GenAITwilioGoogle Sheets APIPostmarkPaperTrailResendなどのツールを使用しました。各要素がその合計以上のものを形成するために組み合わさりました。

ここで、構築した内容を簡単に振り返ります:

🎂 Days 1–6: 誕生日リマインダーサービスを構築

このアプリは誕生日を追跡し、自動的にSMSリマインダーを送信します。軽量でサーバーレスでメンテナンスが簡単です。

Day 6までには、クラウド上で完全に自動化されたサービスが稼働しています。それはうまく動作します。

📧 Days 7–12: メール受信処理プログラムの構築

このアプリはメールで受信したレシートを処理し、必要な詳細を抽出し、すべてをデータベースに整理します。

12日目までに、領収書を端から端まで処理する完全なツールを構築しました。

学んだこと

  1. データの保存と管理:構造化データの保存にPostgreSQL、簡単で共有可能なデータログにGoogle Sheetsを使用しました。
  2. ワークフローの自動化: DigitalOcean Functionsスケジュールトリガーを使用することで、プロセスを自動化し、アプリを規則正しく動作させました。
  3. アプリにインテリジェンスを追加: DigitalOceanのGenAIを統合することで、データのインテリジェントな抽出と整理をワークフローに取り入れ、アプリをより賢く、より能力のあるものにしました。
  4. ファイルの安全な取り扱い: DigitalOcean Spacesを使用して、信頼性が高く、スケーラブルな方法でファイルを保存・管理しました。
  5. APIを使ったアプリの強化: TwilioPostmark、およびResendのようなAPIにより、SMS通知、メール転送、確認メールなどの機能をアプリに追加しました。
  6. デバッグと監視: Papertrailのようなツールを使用して、あなたはアプリを効果的にデバッグおよび監視し、スムーズに動作させる方法を学びました。

次は何ですか

これは始まりに過ぎません—ここで学んだことは、無数の他のプロジェクトに適用できます。続けるためのいくつかの方法を紹介します:

  • 他の開発者とつながり、あなたが作ったものを共有し、インスピレーションを得るために、DigitalOceanのDiscordで会話に参加しましょう。
  • さらなるアイデアやプロジェクトのために、私たちのチュートリアルライブラリを探ってみてください。

もしあなたがフォローしているなら、あなたが作成したものを見たいです—Twitterで進捗やフィードバックを気軽に共有してください。

シンプルに保ちましょう。役に立つものを作りましょう。楽しい構築を! 🚀

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