이메일전송
코드 블록의 Try it Yourself 버튼으로 직접 실행할 수 있다.
구문
1. 파이썬 가상환경 활성화
.venv\Scripts\activate
2. 발신(send) 이메일 SMTP 설정하기
네이버
[환경설정] 클릭 → [POP3/IMAP 설정] 클릭 → [IMAP/SMTP설정] 클릭 → [사용함] 선택 → [확인] 클릭
- 네이버계정에 로그인한다.


- 발신용 이메일 계정에 SMTP를 '사용'으로 설정->저장

구글

2.1. 이메일 전송 흐름 이해
2.1.1. 이메일 전송 흐름

Note: - 통신 규약(프로토콜)의 정의 컴퓨터끼리 정보를 주고받기 위해 정해둔 약속이다. 이메일 서비스는 SMTP, POP3, IMAP이라는 규약에 따라 작동한다.
동작 원리 우편물을 우체국이 중계하듯, 이메일도 전용 서버가 역할을 분담한다.
SMTP 서버 (우편집중국): 메일을 보낼 때 사용한다. 작성된 메일을 받아 수신 측으로 전달한다.
POP3 / IMAP 서버 (관할 우체국): 메일을 받을 때 사용한다. 도착한 메일을 보관하고 사용자에게 보여준다.
2.1.2. 이메일 전송 순서

Note: 1. 발신자의 ID와 비밀번호로 로그인 2. 이메일 작성 3. 보내기 버튼을 눌러 이메일 보내기를 요청. 4. SMTP,POP3, IMAP 프로토콜을 이용하여 각 서버들이 통신을 하고 수신자의 계정에 이메일이 도착하게 된다.
3. 코드작성
- 이메일 전송을 위한
smtplib라이브러리는 파이썬의 표준 라이브러리 이므로 별도의 설치가 필요없다.
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
SENDER_EMAIL = "발신자이메일@naver.com"
SENDER_PW = "이메일비밀번호"
RECEIVER_EMAIL = "수신자이메일@gmail.com"
msg = MIMEMultipart()
msg["From"] = SENDER_EMAIL
msg["To"] = RECEIVER_EMAIL
msg["Subject"] = "파이썬으로 보내는 테스트 메일"
body = "안녕하세요!\n파이썬 smtplib로 발송한 이메일입니다."
msg.attach(MIMEText(body, "plain", "utf-8"))
SMTP_SERVER = "smtp.naver.com"
SMTP_PORT = 465
with smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT) as server:
server.login(SENDER_EMAIL, SENDER_PW)
server.sendmail(SENDER_EMAIL, RECEIVER_EMAIL, msg.as_string())
print("이메일 전송 완료!")
None: 1:
import smtplib— 이메일 발송 기능을 제공하는 라이브러리 2:from email.mime.text import MIMEText— 이메일 본문을 만드는 도구 3:from email.mime.multipart import MIMEMultipart— 제목, 본문, 첨부파일을 한 번에 담는 상자 같은 것 57: 발신자 이메일 주소, 비밀번호, 수신자 이메일 주소 설정 9:12: 이메일 제목과 발신자, 수신자 정보 입력 14MIMEMultipart()— 이메일의 제목·본문·첨부파일을 담을 상자 만들기 1015: 이메일 본문 작성하고 상자에 담기 1718: SMTP 서버 주소와 포트 번호 설정 20~23: SMTP 서버에 접속해서 로그인하고 이메일 전송
3.1. 구글 앱 비밀번호 발급
구글은 보안 정책상 계정 비밀번호 직접 사용이 불가하므로 앱 비밀번호를 별도로 발급해야 한다.
- Google 계정 → 보안 → 2단계 인증 활성화
- 앱 비밀번호 메뉴 → 앱:
메일, 기기:Windows 컴퓨터→ 생성 - 발급된 16자리 비밀번호를
SENDER_PW에 입력
3.2. 환경변수로 비밀번호 관리
import os
from dotenv import load_dotenv
load_dotenv()
SENDER_EMAIL = os.getenv("EMAIL_ADDRESS")
SENDER_PW = os.getenv("EMAIL_PASSWORD")
RECEIVER_EMAIL = os.getenv("RECEIVER_ADDRESS")
None: 1:
import os— 운영체제(컴퓨터)의 환경변수에 접근하는 도구 2:from dotenv import load_dotenv—.env파일을 읽는 도구 4:load_dotenv()—.env파일에 저장된 정보를 메모리에 불러오기 6~8:.env파일에서 저장된 이메일 정보를 불러와 변수에 저장
.env 파일 예시 (프로젝트 루트에 생성):
EMAIL_ADDRESS=발신자이메일@naver.com
EMAIL_PASSWORD=이메일비밀번호
RECEIVER_ADDRESS=수신자이메일@gmail.com
None: -
EMAIL_ADDRESS— 이메일을 보낼 발신자의 주소
EMAIL_PASSWORD— 발신자의 이메일 비밀번호 또는 앱 비밀번호RECEIVER_ADDRESS— 이메일을 받을 수신자의 주소
Warning:
.env파일에는 비밀번호가 들어있으므로.gitignore에.env를 반드시 추가하여 GitHub 등 외부에 절대 업로드되지 않도록 한다.