이메일 메시지 포맷과 MIME
이메일은 단순히 텍스트만을 전송하는 것이 아니라, 메시지를 다양한 방식으로 포맷팅(Formatting)
하여 전송할 수 있습니다.
이 과정에서 MIME
이라는 정보 식별 표준을 사용합니다.
MIME은 Multipurpose Internet Mail Extensions
의 약자로, 이메일에 여러 형식의 데이터를 포함할 수 있도록 하는 표준입니다.
이번 수업에서는 이메일 메시지의 기본 구조와 함께 MIME 형식을 활용한 이메일 작성법을 알아보겠습니다.
이메일 메시지의 구조
이메일은 크게 헤더(Header)
와 본문(Body)
두 부분으로 구성됩니다.
헤더
헤더는 발신자, 수신자, 제목과 같은 이메일의 기본 정보를 포함합니다.
주요 헤더 항목은 다음과 같습니다.
-
From : 발신자 이메일 주소
-
To : 수신자 이메일 주소
-
Subject : 이메일 제목
-
Date : 이메일 발송 일시
-
Cc : 참조 이메일 주소
-
Bcc : 숨은 참조 이메일 주소
본문
본문은 이메일의 실제 내용을 담습니다.
텍스트, 이미지, 링크, HTML 파일 등 다양한 요소가 포함될 수 있습니다.
일반적으로 이메일 본문은 text/plain
(일반 텍스트) 및 text/html
(HTML 형식)으로 작성됩니다.
이메일에 다양한 형식을 더하는 MIME
MIME
은 이메일에 여러 형식의 데이터를 포함할 수 있도록 하는 정보 식별 표준입니다.
원래 이메일은 텍스트 형식만 지원했지만, MIME 덕분에 이미지, 오디오, 비디오 등을 이메일에 포함하거나 파일을 첨부할 수 있게 되었습니다.
MIME의 주요 구성 요소
-
Content-Type : 이메일 본문이나 첨부 파일의 유형을 정의합니다. 예를 들어
text/plain
은 일반 텍스트,text/html
은 HTML 형식의 텍스트를 의미합니다. -
Content-Transfer-Encoding : 이메일 내용이 인코딩(암호화)된 방식을 정의합니다. 주로
base64
나quoted-printable
방식을 사용합니다. -
Boundary : 여러 MIME 파트를 구분하기 위한 구분자입니다. 이메일 본문에 여러 가지 형식이 포함될 때 각각의 파트를 구분하는 역할을 합니다.
MIME 형식을 사용한 이메일 작성하기
이제 MIME 형식을 사용하여 간단한 HTML 이메일을 작성해 보겠습니다.
아래와 같이 HTML을 활용하면 이메일을 다채롭게 꾸밀 수 있습니다.
# smtplib 라이브러리 불러오기
import smtplib
# 이메일 라이브러리 불러오기
from email.mime.multipart import MIMEMultipart
# 이메일 본문 라이브러리 불러오기
from email.mime.text import MIMEText
# 코 드프렌즈 가입 이메일만 수신 가능
receiver_email = "youremail@example.com"
# 발신자 이메일 설정
sender_email = "admin_email"
sender_password = "admin_password"
smtp_server = "smtp.gmail.com"
port = 587
# 이메일 구성
msg = MIMEMultipart('alternative')
# 이메일 제목, 발신자, 수신자 설정
msg['Subject'] = "[코드프렌즈] 안녕하세요, 코드프렌즈입니다."
msg['From'] = sender_email
msg['To'] = receiver_email
# HTML 형식의 이메일 본문
html = """
<html>
<body>
<h1>HTML 이메일</h1>
<p>
<span style="color:blue;">이메일</span> 발송을
<b>성공적으로</b>완료했습니다!
</p>
</body>
</html>
"""
# MIME 파트 추가
html_email = MIMEText(html, 'html')
msg.attach(html_email)
# SMTP 서버 연결
server = smtplib.SMTP(smtp_server, port)
# TLS(이메일 암호화) 연결
server.starttls()
# 이메일 로그인
server.login(sender_email, sender_password)
# 이메일 메시지를 문자열로 변환
text = msg.as_string()
# 이메일 전송
server.sendmail(sender_email, receiver_email, text)
# SMTP 서버 연결 종료
server.quit()
print("이메일 전송 완료! 수신함을 확인해 주세요.")
위 코드는 간단한 HTML과 CSS를 활용해 제목(h1)과 단락(p)을 포함한 이메일 본문을 작성합니다.
특정 글자를 파란색으로 처리하기 위해 span
태그와 CSS color
속성을 사용했으며, 굵은 글씨를 표현하기 위해 b
태그를 사용했습니다.
실습
코드 에디터의 실습 코드에서 receiver_email
에 코드프렌즈 가입 이메일을 입력하거나 잘 반영되어 있는지 확인하고, 코드를 실행해보세요.
다음 내용이 궁금하다면?
코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!