본문 바로가기
카테고리 없음

파이썬으로 이메일 자동화하기 smtplib, imaplib

by 혜택보관소 2024. 11. 18.

이메일 자동화는 일상적인 작업을 간소화하고 효율성을 높이는 데 매우 유용합니다.

파이썬의 smtplibimaplib 모듈을 사용하면 이메일을 자동으로 발송하거나 읽고 응답할 수 있습니다.

이 글에서는 이메일 자동화의 기초를 배우고, 실습 예제를 통해 직접 구현하는 방법을 알아보겠습니다.

파이썬 이메일 자동화

1. 이메일 자동화를 위한 준비

이메일 자동화를 시작하기 전에 이메일 계정 설정과 파이썬 환경 구성을 완료해야 합니다.

1.1 이메일 계정 설정

Gmail을 사용하는 경우:

  • Gmail 계정에서 보안 수준이 낮은 앱 허용 설정을 활성화합니다.
  • 2단계 인증을 사용하는 경우, 앱 비밀번호를 생성하여 사용해야 합니다.

1.2 필요한 모듈 설치

기본적으로 파이썬에 내장된 smtplibimaplib를 사용하지만, 이메일 메시지 구성을 돕는 email 모듈도 필요합니다. 설치가 필요하지 않으며, 기본 파이썬 환경에서 제공됩니다.

2. 파이썬으로 이메일 발송하기

이메일 발송은 smtplib 모듈을 사용해 SMTP(Simple Mail Transfer Protocol)를 통해 구현할 수 있습니다.

2.1 기본 이메일 발송

아래 코드는 Gmail SMTP 서버를 사용하여 간단한 이메일을 보내는 예제입니다.

import smtplib
from email.mime.text import MIMEText

# 이메일 계정 정보
smtp_server = "smtp.gmail.com"
smtp_port = 587
sender_email = "your_email@gmail.com"
password = "your_password"  # Gmail 앱 비밀번호 사용

# 이메일 내용 구성
recipient_email = "recipient_email@example.com"
subject = "파이썬 이메일 테스트"
body = "안녕하세요, 이 메일은 파이썬 자동화로 발송되었습니다."

message = MIMEText(body, "plain")
message["Subject"] = subject
message["From"] = sender_email
message["To"] = recipient_email

# 이메일 발송
with smtplib.SMTP(smtp_server, smtp_port) as server:
    server.starttls()  # TLS 보안 연결 시작
    server.login(sender_email, password)  # 로그인
    server.sendmail(sender_email, recipient_email, message.as_string())  # 이메일 발송

print("이메일이 성공적으로 발송되었습니다.")

위 코드에서는 MIMEText를 사용해 이메일 메시지를 구성하고, SMTP 서버를 통해 이메일을 발송합니다.

2.2 첨부파일 있는 이메일 발송

첨부파일을 포함한 이메일을 보내려면 MIMEMultipart를 사용해야 합니다.

from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

# 이메일 내용 구성
message = MIMEMultipart()
message["Subject"] = subject
message["From"] = sender_email
message["To"] = recipient_email
message.attach(MIMEText(body, "plain"))

# 첨부파일 추가
file_path = "path/to/your/file.txt"
with open(file_path, "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={file_path.split('/')[-1]}")
message.attach(part)

# 이메일 발송
with smtplib.SMTP(smtp_server, smtp_port) as server:
    server.starttls()
    server.login(sender_email, password)
    server.sendmail(sender_email, recipient_email, message.as_string())

print("첨부파일이 포함된 이메일이 발송되었습니다.")

3. 이메일 읽기

imaplib를 사용하여 받은 이메일을 읽고 특정 조건에 맞는 이메일을 검색할 수 있습니다.

3.1 Gmail에서 이메일 읽기

아래 코드는 Gmail IMAP 서버를 사용하여 받은 편지함에서 이메일을 읽는 예제입니다.

import imaplib
import email

# 이메일 계정 정보
imap_server = "imap.gmail.com"
email_account = "your_email@gmail.com"
password = "your_password"

# IMAP 서버 연결
with imaplib.IMAP4_SSL(imap_server) as mail:
    mail.login(email_account, password)
    mail.select("inbox")  # 받은 편지함 선택

    # 이메일 검색 (모든 이메일)
    status, messages = mail.search(None, "ALL")

    # 가장 최근 이메일 읽기
    for num in messages[0].split()[-1:]:
        status, msg_data = mail.fetch(num, "(RFC822)")
        for response_part in msg_data:
            if isinstance(response_part, tuple):
                msg = email.message_from_bytes(response_part[1])
                print("제목:", msg["subject"])
                print("발신자:", msg["from"])
                print("내용:")
                if msg.is_multipart():
                    for part in msg.walk():
                        if part.get_content_type() == "text/plain":
                            print(part.get_payload(decode=True).decode("utf-8"))
                else:
                    print(msg.get_payload(decode=True).decode("utf-8"))

위 코드에서는 IMAP 프로토콜을 사용해 받은 편지함에서 가장 최근 이메일을 가져오고, 내용을 출력합니다.

4. 이메일 응답 자동화

읽은 이메일에 조건에 따라 자동으로 응답하도록 설정할 수 있습니다. 예를 들어, 특정 제목을 가진 이메일에 자동 응답을 보내는 프로그램을 작성할 수 있습니다.

# 특정 조건에 따라 응답 이메일 발송
if "특정 키워드" in msg["subject"]:
    response_body = "요청하신 정보를 확인했습니다."
    response_message = MIMEText(response_body, "plain")
    response_message["Subject"] = f"Re: {msg['subject']}"
    response_message["From"] = sender_email
    response_message["To"] = msg["from"]

    with smtplib.SMTP(smtp_server, smtp_port) as server:
        server.starttls()
        server.login(sender_email, password)
        server.sendmail(sender_email, msg["from"], response_message.as_string())
    print("자동 응답 이메일이 발송되었습니다.")

마무리

이번 글에서는 파이썬의 smtplibimaplib를 사용해 이메일을 자동으로 발송하고 읽는 방법을 살펴보았습니다.

이메일 자동화는 업무 효율성을 높이고 반복 작업을 줄이는 데 매우 유용합니다.

실습을 통해 자신의 이메일 작업을 자동화해보세요!