smtp.starttls()를 사용하는 이유?

Kerin·2024년 7월 16일
post-thumbnail

메일링 관련 개발업무를 맡으면서 smtp 관련 공부를 하다가, smtp.starttls()를 사용하는 이유가 궁금해졌다.

* SMTP(Simple Mail Transfer Protocol)

  • 인터넷에서 이메일을 전송하기 위한 표준 프로토콜

  • 이메일 클라이언트(ex- Outlook/Gmail)가 이메일 서버와 통신하여 메세지를 보내는 방식

  • 기본적으로 텍스트 형식의 데이터를 주고 받기에 중간에서 데이터를 가로채거나 조작하는 것이 상대적으로 쉬움!
    -> 이러한 이유로 smtp.starttls()를 사용하는데, 그 전에 TLS 개념부터 살펴보고 갑시다!

* TLS(Transport Layer Security) ?

  • TLS는 네트워크 통신에서 보안을 제공하는 프로토콜
  • 데이터가 전송되는 동안 암호화되어 중간에서 데이터를 가로채는 것을 방지
  • HTTPS가 HTTP의 보안버전인 것처럼, TLS는 SMTP같은 통신 프로토콜에 보안을 추가함

* smtp.starttls()의 역할 ?

  • starttls()는 이메일을 보내기 위해 SMTP 서버와 통신을 시작할 때, 보안을 강화하기 위해서 사용됨
  • 이 메서드는 SMTP 서버와의 연결을 암호화된 연결로 전환
  • 과정은 다음과 같다.
    1) 초기 연결: 클라이언트는 SMTP 서버와 평문(암호화되지 않은)으로 연결을 시작합니다.
    2) STARTTLS 명령: 클라이언트가 서버에 STARTTLS 명령을 보냅니다. 이는 서버에게 앞으로의 통신을 암호화된 채널을 통해 진행할 것을 요청하는 것입니다.
    3) 암호화된 연결: 서버가 이 요청을 수락하면, 클라이언트와 서버는 TLS를 통해 암호화된 연결을 설정합니다.
    4) 인증 및 데이터 전송: 암호화된 연결이 설정된 후에, 클라이언트는 인증 정보를 제공하고 이메일 데이터를 전송합니다.

* 왜 smtp.starttls()를 사용해야 하는가?

  • 보안: SMTP는 기본적으로 암호화되지 않기 때문에, 네트워크 상에서 쉽게 도청될 수 있음. starttls()를 사용하면 데이터가 암호화되어 전송되므로, 중간에서 데이터를 가로채거나 수정하는 것을 방지할 수 있음
  • 프라이버시 보호: 사용자의 이메일 내용, 자격 증명(아이디, 비밀번호) 등이 암호화되어 전송되므로, 프라이버시가 보호됨
  • 요구사항 준수: 많은 SMTP 서버는 보안을 이유로 암호화된 연결을 요구함-> starttls()를 사용하지 않으면 이러한 서버에 이메일을 보낼 수 없음
  • (참고) 기본적인 smtp 예시코드
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# SMTP 서버 정보
smtp_server = "smtp.example.com"
port = 587  # TLS 사용 시 일반적으로 587 포트를 사용합니다.
login = "your_email@example.com"
password = "your_password"

# 이메일 내용 작성
msg = MIMEMultipart()
msg['From'] = login
msg['To'] = "recipient@example.com"
msg['Subject'] = "Test Email"
body = "This is a test email."
msg.attach(MIMEText(body, 'plain'))

# SMTP 서버에 연결하고 이메일 보내기
with smtplib.SMTP(smtp_server, port) as server:
    server.starttls()  # TLS(암호화) 시작
    server.login(login, password)  # 로그인
    server.sendmail(login, "recipient@example.com", msg.as_string())  # 이메일 전송
profile
완벽하지 않아도 꾸준한 기록을 위한 공간

0개의 댓글