본문 바로가기

BE/Python

[Python] Google Gmail SMTP 로 이메일 보내기

안녕하세요 :) 

오늘은 파이썬으로 이메일을 보내는 방법에 대해 포스팅하겠습니다. 

파이썬 코드로 이메일을 보내기 위해서는 SMTP(Simple Mail Transfer Protocol) 라는 메일 프로토콜을 사용해야 하는데요.

본 글에서는 Gmail SMTP 를 사용할 예정입니다.  (SMTP 서버에는 Gmail, Outlook 등이 있습니다) 

 

📌 1. SMTP란? 

먼저 SMTP(Simple Mail Transfer Protocol) 라는 개념에 대해 자세히 설명해 드리겠습니다.

SMTP란? 메일을 전송할때 사용되는 프로토콜입니다. 개인적으로 SMTP 서버를 구축해 메일을 전송할 수 있지만

우리는 개인이므로 오픈된 SMTP 서버인 Gmail/Outlook 등을 활용해 메일을 전송합니다. 

 

📌 2. 메일 전송 구현하기 - (1) 메일 전송

Python 스크립트로 이메일을 전송하기 위해서는 내장된 smtplib 모듈과

email.mime.text.MIMEText (간단한 메시지),  MIMEMultipart(복잡한 메시지) 등을 사용해야 합니다. 

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

 

˙send_email / send_pw : 설정한 Gmail 계정의 이메일주소 및 비밀번호를 입력합니다. 

˙results : 메일에 나타내고자 하는 데이터를 담습니다. 

˙receive_emails : 수신하고자 하는 메일 주소를 담습니다. (복수 가능)  

def mail():
    send_email = "Gmail email"
    send_pw = "Gmail password"
    results = []

    s = smtplib.SMTP_SSL('smtp.gmail.com')
    s.login(send_email, send_pw)
    receive_emails = ['receivetest1@gmail.com','receivetest2@gmail.com']

 

이후 설정한 메일 수신자에게 메일을 보내기 위해 아래와 같이 구현합니다. 

MIME 데이터에 담을 데이터들(메일 제목, 발송인, 수신인 등)을 세팅후 메시지를 전송합니다. 

메일 본문의 경우, HTML 형식으로 makeHTML() 함수로 별도 구현했습니다. 

    for receive in receive_emails:
        msg = MIMEMultipart('alternative')
        msg['Subject'] = "메일 제목"
        msg['From'] = send_email
        msg['To'] = receive
        part1 = MIMEText(makeHTML(results), 'html')
        msg.attach(part1)
        s.sendmail(send_email, receive, msg.as_string())
        s.quit()

 

 

2. 메일 전송 구현하기 - (2) HTML

메일 본문에 나타낼 내용들을 HTML 코드로 작성합니다. HTML 코드는 변수에 String 형태로 아래와 같이 작성하면 됩니다.

아래와 같이 하드코딩 형태로 직접 구현해도 되고, 다양한 무료 메일 템플릿 사이트에서 다운받아 사용해도 됩니다 :) 

무료 템플릿 사이트 : https://unlayer.com/templates

def makeHTML(results):
    str = ""
    for result in results : 
        str += """<p style="padding:5px 0 0 0;">▷ 제목 : """ + result[0] + """</p>
         <table style="margin: 10px 0 10px 0;" border="1" cellpadding="0" cellspacing="0" width="40%"> 
            <tr>
                <td style="padding: 10px;" align="center">td1</td>
                <td style="padding: 10px;" align="center">td2</td>
            </tr>"""
        for r in result[1] : 
            str += """<tr> <td style="padding: 10px;" align="center">""" + r[0] + """</td> <td style="padding: 10px;" align="center">""" + r[1] + """</td></tr>"""
        str += """</table>"""

    html = """\
   <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>메일 제목</title>
    </head>
    <body>
        <h4>메일 테스트</h4>
        <p style="padding:5px 0 0 0;">안녕하세요 """ + str + """</p>
    </body>
    </html>
    """
    return html