본문 바로가기

Creation/Python

[Python] 파이썬으로 메일(Gmail) 대량발송하기


  Python을 이용하면 Gmail의 SMTP서버를 사용해 메일을 대량발송 할 수 있습니다. 아래는 제가 대량메일을 보내기 위해 직접 짠 코드이구요, 참조한 것은 공식 파이썬 API입니다. 사실 간단한것이긴 한데, 제가 아직 실력이 미숙하여 여러 실수를 해서 애를 먹었네요. 먼저 간 길 흔적 남겨서 뒤따라 오시는 분들 도움 되시라고 올려봅니다. ^^;


	
import os, smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders

import time
import datetime



gmail_user="여기에 Gmail계정을 넣으세요. 예: example@gmail.com"
gmail_pwd="여기에 암호를 넣으세요." def send_gmail(to, subject, text, html, attach):    msg=MIMEMultipart('alternative')
    msg['From']=gmail_user  # <-- 발신자 이름을 바꾸려면 수정하세요. 안적으시면 메일계정이름으로 날아갑니다.
    msg['To']=to
    msg['Subject']=subject
    msg.attach(MIMEText(text, 'plain'))
    msg.attach(MIMEText(html, 'html'))

    #managing attachment 
    #이하 주석처리된 부분이 메일 첨부파일 발송을 위한 부분입니다. 첨부파일이 필요하시면 수정해서 쓰세요.
    #part=MIMEBase('application','octet-stream')
    #part.set_payload(open(attach, 'rb').read())
    #Encoders.encode_base64(part)
    #part.add_header('Content-Disposition','attachment; filename="%s"' % os.path.basename(attach))
    #msg.attach(part)

    mailServer=smtplib.SMTP("smtp.gmail.com",587)
    mailServer.ehlo()
    mailServer.starttls()
    mailServer.ehlo()
    mailServer.login(gmail_user,gmail_pwd)
    mailServer.sendmail(gmail_user, to, msg.as_string())
    mailServer.close()
	
def mainLoop(): title="메일제목을 쓰세요." #attach_file="send_mail.py" <--------- 첨부파일 명입니다. 없으면 그대로 주석처리 해두세요. f = open("text.txt", "r") #<------ 메일 내용의 Text버전이 들어있는 파일입니다. message = f.read() f.close() f = open("html.html", "r") #<------ 메일 내용의 HTML버전이 들어있는 파일입니다. html = f.read() f.close() print "Program Ready" print "----------------------" f = open("list.txt", "r") # <---- 엔터키로 구분된 메일링 리스트입니다. 메일 주소가 한줄에 하나씩 있어야 합니다. emails = f.readlines() for email in emails: email = email.strip('\r') email = email.strip('\n') email = email.strip(' ') email = email.strip('\t') if email == "" : continue print "[" + str(datetime.datetime.now()) + "] Sending email to " + email + "..." send_gmail(email,title,message,html,"") print "[" + str(datetime.datetime.now()) + "] Complete... Waiting for 5 seconds." # 5초마다 보냅니다. time.sleep(5) print "Mails have just sent. The program is going to end."
if __name__ == "__main__": mainLoop()


 mail.py파일을 만드시고 위 내용을 적으신 후에, 

  text.txt, html.html, list.txt파일이 같은 폴더에 있어야 합니다. 

  text.txt파일과 html.html파일에 메일내용이

  (각각 text버전과 html버전의 메일을 작성하셔서 파일 만드시면 됩니다)

  list.txt파일에 메일링 리스트가 있으면 됩니다. 

  list.txt에 보낼 메일주소를 한 줄에 하나씩 넣어두시면 됩니다.


  Python 2.7을 이용하여 작성했고, 작동 잘 됩니다. 다만 Gmail의 전송횟수 제한(하루 500개)에 걸리지 않게만 쓰세요.