본문 바로가기
BIG DATA/PYTHON

[PYTHON] Python으로 자동 이메일 발송하기 (SMTP 활용)

by 라일리T 2025. 2. 24.

Python으로 자동 이메일 발송하기 (SMTP 활용)

 

이전 글에서는 크롤링한 데이터를 자동으로 보고서로 저장하는 방법을 배웠습니다.
이제 이 보고서를 이메일로 자동 전송할 수 있다면 더욱 편리하겠죠?

이번 글에서는 Python의 SMTP(Simple Mail Transfer Protocol)를 활용하여 자동 이메일을 보내는 방법을 배워보겠습니다.


1. 이메일 전송을 위한 환경 설정

1.1 smtplib 라이브러리 소개

Python의 smtplib을 사용하면 Gmail, Naver, Outlook 등의 메일 서버를 통해 자동으로 이메일을 보낼 수 있습니다.

📌 SMTP란?
: 이메일을 전송하기 위한 프로토콜(Simple Mail Transfer Protocol)

1.2 SMTP 서버 정보

각 이메일 서비스 제공업체의 SMTP 서버 주소는 다음과 같습니다.

이메일 서비스 SMTP 서버 포트

Gmail smtp.gmail.com 587
Naver smtp.naver.com 587
Outlook smtp.office365.com 587

📌 Gmail을 사용하는 경우 "보안 수준이 낮은 앱" 접근을 활성화해야 합니다.

  • Google 계정 설정 > 보안 > 앱 비밀번호 생성을 사용하면 더 안전합니다.

2. Python으로 이메일 보내기

2.1 기본 이메일 전송 코드

import smtplib
from email.mime.text import MIMEText

# 이메일 계정 정보
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 587
EMAIL_SENDER = "your_email@gmail.com"
EMAIL_PASSWORD = "your_password"  # 앱 비밀번호 사용 권장
EMAIL_RECEIVER = "receiver_email@example.com"

# 이메일 내용 작성
subject = "자동화된 뉴스 보고서"
body = "안녕하세요, \n\n자동 크롤링된 뉴스 보고서를 첨부합니다."
msg = MIMEText(body)
msg["Subject"] = subject
msg["From"] = EMAIL_SENDER
msg["To"] = EMAIL_RECEIVER

# SMTP 서버에 연결하여 이메일 전송
try:
    with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
        server.starttls()  # 보안 처리
        server.login(EMAIL_SENDER, EMAIL_PASSWORD)
        server.sendmail(EMAIL_SENDER, EMAIL_RECEIVER, msg.as_string())
    print("✅ 이메일 전송 성공!")
except Exception as e:
    print("⚠️ 이메일 전송 실패:", e)

✅ SMTP_SERVER와 SMTP_PORT 설정
✅ starttls()로 보안 연결
✅ server.login(이메일, 비밀번호)로 로그인 후 sendmail()로 전송


3. 첨부 파일 포함하여 이메일 보내기

📌 크롤링한 엑셀 보고서를 이메일에 첨부하는 방법

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

# 이메일 계정 정보
EMAIL_SENDER = "your_email@gmail.com"
EMAIL_PASSWORD = "your_password"
EMAIL_RECEIVER = "receiver_email@example.com"

# 이메일 설정
msg = MIMEMultipart()
msg["Subject"] = "자동화된 뉴스 보고서"
msg["From"] = EMAIL_SENDER
msg["To"] = EMAIL_RECEIVER

# 이메일 본문 추가
body = "안녕하세요, \n\n자동 크롤링된 뉴스 보고서를 첨부합니다."
msg.attach(MIMEText(body, "plain"))

# 파일 첨부
filename = "news_report.xlsx"
with open(filename, "rb") as attachment:
    part = MIMEBase("application", "octet-stream")
    part.set_payload(attachment.read())
    encoders.encode_base64(part)
    part.add_header("Content-Disposition", f"attachment; filename={filename}")
    msg.attach(part)

# SMTP 서버 연결 및 이메일 전송
try:
    with smtplib.SMTP("smtp.gmail.com", 587) as server:
        server.starttls()
        server.login(EMAIL_SENDER, EMAIL_PASSWORD)
        server.sendmail(EMAIL_SENDER, EMAIL_RECEIVER, msg.as_string())
    print("✅ 이메일 전송 성공 (첨부파일 포함)!")
except Exception as e:
    print("⚠️ 이메일 전송 실패:", e)

✅ MIMEMultipart() → 여러 개의 데이터를 포함하기 위해 사용
✅ MIMEBase로 파일을 읽어 인코딩 후 첨부
✅ sendmail()로 이메일 전송


4. 자동 이메일 스케줄링 (매일 아침 9시에 발송)

이메일을 매일 특정 시간에 자동으로 보내고 싶다면 schedule 라이브러리를 활용할 수 있습니다.

4.1 schedule 라이브러리 설치

pip install schedule

4.2 자동 이메일 스케줄링 코드

import schedule
import time

def send_email():
    print("📧 이메일 전송 실행 중...")
    try:
        # 위에서 만든 이메일 전송 코드 (파일 첨부 포함)
        with smtplib.SMTP("smtp.gmail.com", 587) as server:
            server.starttls()
            server.login(EMAIL_SENDER, EMAIL_PASSWORD)
            server.sendmail(EMAIL_SENDER, EMAIL_RECEIVER, msg.as_string())
        print("✅ 이메일 전송 성공!")
    except Exception as e:
        print("⚠️ 이메일 전송 실패:", e)

# 매일 아침 9시에 실행
schedule.every().day.at("09:00").do(send_email)

print("⏳ 자동 이메일 발송 대기 중...")
while True:
    schedule.run_pending()
    time.sleep(60)  # 1분마다 체크

✅ schedule.every().day.at("09:00").do(send_email) → 매일 오전 9시에 실행
✅ while True로 계속 실행되도록 설정


5. 결론

이번 글에서는 Python을 이용한 자동 이메일 발송 방법을 배웠습니다.

  • SMTP를 활용한 기본 이메일 전송
  • 엑셀 파일 첨부하여 이메일 보내기
  • 자동 스케줄링으로 매일 이메일 발송

다음 글에서는 Flask를 이용한 웹 애플리케이션 만들기를 배워보겠습니다! 🚀

 

2025.02.23 - [BIG DATA/PYTHON] - [PYTHON] 파이썬으로 자동화된 데이터 보고서 생성하기

 

 

[PYTHON] 파이썬 웹 크롤링 데이터를 활용한 데이터 분석

웹 크롤링 데이터를 활용한 데이터 분석 이전 글에서는 **웹 크롤링(Web Scraping)**을 이용해 웹에서 데이터를 수집하는 방법을 배웠습니다.그렇다면 크롤링한 데이터를 어떻게 활용할 수 있을까

englishforkid.tistory.com

 

 

[PYTHON] 데이터 분석을 위한 파이썬 라이브러리: NumPy와 Pandas 기초

데이터 분석을 위한 파이썬 라이브러리: NumPy와 Pandas 기초데이터 분석에서 빠른 연산과 효율적인 데이터 처리는 필수입니다.파이썬에는 이를 위해 NumPy와 Pandas라는 강력한 라이브러리가 있습니

englishforkid.tistory.com