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
클래스가 실행됩니다. EmailHandler
는 SmtpEmailHandler
를 상속하며, 필요한 설정들을 초기화합니다. 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 공식 문서