파이썬
파이썬 활용하여 자동으로 이메일 보내기
코린이도이
2021. 6. 13. 21:31
step1. 필요한 라이브러리 불러오기 & 이메일 발송을 위한 로그인 아이디와 비밀번호 입력 input 만들기
import smtplib, email, os
import openpyxl, sys
from io import StringIO
import time
import random
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.base import MIMEBase
from email import encoders
gid = input('G-Mail 로그인 계정을 입력하세요: ')
gpw = input('G-Mail 로그인 비밀번호를 입력하세요: ')
s_time = time.time()
step2. 메일에 첨부할 텍스트, 이미지 불러오기
txt_files = '파일경로/파일이름.txt'
img_files = '파일경로/파일이름.png'
step3. 엑셀 파일(이메일 보낼 이메일 주소 목록)에서 목록 불러와서 자동으로 메일 보내기
wb = openpyxl.load_workbook('파일경로/엑셀이름.xlsx')
sheet = wb['Sheet1']
member = {}
for i in range(2, sheet.max_row + 1):
name = sheet.cell(row=i, column=1).value
email = sheet.cell(row=i, column=2).value
member[name]=email
smtp_1 = smtplib.SMTP_SSL('smtp.gmail.com',465)
smtp_1.ehlo()
smtp_1.login(gid,gpw)
count = 0
complete_list = []
fail_list = []
for name, email in member.items():
#이메일 멘트 텍스트 파일 불러오기
with open('파일경로/파일이름.txt') as ment:
msgtxt = MIMEText(ment.read() %name)
#txt첨부파일 등록
filename=txt_files
#첨부파일을 사용하기 위한 함수 이용
part = MIMEBase('application', 'octet-stream')
part.set_payload(open(filename, 'rb').read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename=%s' % os.path.basename(filename))
msg = MIMEMultipart()
msg.attach(part)
#image 첨부파일 등록
filename2 = img_files
part2 = MIMEBase('application', 'octet-stream')
part2.set_payload(open(filename2, 'rb').read())
encoders.encode_base(part2)
part2.add_header('Content-Disposition', 'attachment; filename= %s' % os.path.basement(filename2))
#메일 보낼 내용 설정 - 텍스트 첨부파일과 이미지 첨부파일과 메시지 본문 설정과 헤드 설정
msg = MIMEMultipart()
#메일에 메일 내용과 첨부파일 추가
msg.attach(part)
msg.attach(part2)
msg.attach(msgtxt)
msg['Subject'] = Header(s='%s 님께 알려 드립니다.'%name, charset='utf-8')
now = time.localtime()
s = '%04d-%02d-%02d-%02d-%02d-%02d' % (now.tm_year, now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec)
sendmailStatus=smtp_1.sendmail('보내는 이메일 주소', email, msg.as_string())
time.sleep(random.randrange(2,6))
print('=' * 60)
print('%s 주소로 메일 발송 시간은 %s 입니다' %(email,s))
print('%s 주소로 메일 발송완료-----'%email)
complete_list.append(email)
count += 1
if sendmailStatus != {}:
print('%s 주소 발송 오류: %s' %(email,sendmailStatus))
step4. 발송 완료 명단 파일에 저장하기
e_time = time.time()
t_time = e_time - s_time
com_list = '파일경로/파일명.txt'
f = open(com_list, 'a', encoding = 'UTF-8')
f.write(str(complete_list))
f.close
print('=' * 60)
print('총 소요시간: %s 초 입니다.' %t_time)
print('총 %s 건 발송 완료했습니다.' %count)
print('발송 완료 명단은 %s에 저장되어 있습니다.' %com_list)
smtp_1.quit()