Simple Mail Transfer Protocol(SMTP)은 email 메시지를 network 상에서 주고받기 우한 표준 통신 프로토콜이다. 송신자로부터 수신 email 서버로 이메일이 전송되는 방식을 규정한다.
파이썬에 내장된 smtplib 라이브러리를 활용해 간단한 이메일을 보내는 연습을 해볼 수 있다(gmail -> yahoo).
다만 gmail에서는 코드를 사용한 이메일 작성에 대해 보안 차단을 적용하고 있으므로 이것을 먼저 뚫어야 한다.
이후 gmail SMTP 서버에 로그인해서, yahoo 이메일로 간단한 이메일을 송신해본다.
1. 앱에 의한 gmail SMTP 로그인에 대한 차단 풀기
smtplib 라이브러리 사용시, 일반적인 gmail 아이디와 비밀번호로 단순한 계정 접속을 할 수 없다.
대신 gmail 계정에 등록된 "앱"을 통한 로그인을 사용할 수 있다.
현재 gmail 계정은 보안 규정상 앱에 의한 로그인을 지원하지만, 추천하지 않으므로 해당 방법을 숨겨(?)놨다.
앱을 사용하기 위해 아래 순서대로 해야 한다. (2024년 11월 기준)
gmail 메인화면에서 프로필 버튼을 클릭하고, "Manage your Google Account"를 실행한다.
좌측의 Security를 선택한다.
메뉴 중 "2-Step Verification"을 선택하고, 2단계 인증이 갖춰지도록한다.
Gmail 정책상, 앱에 의한 로그인을 활성화하려면 2단계 인증이 갖춰져 있어야 한다.
위쪽 검색창에 app password를 검색하고, App passwords를 선택한다.
앱을 새로 등록한다. 앱 이름이 중요하진 않고, 자동생성되는 비밀번호 문자열 확보가 중요하다.
자동 생성된 앱 비밀번호를 따로 기록해둔다. SMTP 서버에 로그인시 반드시 필요한 비밀번호다!
위 패스워드를 사용해서, 이제 파이썬 코드를 통해 gmail SMTP에 접속할 수 있다.
2. smtplib 라이브러리 사용해서 email 보내기
이제 아래와 같이 코드를 작성해서 실행해보자.
import smtplib
MY_EMAIL = "sender@gmail.com" # 송신자 이메일 계정
MY_PASSWORD = "xvjb nozn jstv afoj" # 송신자 이메일 앱 비밀번호
TO_EMAIL = "receiver@yahoo.com" # 수신자 이메일 주소
with smtplib.SMTP("smtp.gmail.com") as connection: # with문을 사용하면 이메일 전송 이후 connection close됨
connection.starttls() # TLS encryption로 통신 보안을 확보
connection.login(user=MY_EMAIL, password=MY_PASSWORD) # gmail측 SMTP 서버에 로그인
connection.sendmail(
from_addr=MY_EMAIL,
to_addrs=TO_EMAIL,
msg=f"Subject:Hello!\n\nThis is a test email.", # Subject는 이메일 제목이며, 2번 개행시 본문이 작성됨
)
비록 스팸 메일함이지만, gmail 계정으로 보낸 이메일이 정상적으로 yahoo 측으로 수신된 것을 확인할 수 있다.
'Python' 카테고리의 다른 글
[Python] Class 변수와 Instance 변수 사용시 조심할 점 (0) | 2024.12.05 |
---|---|
[Python] Iteration의 원리(Iterator Protocol) (1) | 2024.12.04 |
[Python] dict에 대한 iteration 정리(feat. lambda 함수) (0) | 2024.12.03 |
[Python] Local 변수 vs Global 변수, global 키워드 사용법 (3) | 2024.12.02 |
[Python] Immutable(불변) vs. Mutable(가변) (1) | 2024.11.28 |