Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬(Python)으로 이메일 보내기: 초보자를 위한 완벽 가이드

파이썬으로 이메일 보내는 방법

파이썬은 데이터 분석, 웹 개발 등 다양한 분야에서 활용되는 강력한 프로그래밍 언어입니다. 그런데 파이썬에는 잘 알려지지 않은 숨겨진 기능이 하나 더 있습니다. 바로 프로그램에서 직접 이메일을 보낼 수 있다는 점입니다. 이를 활용하면 비밀번호 재설정 안내 메일, 아이디 찾기 메일, 사용자 알림 등 다양한 이메일을 파이썬 코드만으로 자동 발송할 수 있습니다.

이 가이드에서는 파이썬으로 이메일을 보내는 방법을 단계별로 살펴봅니다. email과 smtplib 라이브러리의 동작 원리를 이해하고, 실제로 이메일을 전송하는 예제 프로그램까지 함께 작성해 보겠습니다.

그럼 바로 시작해 보겠습니다!

파이썬 이메일 전송의 기본 원리

프로그램에서 이메일을 보내려면 SMTP(Simple Mail Transfer Protocol, 단순 우편 전송 프로토콜)라는 통신 규약을 사용합니다. SMTP는 전 세계의 이메일 서비스와 클라이언트가 메시지를 주고받을 때 사용하는 표준 프로토콜입니다.

프로그램에서 이메일을 전송하려면 SMTP 서버가 필요합니다. 직접 구축할 수도 있지만, 반드시 그럴 필요는 없습니다. Gmail이나 Outlook 같은 서비스는 SMTP 서버를 제공하므로, 기존에 사용 중인 이메일 계정을 그대로 활용해 메일을 보낼 수 있습니다.

이 가이드에서는 Gmail의 SMTP 서버를 통해 이메일을 보내는 것으로 가정합니다. Gmail SMTP 서버에 대한 자세한 내용은 공식 문서에서 확인할 수 있으며, 다른 이메일 제공업체를 사용한다면 '[제공업체 이름] SMTP 설정'으로 검색해 해당 업체가 SMTP를 지원하는지 확인해 보세요.

이메일 전송은 크게 세 단계로 진행됩니다.

  • SMTP 연결 설정
  • 메시지 객체 생성
  • SMTP를 통해 메시지 전송

1단계: SMTP 연결 설정

먼저 SMTP 연결을 설정해 보겠습니다. 이때 smtplib 라이브러리를 사용하면 연결 관리에 필요한 모든 기능을 손쉽게 활용할 수 있습니다. 덕분에 몇 줄의 코드만으로 이메일을 보낼 수 있습니다.

가장 먼저 smtplib 라이브러리를 임포트합니다.

import smtplib

다음으로 SMTP 서버 접속 정보를 저장할 변수들을 설정합니다. 이런 값들을 변수로 관리하면 코드의 가독성과 유지보수성이 크게 향상됩니다.

sender = 'test@careerkarma.com'
password = '123456'
server = 'smtp.gmail.com'
port = 465

위 코드에는 SMTP 연결에 필요한 모든 설정이 담겨 있습니다. 이제 서버에 로그인해 보겠습니다.

server = smtplib.SMTP_SSL(server, port)
server.login(sender, password)

이 코드는 SSL(Secure Socket Layer) 방식으로 SMTP 서버에 연결합니다. SSL은 일반 연결보다 보안성이 뛰어나기 때문에 현재 대부분의 SMTP 서버에서 표준으로 채택하고 있는 암호화 방식입니다.

이것으로 SMTP 연결 설정이 완료되었습니다!

2단계: 메시지 객체 생성

현재 코드로는 아직 이메일을 보낼 수 없습니다. 메시지 객체를 만들지 않았기 때문입니다. 이번에는 email 라이브러리를 사용해 메시지 객체를 생성해 보겠습니다. smtplib만으로도 메시지 객체를 만들 수 있지만, email 라이브러리를 사용하는 것이 더 간결하고 체계적입니다.

필요한 email 패키지를 임포트하는 것부터 시작합니다.

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

라이브러리를 임포트했다면 이제 메시지 객체를 생성할 수 있습니다.

message = MIMEMultipart()

body = 'This is an email sent from Python!'

message['From'] = sender
message['To'] = 'test@careerkarma.com'
message['Subject'] = 'This is a test email'

message.attach(MIMEText(body, 'plain'))

먼저 email 라이브러리의 MIMEMultipart 클래스를 참조하는 message 객체를 초기화했습니다. 그다음 이메일 본문과 함께 발신자, 수신자, 제목을 지정했습니다.

마지막 줄의 attach() 메서드는 작성한 본문을 이메일 메시지에 추가하는 역할을 합니다.

3단계: 메시지 전송

이제 남은 것은 메시지를 실제로 전송하는 것뿐입니다.

server.send_message(message)

전체 코드를 실행하면 이메일이 발송됩니다! 'This is a test email'이라는 제목의 메일이 test@careerkarma.com에서 test@careerkarma.com으로 전송됩니다.

파일에서 템플릿 불러오기

앞서 작성한 이메일 본문은 한 줄짜리 짧은 문장이었기 때문에 파이썬 코드 안에 직접 작성하는 것이 더 편리했습니다. 하지만 실제 이메일은 대부분 훨씬 길기 때문에, 내용을 파일로 분리해 템플릿으로 관리하는 것이 효율적입니다.

먼저 email.txt라는 파일을 만들고 다음 내용을 붙여 넣습니다.

Hello ${NAME},

This is a test email!

Thanks,
Career Karma

이 템플릿에는 ${NAME}이라는 변수가 포함되어 있습니다. 달러 기호($)와 중괄호({})로 감싸진 이 변수는 나중에 코드 실행 시 수신자의 이름으로 자동 치환됩니다.

이제 이 템플릿 파일을 코드에서 읽어와야 합니다. open() 메서드를 사용해 파일을 읽는 read_email 함수를 만들어 보겠습니다.

또한 string 라이브러리에서 Template 객체를 임포트해야 합니다. 이 객체를 사용하면 템플릿의 변수를 손쉽게 치환할 수 있습니다. 파이썬 프로그램 상단에 다음 코드를 추가하세요.

from string import Template

그리고 모든 import 문 아래에 다음 함수를 추가합니다.

def read_email():
    with open('email.txt', 'r') as file:
        contents = file.read()
    return Template(contents)

이 함수는 email.txt 파일의 내용을 읽어 contents 변수에 저장한 후, string 라이브러리의 Template 메서드를 사용해 이를 Template 객체로 변환해 반환합니다.

이제 프로그램에서 다음 코드를,

body = 'This is an email sent from Python!'

아래 코드로 교체합니다.

email_content = read_email()
body = email_content.substitute(NAME="Test")

이 코드는 read_email() 함수를 호출해 email.txt 파일의 내용을 읽어온 뒤, 템플릿 안의 NAME 값을 "Test"로 치환합니다. 전체 코드를 정리하면 다음과 같습니다.

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from string import Template

def read_email():
    with open('email.txt', 'r') as file:
        contents = file.read()
    return Template(contents)

sender = 'test@careerkarma.com'
password = '123456'
server = 'smtp.gmail.com'
port = 465

server = smtplib.SMTP_SSL(server, port)
server.login(sender, password)

message = MIMEMultipart()

email_content = read_email()
body = email_content.substitute(NAME="Test")

message['From'] = sender
message['To'] = 'test@careerkarma.com'
message['Subject'] = 'This is a test email'

message.attach(MIMEText(body, 'plain'))

SMTP 서버 정보를 본인 계정으로 바꾸고 이 프로그램을 실행하면 이메일이 발송됩니다. 여러분은 방금 이메일을 전송하는 프로그램을 성공적으로 작성했습니다!

마무리

파이썬으로 이메일을 보내는 일은 생각보다 어렵지 않습니다. 템플릿 없이 간단히 보낼 때는 몇 줄의 코드면 충분하며, email과 smtplib 모듈이 대부분의 복잡한 작업을 대신 처리해 줍니다. 또한 email 모듈을 더 깊이 활용하면 변수를 치환할 수 있는 이메일 템플릿도 손쉽게 만들 수 있습니다.

도전 과제를 드리겠습니다. 위 프로그램을 수정해서 여러 명의 수신자에게 이메일을 보낼 수 있도록 만들어 보세요. 힌트: for 반복문을 활용하면 됩니다.

이제 여러분도 전문가처럼 파이썬으로 이메일을 보낼 준비가 되었습니다!