728x90
반응형
Python 이메일 전송 스크립트 작성하기
이메일 전송은 Python으로 자동화할 수 있는 매우 실용적인 작업 중 하나입니다. 이번 포스팅에서는 Python의 smtplib
과 email
모듈을 활용하여 이메일을 전송하는 스크립트를 작성하는 방법을 다룹니다. 기본적인 이메일 전송부터 첨부파일을 포함한 이메일까지 작성하는 방법을 예제로 설명하겠습니다.
1. Python 이메일 전송 기본 이해
Python으로 이메일을 전송하려면 SMTP(Simple Mail Transfer Protocol)를 사용합니다. Python 표준 라이브러리에는 이메일 전송을 위한 smtplib
모듈과 이메일 생성에 유용한 email
모듈이 포함되어 있습니다.
주요 개념
- SMTP 서버: 이메일을 전송하기 위한 서버입니다. Gmail, Outlook 등의 이메일 제공 업체는 SMTP 서버를 제공합니다.
- 인증: 대부분의 SMTP 서버는 보안 및 스팸 방지를 위해 인증을 요구합니다. 이메일과 비밀번호를 제공해야 합니다.
- 포트 번호:
587
: TLS(전송 계층 보안) 사용465
: SSL(보안 소켓 계층) 사용
2. 환경 설정
2.1 필요 라이브러리 설치
Python 표준 라이브러리를 사용하므로 별도의 설치는 필요하지 않습니다. 하지만 Gmail과 같은 외부 서비스를 사용할 경우 보안 설정이 필요할 수 있습니다.
2.2 Gmail SMTP 서버 설정 예제
- SMTP 서버:
smtp.gmail.com
- 포트:
587
(TLS 사용) - 보안 설정: Gmail에서 "보안 수준이 낮은 앱의 액세스 허용"을 활성화해야 할 수 있습니다.
3. 기본 이메일 전송 스크립트
다음은 가장 기본적인 텍스트 이메일을 전송하는 스크립트입니다.
import smtplib
from email.mime.text import MIMEText
# 이메일 설정
SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587
EMAIL_ADDRESS = 'your_email@gmail.com'
EMAIL_PASSWORD = 'your_password'
def send_email(to_email, subject, content):
# 이메일 내용 구성
msg = MIMEText(content)
msg['Subject'] = subject
msg['From'] = EMAIL_ADDRESS
msg['To'] = to_email
# SMTP 서버 연결 및 이메일 전송
with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
server.starttls() # TLS 암호화 시작
server.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
server.send_message(msg)
# 테스트 실행
send_email('recipient_email@gmail.com', 'Test Email', 'Hello, this is a test email.')
설명
MIMEText
: 텍스트 이메일 내용을 구성합니다.smtplib.SMTP
: SMTP 서버와 통신하기 위한 클래스입니다.starttls()
: TLS 암호화를 활성화합니다.
4. 첨부파일이 포함된 이메일 전송
이제 첨부파일이 포함된 이메일을 전송하는 방법을 알아보겠습니다.
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
# 이메일 설정
SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587
EMAIL_ADDRESS = 'your_email@gmail.com'
EMAIL_PASSWORD = 'your_password'
def send_email_with_attachment(to_email, subject, content, file_path):
# 이메일 구성
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = EMAIL_ADDRESS
msg['To'] = to_email
# 텍스트 추가
msg.attach(MIMEText(content, 'plain'))
# 첨부파일 추가
with open(file_path, 'rb') as attachment:
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header(
'Content-Disposition',
f'attachment; filename={file_path.split("/")[-1]}'
)
msg.attach(part)
# SMTP 서버 연결 및 이메일 전송
with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
server.starttls()
server.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
server.send_message(msg)
# 테스트 실행
send_email_with_attachment('recipient_email@gmail.com', 'Test Email with Attachment', 'Please find the attachment.', 'example.pdf')
설명
MIMEMultipart
: 여러 부분으로 구성된 이메일을 생성합니다.MIMEBase
: 첨부파일의 바이너리 데이터를 처리합니다.encoders.encode_base64()
: 첨부파일을 Base64로 인코딩합니다.
5. HTML 이메일 전송
HTML 형식의 이메일은 더 매력적이고 구조화된 정보를 전달할 수 있습니다.
import smtplib
from email.mime.text import MIMEText
# 이메일 설정
SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587
EMAIL_ADDRESS = 'your_email@gmail.com'
EMAIL_PASSWORD = 'your_password'
def send_html_email(to_email, subject, html_content):
# HTML 이메일 내용 구성
msg = MIMEText(html_content, 'html')
msg['Subject'] = subject
msg['From'] = EMAIL_ADDRESS
msg['To'] = to_email
# SMTP 서버 연결 및 이메일 전송
with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
server.starttls()
server.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
server.send_message(msg)
# 테스트 실행
html_content = '''
<html>
<body>
<h1>Welcome to Python Email Tutorial</h1>
<p>This is an <b>HTML</b> email.</p>
</body>
</html>
'''
send_html_email('recipient_email@gmail.com', 'HTML Email', html_content)
설명
MIMEText(html_content, 'html')
: 이메일 내용을 HTML 형식으로 구성합니다.
6. 보안과 예외 처리
6.1 민감 정보 보호
이메일과 비밀번호를 코드에 직접 포함하지 않는 것이 좋습니다. 대신 환경 변수를 사용하세요.
import os
EMAIL_ADDRESS = os.getenv('EMAIL_ADDRESS')
EMAIL_PASSWORD = os.getenv('EMAIL_PASSWORD')
6.2 예외 처리 추가
try:
send_email('recipient_email@gmail.com', 'Test Email', 'Hello, this is a test email.')
except Exception as e:
print(f'Error: {e}')
7. 마무리
이번 포스팅에서는 Python으로 이메일 전송 스크립트를 작성하는 방법을 배웠습니다. 텍스트 이메일, HTML 이메일, 첨부파일 포함 이메일까지 다양한 사례를 다뤘습니다. 이를 바탕으로 이메일 자동화 작업을 쉽게 구현할 수 있을 것입니다.
Python으로 더 많은 작업을 자동화하고 싶다면 계속해서 소프트웨어 공장를 방문해주세요!
728x90
반응형
'Python > Python 심화' 카테고리의 다른 글
Python 파일 및 폴더 관리 자동화 (0) | 2025.08.14 |
---|---|
Python 브라우저 자동화를 위한 Selenium 사용 (0) | 2025.08.13 |
Python 데이터베이스 쿼리 최적화 팁 (0) | 2025.08.12 |
Python MySQL과 PostgreSQL 연동 방법 (0) | 2025.08.11 |
Python SQLAlchemy를 이용한 ORM 사용 (0) | 2025.08.10 |