[python] Tornado를 사용한 이메일 전송 구현 방법

Tornado는 Python으로 개발된 비동기 웹 프레임워크로, 이메일 전송과 같은 백그라운드 작업을 처리하는 데에도 매우 유용하게 사용될 수 있습니다. 이번 글에서는 Tornado를 사용하여 이메일을 전송하는 방법을 알아보겠습니다.

1. Tornado 메일 전송 설정

먼저, Tornado에서 이메일을 전송하기 위해 필요한 설정을 해야합니다. Tornado는 SmtpEmailHandler를 통해 이메일을 전송할 수 있습니다. 다음은 이메일 전송을 위한 설정 예시입니다.

import tornado.ioloop
import tornado.web
from tornado.mail import SmtpEmailHandler

class EmailHandler(SmtpEmailHandler):
    def initialize(self, **kwargs):
        super().initialize(**kwargs)
        self.from_addr = 'sender@example.com'
        self.host = 'smtp.example.com'
        self.username = 'your_username'
        self.password = 'your_password'
        self.port = 587

    def prepare(self):
        self.async_callback(self.send_email)

    def send_email(self):
        self.send_mail(
            to=['recipient@example.com'],
            subject='Hello Tornado',
            body='This is an email sent using Tornado!'
        )
        self.finish()

application = tornado.web.Application([(r"/send_email", EmailHandler)])

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.current().start()

위의 예시에서는 Tornado 애플리케이션에 /send_email URL을 매핑하고, 해당 URL로 요청이 들어오면 EmailHandler 클래스가 실행됩니다. EmailHandlerSmtpEmailHandler를 상속하며, 필요한 설정들을 초기화합니다. send_email 메서드에서는 이메일을 보내는 작업을 수행하고 응답을 완료합니다.

2. 이메일 전송 요청하기

Tornado 애플리케이션을 실행하고, /send_email URL에 POST 요청을 보내면 이메일이 전송됩니다. 다음은 cURL을 사용하여 요청을 보내는 예시입니다.

curl -X POST http://localhost:8888/send_email

3. 에러 처리

이메일 전송 중에 발생하는 에러를 처리하기 위해 try-except 블록을 사용할 수 있습니다. 다음은 예외 처리를 추가한 코드 예시입니다.

def send_email(self):
    try:
        self.send_mail(
            to=['recipient@example.com'],
            subject='Hello Tornado',
            body='This is an email sent using Tornado!'
        )
        self.finish()
    except Exception as e:
        self.set_status(500)
        self.finish('Email sending failed. Reason: {}'.format(str(e)))

에러가 발생하면 HTTP 상태 코드 500을 설정하고, 실패 메시지를 응답으로 반환합니다.

결론

Tornado를 사용하여 이메일 전송을 구현하는 방법에 대해 알아보았습니다. Tornado의 강력한 비동기 기능과 SmtpEmailHandler를 통해 효율적이고 안정적인 이메일 전송을 구현할 수 있습니다. 추가적인 이메일 전송 기능이 필요하다면 Tornado의 공식 문서를 참고하시기 바랍니다.

참고 문서: Tornado 공식 문서