티스토리 뷰

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()
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함