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


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

구글



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

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

1. 발신자의 ID와 비밀번호로 로그인
2. 이메일 작성
3. 버튼을 눌러 이메일 보내기를 .
4. SMTP,POP3, IMAP 프로토콜을 이용하여 각 서버들이 통신을 하고 수신자의 계정에 이메일이 도착하게 된다.
3. 코드작성
- 이메일 전송을 위한
smtplib라이브러리는 파이썬의 표준 라이브러리 이므로 별도의 설치가 필요없다.
먼저 메일 계정을 열어 둬야 한다. 네이버 메일 → 환경설정 → POP3/IMAP 설정에서 IMAP/SMTP 사용을 사용함으로 바꾼다. 이 설정을 안 하면 아이디와 비밀번호가 맞아도 로그인이 거부된다.
2단계 인증을 켜 두었다면 계정 비밀번호로는 로그인되지 않는다. 네이버 내 정보 → 보안 설정 → 애플리케이션 비밀번호에서 메일용 비밀번호를 발급받아, 아래 코드의 SENDER_PW 자리에 그 값을 넣는다.
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: 발신자 이메일 주소, 비밀번호, 수신자 이메일 주소 설정12: 이메일 제목과 발신자, 수신자 정보 입력
9:MIMEMultipart()— 이메일의 제목·본문·첨부파일을 담을 상자 만들기
10
1415: 이메일 본문 작성하고 상자에 담기18: SMTP 서버 주소와 포트 번호 설정
17
20~23: SMTP 서버에 접속해서 로그인하고 이메일 전송
3.1. 구글 앱 비밀번호 발급
구글은 보안 정책상 계정 비밀번호 직접 사용이 불가하므로 앱 비밀번호를 별도로 발급해야 한다.
- Google 계정 → 보안 → 2단계 인증 활성화
- 앱 비밀번호 화면(
myaccount.google.com/apppasswords) → 앱 이름을 직접 입력(예:python-mail) → 만들기
예전의 「앱 선택 / 기기 선택」 드롭다운은 없어졌다. 이름은 나중에 어디에 발급한 비밀번호인지 구분하려는 메모일 뿐이라 자유롭게 적으면 된다. - 발급된 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— 이메일을 받을 수신자의 주소
.env 파일에는 비밀번호가 들어있으므로 .gitignore에 .env를 반드시 추가하여 GitHub 등 외부에 절대 업로드되지 않도록 한다.