12일째 디지털오션의 12일 – 재전송과 함께 확인 이메일 보내기

우리의 디지털오션 12일 시리즈 마지막 날에 오신 것을 환영합니다! 우리는 이메일 기반 영수증 처리 서비스를 구축하면서 많은 일을 해왔습니다. 이 서비스는 Postmark에서 영수증 세부 정보를 추출하고 디지턤틀오션의 GenAI Agent를 사용하여 안전하게 첨부 파일을 디지턜오션 Spaces에 저장하며 추출된 데이터를 Google 스프레드시트에 저장합니다. 오늘은 마지막 손짓을 추가할 것입니다 – 영수증 세부 정보, 첨부 파일 링크 및 Google 스프레드시트 링크가 포함된 확인 이메일을 보내는 것입니다. 이 최종 단계는 모든 것을 함께 묶어 사용자가 영수증이 성공적으로 처리되었음을 즉시 알 수 있도록 보장합니다.

🚀 배울 내용

이 자습서를 완료하면 다음을 알게 될 것입니다:

  1. Resend API를 사용하여 확인 이메일을 프로그래밍 방식으로 보내는 방법.
  2. 환경 변수를 사용하여 민감한 자격 증명을 안전하게 관리합니다.
  3. 영수증 세부 정보, 첨부 파일 링크 및 스프레드시트 URL을 포함하여 형식 지정 및 거래 이메일을 보냅니다.
  4. 전체 이메일 처리 워크플로우를 테스트하고 문제 해결합니다.

🛠 필요한 것

만약 따라 진행하려면, 이미 다음을 따르고 있다고 가정합니다: 11일차: Google Sheets에 영수증 데이터 및 첨부 파일 저장 및 다음이 준비되어 있다:

확인 이메일을 보내기 위해 Resend를 통합하는 방법에 관심이 있다면, 다음이 필요합니다:

  • Resend 계정: Resend에서 가입합니다.
  • API 키: Resend 대시보드에서 생성합니다.

단계 1: 재전송 계정 생성 및 API 키 받기

이메일을 프로그래밍 방식으로 보내기 위해 트랜잭션 이메일을 보내는 개발자 친화적인 API 인 Resend을 사용할 것입니다. 이를 통해 이메일 서버 설정, SMTP 구성 관리, 또는 스팸 필터 걱정 없이 이메일을 손쉽게 보낼 수 있습니다.

  1. 먼저, Resend로 이동하여 무료 계정을 생성하세요. 로그인 후 대시보드의 API 키 섹션으로 이동하여 새 API 키를 생성하세요.

  2. API 키에 설명적인 이름을 부여하고 영수증 처리 앱과 같이 설정하고 권한전체 액세스로 설정하세요.

  3. API 키 복사: API 키는 한 번만 표시됩니다. 복사하여 안전하게 보관하세요. 다음 단계에서 Resend와 앱을 인증하는 데 필요합니다.

단계 2: 환경 변수 업데이트

이제 Resend API 키를 얻었으므로, 이를 DigitalOcean의 환경 변수로 저장해야 합니다. 이 시리즈 동안 계속 해오던 것과 마찬가지로 처리해봅시다.

Resend 통합을 위해 두 가지 환경 변수를 저장해야 합니다:

  • RESEND_API_KEY: 단계 1에서 생성한 API 키로, Resend와 앱을 인증하는 데 사용됩니다.
  • RESEND_EMAIL_FROM: 확인 이메일을 보내는 데 사용할 보내는 사람 이메일 주소입니다. Resend 계정에서 확인된 주소여야 합니다.

이러한 변수를 추가하려면 다음 단계를 따르세요:

  1. 디지털오션 앱 플랫폼 대시보드로 이동하여 Flask 앱을 찾고 설정 탭으로 이동하십시오. 환경 변수 아래에 두 가지 변수를 추가하십시오:
    • 키: RESEND_API_KEY

      • 값: 단계 1에서 생성한 API 키를 붙여넣으십시오.
    • 키: RESEND_EMAIL_FROM

      • 값: Resend 계정에서 확인된 발신자 이메일 주소를 입력하십시오.
  2. 변경 사항을 저장하여 Flask 앱에서 Resend API 키를 사용할 수 있도록 하십시오. 다음으로 업데이트할 것입니다.

단계 3: Resend Python 라이브러리 설치

다음으로, API를 처리하기 위해 Resend Python 라이브러리를 설치합니다. 이를 통해 코드를 깔끔하게 유지하고 원시 HTTP 요청을 처리하는 것을 피할 수 있습니다. 터미널에서 다음을 실행하세요:

pip install resend

단계 4: requirements.txt 업데이트

requirements.txt를 직접 편집하는 대신, 정확한 버전으로 모든 설치된 종속성을 나열하는 pip freeze를 사용하세요. 다음을 실행하세요:

pip freeze > requirements.txt

이렇게 하면 resend를 포함한 앱이 필요로 하는 모든 것이 requirements.txt에 업데이트됩니다.

단계 5: 이메일 전송 함수 작성

이제 확인 이메일을 보내는 논리를 추가할 시간입니다. 친구에게 소포가 도착했음을 알리는 것처럼 생각해보세요. 여기서는 영수증을 위한 이메일을 보내는 것입니다.

우리는 수령자의 이메일, 영수증 세부 정보, 첨부 링크 및 Google 스프레드시트 URL을 가져와 이를 이메일 형식으로 변환하고 보내는 send_confirmation_email 함수를 작성할 것입니다. 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. 런타임 로그 확인: 예상대로 작동하지 않는 경우, 앱 플랫폼 대시보드의 런타임 로그 탭을 사용하여 런타임 문제를 디버그하세요. Resend API 또는 다른 앱 구성 요소와 관련된 오류를 찾아보세요.

단계 5: 전체 워크플로 테스트

이제 앱이 완전히 구성되고 준비되었으므로 전체 워크플로를 테스트할 시간입니다. 이메일 본문이 처리되고, 첨부 파일이 디코딩되어 DigitalOcean Spaces에 업로드되었는지, 영수증 세부 정보 및 첨부 파일 URL이 Google Sheets에 저장되었는지, 그리고 발신자에게 확인 이메일이 전송되었는지 확인하겠습니다.

다음은 단계별로 테스트하는 방법입니다:

  1. 테스트 이메일 보내기: 텍스트 본문과 첨부 파일이 포함된 이메일을 Postmark로 보내십시오. Postmark를 구성하는 방법을 모르는 경우, Postmark를 플라스크 앱에 연결하는 방법에 대해 확인하십시오. 우리는 Postmark를 설정하여 이메일을 앱으로 전달하는 과정을 안내한 Day 8: Connecting Postmark to Your Flask App을 확인하십시오.

  2. Postmark 활동 JSON 확인: Postmark 대시보드에서 활동 탭으로 이동합니다. 보낸 이메일을 찾아 JSON 페이로드에 텍스트 본문과 Base64로 인코딩된 첨부 파일 데이터가 포함되어 있는지 확인합니다. 이는 Postmark가 이메일 데이터를 올바르게 앱으로 전달하고 있는지 확인하며, 우리가 Day 8에서 설정한 대로입니다.

  3. 로그 모니터링: DigitalOcean 앱 플랫폼 대시보드에서 런타임 로그를 확인하여 앱이 JSON 페이로드를 처리하는지 확인하십시오. 영수증 세부 정보가 추출되고 첨부 파일이 DigitalOcean Spaces로 업로드되는 로그가 표시됩니다. DigitalOcean 앱 플랫폼 대시보드의 로그 탭에서 런타임 로그에 액세스할 수 있습니다. DigitalOcean 로그에 익숙하지 않다면, Day 9: Automating Receipt Parsing withDigitalOcean의 GenAI Agent에서 이를 살펴보았습니다.

  4. 스페이스 업로드 확인: 파일이 성공적으로 업로드되었는지 확인하려면 DigitalOcean Space를 방문하십시오. 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. 환경 변수 확인: 디지털오션 앱 플랫폼 대시보드의 환경 변수에서 API 키(RESEND_API_KEY)와 보내는 이메일(RESEND_EMAIL_FROM)이 올바르게 구성되어 있는지 확인하세요.

  3. 디지털오션 런타임 로그 검사: 디지털오션 앱 플랫폼 대시보드의 런타임 로그 탭을 열어 이메일 처리나 첨부 파일 업로드 중에 발생한 오류를 확인하세요. 특히 Postmark나 Resend과의 상호 작용에 대해 유용한 통찰을 제공할 수 있습니다.

  4. Postmark 활동 검토: Postmark의 활동 탭에서 테스트 이메일이 Flask 앱으로 올바르게 전달되었는지 확인하십시오. 문제가 있는 경우, Postmark는 전달 또는 구성 문제와 관련된 오류를 표시할 것입니다.

🎁 마무리

축하합니다! 12일간의 디지털오션 시리즈를 성공적으로 완료하고 완전히 기능하는 이메일 기반 영수증 처리 서비스를 구축했습니다.

오늘은 다음을 하셨습니다:

  • 트랜잭션 이메일을 보내기 위해 Resend API를 통합했습니다.
  • 민감한 자격 증명을 안전하게 관리하기 위해 환경 변수를 구성했습니다.
  • 수령 확인 이메일을 수신 정보, 첨부 파일 링크 및 스프레드시트 URL과 함께 보냈습니다.
  • 이메일 제출부터 최종 확인까지 전체 워크플로우를 테스트했습니다.

확인 이메일을 추가함으로써, 이메일을 처리하고 세부 정보를 추출하며 첨부 파일을 저장하고 모든 것을 Google 시트에서 조직화하는 프로젝트를 마무리했습니다. 사용자 친화적이고 실용적이며 실제 문제를 해결할 준비가 되어 있습니다.

📚 디지털오션의 12일

이것은 디지털오션 12일 시리즈의 끝을 알립니다. 지난 12일 동안 한 걸음씩 두 가지 실제 문제 해결 애플리케이션을 만들었습니다. 그 과정에서 DigitalOcean의 Serverless Functions, App Platform, Spaces Object Storage, PostgreSQL, DigitalOcean GenAI, Twilio, Google Sheets API, Postmark, PaperTrail, Resend와 같은 도구를 사용했습니다. 각 부분이 합쳐져 더 큰 가치를 형성했습니다.

여기에 여러분이 만든 것을 간단히 요약하면 다음과 같습니다:

🎂 1일부터 6일: 생일 알림 서비스 만들기

이 앱은 생일을 추적하고 SMS 알림을 자동으로 보냅니다. 가벼우며 서버리스이며 유지보수가 쉽습니다.

제 6일까지 클라우드에서 완전히 자동화된 서비스가 실행 중입니다. 그저 작동합니다.

📧 7일부터 12일까지: 이메일 영수증 프로세서 구축

이 앱은 이메일 영수증을 처리하고 필요한 세부 정보를 추출하여 모든 것을 데이터베이스에 정리합니다.

12일차까지 영수증 처리를 완전히 다루는 완전한 도구를 만들었습니다.

배운 점

  1. 데이터 저장 및 관리: 구조화된 데이터 저장을 위해 PostgreSQL을 사용하고 쉽게 공유 가능한 데이터 기록을 위해 Google Sheets를 사용했습니다.
  2. 워크플로 자동화: DigitalOcean Functions스케줄링 트리거를 사용하여 프로세스를 자동화하고 앱이 정확하게 작동하도록 만들었습니다.
  3. 앱에 지능 추가: DigitalOcean의 GenAI를 통합하여 지능적인 데이터 추출 및 조직화를 워크플로에 통합하여 앱을 더 똑똑하고 강력하게 만들었습니다.
  4. 파일 안전하게 처리: DigitalOcean Spaces를 사용하여 신뢰할 수 있고 확장 가능한 방식으로 파일을 저장하고 관리했습니다.
  5. API로 앱 향상: Twilio, Postmark 및 Resend와 같은 API를 사용하여 SMS 알림, 이메일 전달 및 확인 이메일과 같은 기능을 앱에 추가했습니다.
  6. 디버깅 및 모니터링: Papertrail과 같은 도구를 사용하여 앱을 효과적으로 디버깅하고 모니터링하여 원활하게 실행되도록 유지했습니다.

다음 단계

이것은 시작에 불과합니다. 여기서 배운 내용은 무수히 많은 다른 프로젝트에 적용할 수 있습니다. 계속 진행하는 몇 가지 방법은 다음과 같습니다:

따라오신다면, 여러분이 만드는 것을 보고 싶습니다. 진행 상황이나 피드백을 Twitter에서 자유롭게 공유해주세요.

단순하게 유지하세요. 유용한 것을 만들어보세요. 행복한 건설! 🚀

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