Tornado는 파이썬으로 개발된 웹 어플리케이션 프레임워크로, 비동기 처리 및 고성능 웹 서버와 함께 사용하기 적합합니다. 이번 블로그 포스트에서는 Tornado에서 메일 전송을 어떻게 할 수 있는지 알아보겠습니다.
메일 전송 라이브러리
Tornado에서 메일 전송을 위해 smtplib
라이브러리를 활용할 수 있습니다. 이 라이브러리는 SMTP(Simple Mail Transfer Protocol) 프로토콜을 사용하여 메일을 전송하는 기능을 제공합니다. Tornado와 함께 웹 서버를 개발하는 경우에는 일반적으로 비동기 처리를 해야하므로, smtplib
대신 aiosmtplib
를 사용하는 것이 좋습니다. 이 라이브러리는 비동기 IO를 지원하므로 Tornado의 비동기 특성과 잘 어울립니다.
메일 전송 설정
메일을 전송하기 전에, 메일 서버의 정보를 설정해야 합니다. 예를 들어, Gmail을 사용하는 경우 아래와 같이 설정할 수 있습니다.
# SMTP 서버 설정
SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587
# 계정 정보
SMTP_USERNAME = 'your_email@gmail.com'
SMTP_PASSWORD = 'your_password'
위의 설정에서 SMTP_SERVER
는 메일 서버의 호스트 주소, SMTP_PORT
는 포트 번호를 의미합니다. SMTP_USERNAME
과 SMTP_PASSWORD
는 메일 전송에 사용할 계정의 정보입니다. 이 정보는 메일을 보내는데 사용될 것입니다.
메일 전송하는 함수
이제 메일을 전송하는 함수를 작성해보겠습니다.
import asyncio
import aiosmtplib
async def send_email(to_email, subject, body):
# 메일 전송 설정
smtp = aiosmtplib.SMTP(hostname=SMTP_SERVER, port=SMTP_PORT, use_tls=True)
await smtp.connect()
# 로그인
await smtp.login(SMTP_USERNAME, SMTP_PASSWORD)
# 메일 전송
message = f"Subject: {subject}\n\n{body}"
await smtp.sendmail(SMTP_USERNAME, to_email, message)
# 연결 종료
await smtp.quit()
위의 코드에서 send_email
함수는 세 개의 매개변수를 받습니다. to_email
은 수신자의 이메일 주소, subject
는 메일 제목, body
는 메일 내용입니다. 함수 내부에서는 aiosmtplib.SMTP
를 사용하여 SMTP 서버에 연결하고, 로그인 후 메일을 전송합니다.
메일 전송 예제
이제 앞서 작성한 메일 전송 함수를 사용하여 실제로 메일을 전송하는 예제를 살펴보겠습니다.
import tornado.ioloop
import tornado.web
import asyncio
class EmailHandler(tornado.web.RequestHandler):
async def post(self):
to_email = self.get_argument('to_email')
subject = self.get_argument('subject')
body = self.get_argument('body')
await send_email(to_email, subject, body)
self.write('메일이 성공적으로 전송되었습니다.')
if __name__ == "__main__":
app = tornado.web.Application([(r"/send_email", EmailHandler)])
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
위의 예제는 Tornado의 RequestHandler
를 사용하여 /send_email
엔드포인트로 POST 요청을 받으면, 이메일을 전송하는 로직을 수행합니다.
결론
Tornado에서 메일을 전송하는 방법을 알아보았습니다. smtplib
대신 aiosmtplib
를 사용하여 비동기 특성과 어울리게 메일 전송 기능을 구현할 수 있습니다. 메일 전송은 웹 애플리케이션 개발 시 자주 사용되는 기능이므로, Tornado에서 메일 전송을 어떻게 구현할 수 있는지 알아두면 유용합니다.