Type something to search...

04 이메일전송

1. 파이썬 가상환경 활성화

Terminal window
1
.venv\Scripts\activate

2. 발신(send) 이메일 SMTP 설정하기

네이버

[환경설정] 클릭 → [POP3/IMAP 설정] 클릭 → [IMAP/SMTP설정] 클릭 → [사용함] 선택 → [확인] 클릭

  1. 네이버계정에 로그인한다.
  2. 발신용 이메일 계정에 SMTP를 ‘사용’으로 설정->저장

구글

2.1. 이메일 전송 흐름 이해

2.1.1. 이메일 전송 흐름

이메일 전송 흐름

참고

  • 통신 규약(프로토콜)의 정의 컴퓨터끼리 정보를 주고받기 위해 정해둔 약속이다. 이메일 서비스는 SMTP, POP3, IMAP이라는 규약에 따라 작동한다.

  • 동작 원리 우편물을 우체국이 중계하듯, 이메일도 전용 서버가 역할을 분담한다.

  • SMTP 서버 (우편집중국): 메일을 보낼 때 사용한다. 작성된 메일을 받아 수신 측으로 전달한다.

  • POP3 / IMAP 서버 (관할 우체국): 메일을 받을 때 사용한다. 도착한 메일을 보관하고 사용자에게 보여준다.

2.1.2. 이메일 전송 순서

이메일 전송 순서

참고

  1. 발신자의 ID와 비밀번호로 로그인
  2. 이메일 작성
  3. 보내기 버튼을 눌러 이메일 보내기를 요청.
  4. SMTP,POP3, IMAP 프로토콜을 이용하여 각 서버들이 통신을 하고 수신자의 계정에 이메일이 도착하게 된다.

3. 코드작성

  1. 이메일 전송을 위한 smtplib 라이브러리는 파이썬의 표준 라이브러리 이므로 별도의 설치가 필요없다.
1
import smtplib
2
from email.mime.text import MIMEText
3
from email.mime.multipart import MIMEMultipart
4
5
SENDER_EMAIL = "발신자이메일@naver.com"
6
SENDER_PW = "이메일비밀번호"
7
RECEIVER_EMAIL = "수신자이메일@gmail.com"
8
9
msg = MIMEMultipart()
10
msg["From"] = SENDER_EMAIL
11
msg["To"] = RECEIVER_EMAIL
12
msg["Subject"] = "파이썬으로 보내는 테스트 메일"
13
14
body = "안녕하세요!\n파이썬 smtplib로 발송한 이메일입니다."
15
msg.attach(MIMEText(body, "plain", "utf-8"))
16
17
SMTP_SERVER = "smtp.naver.com"
18
SMTP_PORT = 465
19
20
with 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
24
print("이메일 전송 완료!")

1: import smtplib — 이메일 발송 기능을 제공하는 라이브러리 2: from email.mime.text import MIMEText — 이메일 본문을 만드는 도구 3: from email.mime.multipart import MIMEMultipart — 제목, 본문, 첨부파일을 한 번에 담는 상자 같은 것 57: 발신자 이메일 주소, 비밀번호, 수신자 이메일 주소 설정 9: MIMEMultipart() — 이메일의 제목·본문·첨부파일을 담을 상자 만들기 1012: 이메일 제목과 발신자, 수신자 정보 입력 1415: 이메일 본문 작성하고 상자에 담기 1718: SMTP 서버 주소와 포트 번호 설정 20~23: SMTP 서버에 접속해서 로그인하고 이메일 전송

3.1. 구글 앱 비밀번호 발급

구글은 보안 정책상 계정 비밀번호 직접 사용이 불가하므로 앱 비밀번호를 별도로 발급해야 한다.

  1. Google 계정 → 보안2단계 인증 활성화
  2. 앱 비밀번호 메뉴 → 앱: 메일, 기기: Windows 컴퓨터생성
  3. 발급된 16자리 비밀번호를 SENDER_PW 에 입력

3.2. 환경변수로 비밀번호 관리

1
import os
2
from dotenv import load_dotenv
3
4
load_dotenv()
5
6
SENDER_EMAIL = os.getenv("EMAIL_ADDRESS")
7
SENDER_PW = os.getenv("EMAIL_PASSWORD")
8
RECEIVER_EMAIL = os.getenv("RECEIVER_ADDRESS")

1: import os — 운영체제(컴퓨터)의 환경변수에 접근하는 도구 2: from dotenv import load_dotenv.env 파일을 읽는 도구 4: load_dotenv().env 파일에 저장된 정보를 메모리에 불러오기 6~8: .env 파일에서 저장된 이메일 정보를 불러와 변수에 저장

.env 파일 예시 (프로젝트 루트에 생성):

1
EMAIL_ADDRESS=발신자이메일@naver.com
2
EMAIL_PASSWORD=이메일비밀번호
3
RECEIVER_ADDRESS=수신자이메일@gmail.com

  • EMAIL_ADDRESS — 이메일을 보낼 발신자의 주소
  • EMAIL_PASSWORD — 발신자의 이메일 비밀번호 또는 앱 비밀번호
  • RECEIVER_ADDRESS — 이메일을 받을 수신자의 주소

주의

.env 파일에는 비밀번호가 들어있으므로 .gitignore.env를 반드시 추가하여 GitHub 등 외부에 절대 업로드되지 않도록 한다.