개요
이 글에서는 파이썬(Python)을 사용해 첨부 파일이 포함된 이메일을 보내는 방법을 알아봅니다. 메일 전송을 위해 별도의 외부 라이브러리는 필요하지 않습니다. 파이썬에는 기본적으로 smtplib라는 모듈이 포함되어 있으며, 이 모듈은 SMTP(Simple Mail Transfer Protocol)를 이용해 메일을 전송합니다. 즉, 메일 발송을 위한 SMTP 클라이언트 세션 객체를 생성하는 역할을 담당합니다.
SMTP를 사용하려면 유효한 발신자·수신자 이메일 주소와 포트 번호가 필요합니다. 포트 번호는 서비스 제공업체마다 다른데, 구글(Gmail)의 경우 587번 포트를 사용합니다.
가장 먼저 메일 전송에 필요한 모듈을 임포트해야 합니다.
import smtplib
여기서는 더 높은 유연성을 위해 MIME(Multipurpose Internet Mail Extension) 모듈도 함께 사용합니다. MIME 헤더에는 발신자와 수신자 정보, 그 외 다양한 세부 정보를 저장할 수 있습니다.
구글 계정 보안 설정
이 예제에서는 구글의 Gmail 서비스를 통해 메일을 보냅니다. 구글의 보안 정책상 몇 가지 사전 설정이 필요할 수 있으며, 이 설정이 되어 있지 않으면 구글이 외부(서드파티) 앱의 접근을 차단하기 때문에 아래 코드가 정상적으로 동작하지 않을 수 있습니다.
접근을 허용하려면 구글 계정에서 '보안 수준이 낮은 앱 허용(Less Secure App Access)' 설정을 활성화해야 합니다. 단, 2단계 인증(two-step verification)이 켜져 있다면 이 설정을 사용할 수 없습니다.
설정을 진행하려면 Google 관리 콘솔(Admin Console)로 이동한 뒤 '보안 수준이 낮은 앱' 관련 항목을 검색하면 됩니다.
참고: 구글은 2022년부터 '보안 수준이 낮은 앱' 지원을 공식 중단했습니다. 최근에는 2단계 인증을 활성화한 후 앱 비밀번호(App Password)를 생성해 일반 비밀번호 대신 입력하는 방식이 권장됩니다.
smtplib로 메일을 보내는 절차
- MIME 객체를 생성한다
- MIME에 발신자, 수신자 주소를 추가한다
- MIME에 메일 제목을 추가한다
- MIME에 본문 내용을 첨부한다
- 적절한 보안 기능과 함께 유효한 포트 번호로 SMTP 세션을 시작한다
- 계정에 로그인한다
- 메일을 전송하고 세션을 종료한다
예제 코드
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
mail_content = '''Hello,
This is a simple mail. There is only text, no attachments are there The mail is sent using Python SMTP library.
Thank You'''
# 메일 주소와 비밀번호
sender_address = 'sender123@gmail.com'
sender_pass = 'xxxxxxxx'
receiver_address = 'receiver567@gmail.com'
# MIME 설정
message = MIMEMultipart()
message['From'] = sender_address
message['To'] = receiver_address
message['Subject'] = 'A test mail sent by Python. It has an attachment.' # 메일 제목
# 메일 본문 및 첨부 내용
message.attach(MIMEText(mail_content, 'plain'))
# 메일 전송을 위한 SMTP 세션 생성
session = smtplib.SMTP('smtp.gmail.com', 587) # gmail과 587번 포트 사용
session.starttls() # 보안(TLS) 활성화
session.login(sender_address, sender_pass) # 메일 아이디와 비밀번호로 로그인
text = message.as_string()
session.sendmail(sender_address, receiver_address, text)
session.quit()
print('Mail Sent')실행 결과
D:\Python TP\Python 450\linux>python 327.Send_Mail.py Mail Sent
코드가 정상적으로 실행되면 위와 같이 'Mail Sent' 메시지가 출력되며, 수신자의 받은 편지함에서 해당 메일을 확인할 수 있습니다. 실제 프로젝트에서는 비밀번호를 코드에 직접 작성하지 말고 환경 변수나 별도의 설정 파일로 관리하는 것이 안전합니다.