如何把收件人名字一一对应
本文适合有一丢丢会自动发邮件的道友看,仅供参考,坑位有限。
前提条件,我的解释器是 IDLE 3.6 (用惯了,不想升级)
以两个邮箱为例子。
- to_emails=['123@qq.com','456@qq.com']
- to_names=['怪盗基德','上杉绘梨衣']
自动群发邮件,处理收件人姓名时大多是用join函数处理,
形成以逗号分隔的字符串。
官方大大说:Header接受的第一个参数的数据类型必须要是字符串或者字节,列表是不能解码。
- to_names=['怪盗基德','上杉绘梨衣']
- msg['To'] = Header(",".join)
But,我试了一下,没有用,两个邮箱的收件人都是怪盗基德,上杉绘梨衣。不确定是什么原因,不排除是版本问题,有网友知道可以跟我说一下哈。
1、遍历两个列表
- import smtplib
- from email.mime.text import MIMEText
- from email.header import Header
- import time
- from_name = input('请输入发件人:')
- from_addr = input('请输入发件人邮箱:')
- password = input('请输入发件人邮箱授权码:')
- to_namelist = []
- to_addrs = []
- number=0
- while True:
- name=input('请输入收件人:')
- to_namelist.append(name)
- email=input('请输入收件儿邮箱:')
- to_addrs.append(email)
- temp=input('(可群发)是否继续输入邮箱,输入n加回车键退出,输入任意键继续:')
- number=number+1
- if temp=='n':
- break
- smtp_server ='smtp.qq.com'
- input_subject = input('请输入邮件主题:')
- text = input('请输入邮件内容:')
- for i in range(number):
- to_name=to_namelist[i]
- to_addr=to_addrs[i]
- msg = MIMEText(text,'plain','utf-8')
- msg['From'] = Header(from_name)
- msg['To'] = Header(to_name)
- msg['Subject'] = Header(input_subject)
- server = smtplib.SMTP_SSL()
- server.connect(smtp_server,465)
- server.login(from_addr, password)
- server.sendmail(from_addr,to_addr, msg.as_string())
- server.quit()
- now=time.strftime('%Y-%m-%d %H:%M:%S',
- time.localtime(time.time()))
- print(now)
- print('邮件发送成功!')
2、将两个列表通过csv放进Excel表格里,再通过读取Excel表格进行循环
- import time
- import smtplib
- from email.mime.text import MIMEText
- from email.header import Header
- import csv
- #发件人信息
- from_addr='1499823573@qq.com'
- password='xzrbanqjofkugaei'
- #如果有Excel表格就不用新建了,没有csv就得考虑新建csv文件
- #方式一:通过现有列表新建csv文件
- #data=[['怪盗基德','123@qq.com'],['上杉绘梨衣','@456.com']]
- #方式二:通过输入形成列表再新建csv文件
- dataemail=[]
- dataname=[]
- data=[]
- number=0
- while True:
- input_name=input('请输入收件人称呼(可随意写):')
- dataname.append(input_name)
- input_email=input('请输入收件人邮箱账号:')
- dataemail.append(input_email)
- b=input('是否继续输入,n退出,任意键继续:')
- number=number+1
- if b=='n':
- break
- i=0
- for i in range(number):
- data.append([dataname[i],dataemail[i]])
- with open('C:/Users/ASUS/Desktop/邮箱数据.csv','a',newline='') as f:
- writer=csv.writer(f)
- for row in data:
- writer.writerow(row)
- input_fromname=input('请输入发件人:')
- input_subject=input('请输入邮件主题:')
- text=input('请输入邮件群发内容:')
- with open('C:/Users/ASUS/Desktop/邮箱数据.csv','r') as f:
- reader=csv.reader(f)
- for row in reader:
- to_addrs=row[1]
- to_name=row[0]
- #text='ncoqw'
- msg=MIMEText(text,'plain','utf-8')
- msg['From']=Header(input_fromname)
- msg['To']=Header(to_name)
- msg['Subject']=Header(input_subject)
- server=smtplib.SMTP_SSL()
- server.connect('smtp.qq.com',465)
- server.login(from_addr,password)
- server.sendmail(from_addr,to_addrs,msg.as_string())
- server.quit()
- now=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
- print(now)
- print('邮件发送成功!')
这里有个点刚开始没想到
- data.append([dataname[i],dataemail[i]])