파이썬 예제 (이메일 보내기, SMTP)

파이썬으로 메일 보내기 (Simple Mail Transfer Protocol)

  • SMTP는 인터넷으로 이메일을 보낼때 사용하는 프로토콜(약속)
  • TCP 포트 번호는 25번을 사용

준비 작업 (Gmail 사용)

  • 구글 계정 설정
  • 보안, 2단계 인증

  • 앱 비밀번호 생성 (대상 앱 : 메일, 기기 : windows 컴퓨터) 

  • Python 코드에서 앱 비밀번호를 이용한 로그인 예정

파이썬 코드

import smtplib
from email.mime.text import MIMEText

# 세션 생성
s = smtplib.SMTP('smtp.gmail.com', 587)

# TLS 보안 시작
s.starttls()

# 로그인 인증
s.login('xxx@gmail.com', '16자리앱비밀번호')

# 보낼 메시지 설정
msg = MIMEText('내용 : 한글 내용')
msg['Subject'] = '제목 : 오션 코딩 학원'

# 메일 보내기
s.sendmail('sender@gmail.com', 'recevier@gmail.com', msg.as_string())

# 세션 종료
s.quit()

코드 분석

 1~2번 라인에서 smtplib 및 MIMEText 모듈을 불러옵니다. 파이썬은 언어 자체적(built-in) 으로 SMTP를 지원하는 모듈이 있습니다.

5번 라인에서 세션을 만듭니다.
smtplib 모듈의 SMTP class를 생성하고 생성자 함수 전달인자로 smtp server 주소와 포트번호를 입력합니다.

직접 SMTP Class 내부를 살펴보진 않았지만 SMTP class는 TCP Socket을 생성할 것이고,  해당 SMTP 프로토콜과 관련된 데이터를 송수신하는 역할을 담당합니다.

8번 라인은 s.starttls() 함수를 통해 TLS(Transport Layer Security) 모드를 설정합니다. 앞으로 모든 SMTP 명령어는 암호화 되어 송수신되게 됩니다.

아이디나 비번, 메일 내용 등 주요 정보가 소켓으로 전송되니 당연히 필요한 절차입니다.

11번 라인 s.login(아이디, 앱비번) 함수에 계정 아이디와 위에서 생성한 앱비밀번호를 전달합니다.

사실 이 부분은 Python의 try Excetion 구문을 통해 오류처리를 해야하지만 간단히 설명하기 위해 생략하였습니다.

14번 라인은 MIMEText 클래스의 생성자로 메일의 내용을 문자열로 설정합니다.

여기서 MIME(Multipurpose Internet Mail Extensions)는 이메일에 사용되는 인터넷 표준 포맷입니다.

15번 라인은 MIMEText class 객체인 msg ['Subject'] 에 제목 문자열을 설정하는 것으로 간단한 메일이 완성되었습니다.

Python의 MIMEText class의 ['Subject'] 는 딕셔너리 타입으로, 제목에 해당하는 키값에 내용을 담는 형식입니다.

파이썬의 딕셔너리는 키와 값이 쌍으로 존재하는 타입이며, C++ 의 std::map 과 유사한 자료형입니다.

추가적으로 ['From'], ['To'] 등 이메일에 친숙한 딕셔니리 키값이 존재합니다.


18번 라인은 msg 객체에 설정된 메일 내용, 제목 등의 정보를 MIME 표준에 맞도록 변환합니다.

그리고 msg 내부 소켓을 통해 메일을 전송하게 됩니다.

마지막으로 quit() 함수를 호출해 연결 세션을 끊고 종료합니다.


어떤가요?

정말 간단하지 않습니까? 소켓을 몰라도, SMTP를 몰라도, MIME를 몰라도 Python에서 제공하는 내장 모듈을 통해 간단히 메일을 전송가능합니다.

다음 시간에는 IMAP를 이용한 메일 수신에 대해 포스팅해 보겠습니다.

감사합니다.

댓글

이 블로그의 인기 게시물

Qt Designer 설치하기

C++ 예제 (소켓 서버, 이미지, 파일전송)