Python으로 일반적인 방법으로 이메일을 전송하면 본문의 모든 내용은 단순 텍스트(simple text)로 처리됩니다. 메시지 안에 HTML 태그를 포함하더라도 태그는 그대로 문자열로 출력될 뿐, 실제 HTML 문법에 따라 서식이 적용되지 않습니다.
하지만 Python은 HTML 형식의 이메일을 실제 HTML로 렌더링되도록 전송하는 기능을 제공합니다. 핵심은 이메일 헤더에 올바른 MIME 정보를 지정하는 것입니다.
MIME 헤더 설정하기
HTML 이메일을 전송할 때는 메시지 헤더에 다음 세 가지 정보를 명시해야 합니다.
- MIME-Version: 사용할 MIME 프로토콜의 버전 (일반적으로 1.0)
- Content-type: 본문의 형식으로, HTML 이메일인 경우
text/html로 지정 - 문자 집합(Character Set): 한글 등 멀티바이트 문자가 깨지지 않도록
charset=UTF-8지정 권장
특히 Content-type: text/html을 지정하면 수신자의 메일 클라이언트가 본문을 HTML 문서로 해석하여 굵은 글씨, 제목 태그 등이 정상적으로 표시됩니다.
예제 코드
다음은 HTML 내용을 이메일로 전송하는 예제입니다. Python 3 기준으로 작성되었습니다.
#!/usr/bin/python
import smtplib
sender = 'from@fromdomain.com'
receivers = ['to@todomain.com']
message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
MIME-Version: 1.0
Content-type: text/html; charset=UTF-8
Subject: SMTP HTML e-mail test
This is an e-mail message to be sent in HTML format.
<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message)
print("Successfully sent email")
except SMTPException:
print("Error: unable to send email")코드 설명
smtplib.SMTP('localhost'): 로컬 SMTP 서버에 연결합니다. 실제 환경에서는 Gmail SMTP(smtp.gmail.com) 등 외부 서버 주소와 포트 번호(예: 587)를 지정할 수 있습니다.sendmail(): 발신자, 수신자 목록, 메시지 본문을 인자로 받아 이메일을 전송합니다.try-except블록: 전송 중 오류가 발생하면SMTPException을 잡아 에러 메시지를 출력합니다.
참고 사항
위 예제는 로컬 호스트에서 SMTP 서버가 실행 중이라는 가정 하에 동작합니다. 서버가 없는 환경에서는 연결 오류가 발생할 수 있으므로, 실제 테스트 시에는 사용 가능한 SMTP 서버 정보를 설정해야 합니다. 또한 HTML과 텍스트를 함께 담아 호환성을 높이려면 email.mime.multipart 모듈을 활용하는 것이 좋습니다.