본문 바로가기

카테고리 없음

python으로 email 발송하기 (feat. gmail SMTP)

python script에서 간단하게 이메일을 발송하고 싶고, 이메일의 빈도가 높지 않으면 번거롭게 SMTP 서버를 설정하지 않고 gmail에서 제공하는 SMTP 서버를 이용해서 메일을 발송할 수 있다.

 

간단한 예시 코드는 아래와 같다.

import os
import smtplib
from email.mime.text import MIMEText
from datetime import datetime, timedelta
import glob

# Gmail 설정
gmail_user = 'SENDER USERID@gmail.com'  # Gmail 주소
gmail_app_password = 'YOUR APP SPECIFIC PASSWORD'  # 앱 비밀번호

# 이메일 전송
def send_email(subject, message, recipient):
    msg = MIMEText(message)
    msg['Subject'] = subject
    msg['From'] = gmail_user
    msg['To'] = recipient

    try:
        server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
        server.ehlo()
        server.login(gmail_user, gmail_app_password)
        server.sendmail(gmail_user, recipient, msg.as_string())
        server.close()
    except Exception as e:
        print(f"Error sending email: {e}")

send_email("this is a title", "this is a mail body", "TARGET EMAIL")

 

위의 코드에서 gmail_app_password 는 보안을 위해 특정 앱에 할당한 비밀번호로, 메일을 발송할 구글 계정으로 구글에 로그인 해서 myaccount.google.com / Security/ 2-Step Verification / App passwords 에서 만들어줄 수 있다.

 

하여간 이렇게 하면 아마 이메일이 잘 발송이 될 것이다.

 

그런데, 수신자가 여러 명일 때는 어떻게 해야 할까?

 

send_email() 함수에서 msg['To'] 는 이메일에 '표시되는' 수신자를 의미하고 ','(comma) 로 구분된 이메일 스트링 형식을 받는다.

sendmail() 함수에서 recipient 는 실제 메일이 전송되는 수신자를 의미하고, 수신자가 하나일 때는 string, 복수일 때는 list 포맷을 받는다.

 

결국 코드를 약간 수정하면

 

def send_email(subject, message, recipients):
    msg = MIMEText(message)
    msg['Subject'] = subject
    msg['From'] = gmail_user
    msg['To'] = ','.join(recipients)

    try:
        server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
        server.ehlo()
        server.login(gmail_user, gmail_app_password)
        server.sendmail(gmail_user, recipients, msg.as_string())
        server.close()
    except Exception as e:
        print(f"Error sending email: {e}")
        
send_mail('mail title', 'mail message', ['target1@mail.com', 'target2@mail.com'])

 

이런 식으로 처리해주면 되겠다.

 

참고 문서

https://docs.python.org/2/library/email-examples.html

https://learn.microsoft.com/en-us/previous-versions/office/developer/exchange-server-2010/aa493918(v=exchg.140)

 

18.1.11. email: Examples — Python 2.7.18 documentation

18.1.11. email: Examples Here are a few examples of how to use the email package to read, write, and send simple email messages, as well as more complex MIME messages. First, let’s see how to create and send a simple text message: # Import smtplib for th

docs.python.org