업데이트:

2 분 소요

이메일 자동화 보내기

SMTP

  • 인터넷에서 이메일을 전송하기 위해 널리 사용되는 프로토콜
  • 포트 번호
    • SMTP는 주로 25번 포트 사용
    • 보안을 위한 연결은 587번 포트를 사용하여 STARTTLS를 통해 암호화된 연결 시작
  • STARTTLS : 메일 전송 세션 중에 TLS(전송 계층 보안)를 활성화하여 메일 데이터 암호화

smtplib

  • 파이썬에서 이메일을 프로그래밍적으로 보낼 수 있도록 하는 표준 라이브러리
  • SMTP 프로토콜을 통해 이메일 서버에 연결하고, 메일을 보내거나 관련 작업 수행 가능
  • 간단한 이메일 전송부터 복잡한 MIME 기반 메세지와 보안 연결까지 다양한 이메일 관련 기능 제공

MIME

  • 인터넷에서 텍스트 이외의 데이터(ex. 이미지, 비디오, 오디오 등)를 전송하기 위해 이메일 메세지에 포함시킬 수 있도록 확장한 표준
  • 원래 이메일은 ASCII 텍스트 전송만을 지원했기에, 다양한 형태의 컨텐츠를 다루기 위해 도입
  • 주요 기능
    • 비텍스트 첨부 파일 전송
    • 다국어 텍스트 전송
    • 메세지 본문의 여러 부분 포맷팅
  • MIMEText : 이메일 메세지를 MIME 형식으로 구성할 수 있게 해주는 기능
    • 이메일의 본문과 관련 메타데이터(헤더)를 적절히 관리하고 조작 가능
    • 일반 텍스트, HTML과 같은 형식의 텍스트 처리 가능
    • 파라미터 : 최소 한 개의 파라미터 필요
      • text : 본문 내용을 문자열로 전달
      • subtype : 본문의 내용 타입 지정
        • 기본값 : plain (일반 텍스트)
        • 옵션 : html 과 같이 다른 값으로 설정하여 HTML 형식의 이메일 생성 가능
      • charset : 이메일의 문자 인코딩 지정
        • 권장 : utf-8은 국제적으로 사용되는 문자 인코딩 방식, 다양한 언어의 문자 포함 가능, 이메일 메세지가 다양한 시스템과 호환되며 문자 깨짐 현상을 방지
    • 주요 기능
      • 이메일 본문 설정 : text 는 이메일의 본문으로 설정
      • 헤더 관리
        • Subject : 이메일의 제목 설정
        • From : 발신자 주소
        • To : 수신자 주소
        • Cc : 이메일의 참조 복사본을 보내고자 하는 다른 수신자들의 주소 (Carbon Copy)
    • as_string() : MIMEText 객체를 완전한 문자열 형태의 이메일 메세지로 변환
      • 기능 : 이메일의 헤더와 본문을 포함한 전체 MIME 메세지를 하나의 문자열로 구성
from email.mime.text import MIMEText

# 텍스트 이메일 생성
msg = MIMEText("This is a test email.", 'plain', 'utf-8')

# HTML 이메일 생성
html_msg = MIMEText("<html><body><h1>Hello, world!</h1></body></html>", 'html', 'utf-8')

테스트 메일 전송

  • MIMEText 객체: 이메일의 본문과 메타데이터(헤더) 설정
  • 헤더 설정
    • Subject : 이메일 제목
    • From : 발신자 주소
    • To : 수신자 주소
  • as_string() : MIMEText 객체를 완전한 형태의 이메일 문자열로 변환. 이 문자열은 서버를 통해 전송
  • smtplib.SMTP : 지정된 서버와 포트로 연결
  • starttls() : 보안 연결 활성화
  • login() : 발신자 이메일 계정으로 로그인
  • sendmail() : 이메일을 수신자에게 전송
  • quit() : SMTP 서버 연결을 종료
import smtplib # SMTP 프로토콜 사용을 위한 모듈
from email.mime.text import MIMEText # 텍스트 기반 이메일을 생성하기 위한 클래스

# 발신자, 수신자 및 서버 정보 설정
send_email = "본인 네이버 이메일 주소"
send_pwd = "비밀번호"
recv_email = "받는 사람 이메일 주소"
smtp_name = "smtp.naver.com"
smtp_port = 587

#이메일의 본문 작성
text = """
메일 내용 입력
텍스트1
텍스트2
"""

# MIMEText 객체 생성 및 헤더 설정
msg = MIMEText(text, 'plain', 'utf-8')
msg['Subject'] = "메일 제목 입력"
msg['From'] = send_email
msg['To'] = recv_email

# 이메일 메세지를 문자열로 변환
email_string = msg.as_string()
print(email_string)

# SMTP 서버를 통한 이메일 전송
s = smtplib.SMTP(smtp_name, smtp_port)
s.starttls() # 보안을 위해 TLS 사용
s.login(send_email, send_pwd)
s.sendmail(send_email, recv_email, email_string)
s.quit()

[개인 블로그에도 게시글을 올리고 있어, 이 블로그에는 각 파트별로 중요도가 높다고 생각되는 것들을 다뤄보고자 합니다.]

잘 부탁드립니다.