04 이메일전송
1. 파이썬 가상환경 활성화
1.venv\Scripts\activate2. 발신(send) 이메일 SMTP 설정하기
네이버
[환경설정] 클릭 → [POP3/IMAP 설정] 클릭 → [IMAP/SMTP설정] 클릭 → [사용함] 선택 → [확인] 클릭
- 네이버계정에 로그인한다.


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

구글

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

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

참고
- 발신자의 ID와 비밀번호로 로그인
- 이메일 작성
- 보내기 버튼을 눌러 이메일 보내기를 요청.
- SMTP,POP3, IMAP 프로토콜을 이용하여 각 서버들이 통신을 하고 수신자의 계정에 이메일이 도착하게 된다.
3. 코드작성
- 이메일 전송을 위한
smtplib라이브러리는 파이썬의 표준 라이브러리 이므로 별도의 설치가 필요없다.
1import smtplib2from email.mime.text import MIMEText3from email.mime.multipart import MIMEMultipart4
5SENDER_EMAIL = "발신자이메일@naver.com"6SENDER_PW = "이메일비밀번호"7RECEIVER_EMAIL = "수신자이메일@gmail.com"8
9msg = MIMEMultipart()10msg["From"] = SENDER_EMAIL11msg["To"] = RECEIVER_EMAIL12msg["Subject"] = "파이썬으로 보내는 테스트 메일"13
14body = "안녕하세요!\n파이썬 smtplib로 발송한 이메일입니다."15msg.attach(MIMEText(body, "plain", "utf-8"))16
17SMTP_SERVER = "smtp.naver.com"18SMTP_PORT = 46519
20with smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT) as server:21 server.login(SENDER_EMAIL, SENDER_PW)22 server.sendmail(SENDER_EMAIL, RECEIVER_EMAIL, msg.as_string())23
24print("이메일 전송 완료!")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. 환경변수로 비밀번호 관리
1import os2from dotenv import load_dotenv3
4load_dotenv()5
6SENDER_EMAIL = os.getenv("EMAIL_ADDRESS")7SENDER_PW = os.getenv("EMAIL_PASSWORD")8RECEIVER_EMAIL = os.getenv("RECEIVER_ADDRESS")1: import os — 운영체제(컴퓨터)의 환경변수에 접근하는 도구
2: from dotenv import load_dotenv — .env 파일을 읽는 도구
4: load_dotenv() — .env 파일에 저장된 정보를 메모리에 불러오기
6~8: .env 파일에서 저장된 이메일 정보를 불러와 변수에 저장
.env 파일 예시 (프로젝트 루트에 생성):
1EMAIL_ADDRESS=발신자이메일@naver.com2EMAIL_PASSWORD=이메일비밀번호3RECEIVER_ADDRESS=수신자이메일@gmail.comEMAIL_ADDRESS— 이메일을 보낼 발신자의 주소EMAIL_PASSWORD— 발신자의 이메일 비밀번호 또는 앱 비밀번호RECEIVER_ADDRESS— 이메일을 받을 수신자의 주소
주의
.env 파일에는 비밀번호가 들어있으므로 .gitignore에 .env를 반드시 추가하여 GitHub 등 외부에 절대 업로드되지 않도록 한다.