본문 바로가기
프로그래밍/파이썬 라이브러리

[파이썬 라이브러리] 2. smtplib 이메일보내기(with as 구문 비교)

by it-수다쟁이증후군 2023. 4. 22.

오늘은 파이썬의 smtplib 라이브러리와 with as 구문 를 사용하여 이메일을 보내는 방법에 대해 알아보겠습니다.

1.smtplib 라이브러리란?

  • smtplib는 파이썬의 표준 라이브러리 중 하나로,
  • Simple Mail Transfer Protocol(SMTP)을 사용하여 이메일을 보낼 수 있도록 도와줍니다.
  • 이 라이브러리를 활용하면 간단한 몇 줄의 코드만으로 이메일을 보낼 수 있어 매우 편리합니다.

2. smtplib 라이브러리 설치

  • smtplib는 파이썬의 기본 라이브러리로 제공되기 때문에
  • 별도의 설치 과정이 필요하지 않습니다.

3. 이메일 전송하기

3-1. 메일의 기본 설정 5가지

1) 라이브러리 임포트

# 1. smtplib 라이브러리 설치
import smtplib

2) 서버 정보( 메일서버 URL , port번호)

# 2. SMTP 서버 접속을 위한 설정
smtp_server = 'smtp.example.com'
smtp_port = 587  # 일반적으로 사용되는 포트 번호는 587입니다.

3) 사용자 정보( ID, 비밀번호 )

# 3. SMTP 서버에 로그인하기 위한 사용자 정보
username = 'your_email_username'
password = 'your_email_password'

4) 메일기초변수(보내는 사람/받는 사람/제목/본문)

# 4. 이메일에 필요한 정보
from_email = 'your_email@example.com'
to_email = 'recipient@example.com'
subject = 'python smptlib Test'
message = 'main message OK'

5) 보낼 메일 실제 문장(메시지 작성)

# 5. 이메일 메시지 생성
email_message = f'Subject: {subject}\n\n{message}'

3-2. with as 없이 메일 보내기

3-2는 읽지 않고 넘어가셔도 됩니다. 이렇게 쓰는 경우가 별로 없거든요. 하지만 전체 smpt에 대한 이해도를 높일 수 있기에 작성합니다. 무엇보다 굉장히 쉽습니다. 그냥 메서드 몇 개 정도입니다.

smtplib 라이브러리를 사용하여 이메일을 보내는 과정은 다음과 같습니다.

  1. smtplib.SMTP() 메서드 :
    SMTP 서버와 연결합니다.
  2. server.ehlo() 메서드 :
    클라이언트와 서버 간의 연결을 초기화합니다.
  3. server.starttls() 메서드 :
    보안 단계를 올립니다.
  4. login() 메서드 :
    SMTP 서버에 로그인합니다. (이메일 계정 정보가 필요합니다.)
  5. sendmail() 메서드 :
    이메일을 보냅니다.
  6. server.quit() 메서드 :
    SMTP 서버와의 연결을 해제합니다. 아래는 예제 코드입니다.
# 1. SMTP 서버와 연결
server = smtplib.SMTP(smtp_server, smtp_port)

# 2. 클라이언트 서버 연결 초기화
server.ehlo()

# 3. TLS 암호화 활성화
server.starttls()

# 4. SMTP 서버에 로그인
server.login(username, password)

# 5. 이메일 보내기
server.sendmail(username, "recipient@example.com", email_message)

# 6. SMTP 서버와의 연결 해제
server.quit()

이러한 과정을 거쳐 이메일이 전송되며, 이 과정에서 발생할 수 있는 오류나 문제를 처리하기 위해 SMTP는 여러 가지 명령어와 응답 코드를 사용합니다.


3-3. with as 구문 사용 메일 보내기

smtplib 라이브러리를 with as 구문을 사용하여 이메일을 보내는 과정은 다음과 같습니다.

with smtplib.SMTP(smtp_server, smtp_port) as server:
    server.starttls()  # TLS 암호화 활성화
    server.login(username, password)  # SMTP 서버에 로그인
    server.sendmail(from_email, to_email, email_message)  # 이메일 전송
  • 뭔가 봐도 코드가 간결해졌습니다.
  • with 문을 사용하면, 이메일을 보낸 후 자동으로 서버 연결이 종료됩니다.
  • with 문은 컨텍스트 관리자(context manager)를 사용하므로,
  • smtplib.SMTP 객체의 __enter__() 메소드가 호출되어 서버에 연결하고 내부적으로 server.ehlo() 메서드가 호출됩니다.
  • 작업이 완료된 후에는 __exit__() 메소드가 호출되고 내부적으로 server.quit() 메서드가 호출되어 서버 연결이 종료됩니다.

with 문을 사용하면 코드가 간결해지고, 자원 관리가 개선되며, 내부적으로 처리되는 세부 사항에 대해 걱정할 필요가 없습니다. 따라서 가능한 경우 with 문을 사용하는 것이 좋습니다.


4. 결론(최종코드 및 결과)

import smtplib

# 1. SMTP 서버 접속을 위한 설정
smtp_server = 'smtp.example.com'
smtp_port = 587  # 일반적으로 사용되는 포트 번호는 587입니다.

# 2. SMTP 서버에 로그인하기 위한 사용자 정보
username = 'your_email_username'
password = 'your_email_password'

# 3. 이메일에 필요한 정보
from_email = 'your_email@example.com'
to_email = 'recipient@example.com'
subject = 'python smptlib Test'
message = 'main message OK'

# 4. 이메일 메시지 생성
email_message = f'Subject: {subject}\n\n{message}'

with smtplib.SMTP(smtp_server, smtp_port) as server: #서버 접속
    server.starttls()  # TLS 암호화 활성화
    server.login(username, password)  # SMTP 서버에 로그인
    server.sendmail(from_email, to_email, email_message)  # 이메일 전송
smtplib 라이브러리를 이용한 메일보내기 실습-google에서 발신 성공한 결과 화면
google에서 naver로 발송

위에는 결과 화면입니다. smtplib의 의 기본적인 동작을 확인하고, with as 구문을 사용여 쉽고, 간결하고, 효율적인 코드를 알아보았습니다.

사실 smtplib 단독사용으로 메일을 보내지 않습니다. 단지 테스트 및 동작에 대한 이해를 위해를 위해 구성했습니다. (1. 연결  2. 초기화  3. 보안  4. 로그인  5. 전달  6. 종료)

세부적으로 들어가면 단계는 더 나눌 수 있지만 6단계만 기억하시면 파이썬 코딩을 하면서 외부 서비스와 연결은 충분히 할 겁니다. 또한 with as 구문으로 더 깔끔하게 코딩할 수 있습니다.

    추가 구현사항
  1. email 라이브러리 사용 :
    편리하고 구조화된 메일을 작성할수 있습니다.
  2. 첨부 파일 추가 :
    이메일에 파일을 첨부하여 전송할 수 있습니다.
    email.mime.base.MIMEBase 객체를 사용
  3. 여러 수신자에게 이메일 보내기 :
    한 번에 여러 명의 수신자에게 이메일을 전송할 수 있습니다.
    msg['To']에 쉼표로 구분된 수신자 이메일 주소 문자열을 할당
  4. HTML 이메일 보내기 :
    다양한 스타일과 형식의 이메일을 전송

  • 참고할 내용

[파이썬]SMTP(Simple Mail Transfer Protocol)의 개념,작동순서,주요기능- (smtplib 라이브러리 기초지식1)

[파이썬] 이메일을 통한 결과값 전송의 이유와 장점8가지

[python 공식문서]smtplib - SMTP protocol client

깃헙 - smtplib 소스코드

댓글