File size: 2,807 Bytes
de2d9d4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# POSTMARK_API_KEY=db96eba8-a4b5-4b83-9377-2e7dcdc00d39
# SMTP_USER=kyowoon.lee1924@gmail.com

import os
import logging
import requests
from concurrent.futures import ThreadPoolExecutor
from fastapi import FastAPI, HTTPException, BackgroundTasks
from fastapi.responses import JSONResponse
from dotenv import load_dotenv

# Load environment variables from .env file
load_dotenv()

# Set up logging configuration
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

app = FastAPI(
    version="0.0.1",
    servers=[
        {
            "url": "https://leekwoon-email-api.hf.space",
            "description": "email API",
        }
    ],
)

from postmarker.core import PostmarkClient
postmark = PostmarkClient(server_token=os.getenv("POSTMARK_API_KEY"))

executor = ThreadPoolExecutor(max_workers=3)  # μ΅œλŒ€ 3개의 μŠ€λ ˆλ“œλ‘œ 비동기 μž‘μ—… 처리

def send_email_(to_email: str):
    # postmark_api_key = os.getenv("POSTMARK_API_KEY")
    from_email = os.getenv("SMTP_USER")  # This should be your verified Postmark sender email

    subject = "[kyobody - μžλ§‰μƒμ„±] μž‘μ—…μ΄ μ™„λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€."
    body = "[kyobody - μžλ§‰μƒμ„±] μž‘μ—…μ΄ μ™„λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.SRT νŒŒμΌμ„ μ²¨λΆ€ν•˜μ—¬ μ „λ‹¬λ“œλ¦½λ‹ˆλ‹€."

    postmark.emails.send(
        From=os.getenv("SMTP_USER"),
        To=to_email,
        Subject=subject,
        HtmlBody=body
    )

    # headers = {
    #     "Accept": "application/json",
    #     "X-Postmark-Server-Token": postmark_api_key,
    #     "Content-Type": "application/json",
    # }

    # data = {
    #     "From": from_email,
    #     "To": to_email,
    #     "Subject": subject,
    #     "TextBody": body,
    # }

    # try:
    #     print('hi')
    #     response = requests.post(
    #         "https://api.postmarkapp.com/email",
    #         headers=headers,
    #         json=data
    #     )
    #     response.raise_for_status()  # Raises an HTTPError if the HTTP request returned an unsuccessful status code
    #     logging.debug(f"Email successfully sent to {to_email}, Response: {response.json()}")

    # except requests.exceptions.RequestException as e:
    #     # Log any exceptions that occur during the email sending process
    #     logging.error(f"Failed to send email to {to_email}: {str(e)}")
    #     raise e

@app.post("/send-email")
def send_email(email: str, background_tasks: BackgroundTasks):
    try:
        # Schedule the email sending in the background
        background_tasks.add_task(executor.submit, send_email_, email)

        # Respond to the client immediately
        return JSONResponse(status_code=202, content={"message": "You will receive an email when it's done."})

    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))