Python3.6自动群发邮件,如何把收件人名字一一对应

您所在的位置:网站首页 python批量发送邮件改称呼 Python3.6自动群发邮件,如何把收件人名字一一对应

Python3.6自动群发邮件,如何把收件人名字一一对应

2024-07-16 14:16| 来源: 网络整理| 查看: 265

Python3.6自动群发邮件, 如何把收件人名字一一对应

本文适合有一丢丢会自动发邮件的道友看,仅供参考,坑位有限。 前提条件,鄙人的解释器是IDLE 3.6(用惯了,不想升级) 以两个邮箱为例子。

to_emails=['[email protected]','[email protected]'] to_names=['怪盗基德','上杉绘梨衣']

自动群发邮件,处理收件人姓名时大多是用join函数处理, 形成以逗号分隔的字符串。

官方大大说:Header接受的第一个参数的数据类型必须要是字符串或者字节,列表是不能解码。

to_names=['怪盗基德','上杉绘梨衣'] msg['To'] = Header(",".join)

But,我试了一下,没有用,两个邮箱的收件人都是怪盗基德,上杉绘梨衣。不确定是什么原因,不排除是版本问题,有道友知道可以跟我说一下哈。

噗 如上图,两个名字一起了(把怪盗基德忘了吧)。

没办法,笔者只好另辟蹊径,想出了有两种解决方案。 【1】遍历列表 【2】利用Excel表格

【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='[email protected]' password='xzrbanqjofkugaei' #如果有Excel表格就不用新建了,没有csv就得考虑新建csv文件 #方式一:通过现有列表新建csv文件 #data=[['怪盗基德','[email protected]'],['上杉绘梨衣','@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]])

生成列表嵌套列表,原本以为append只能新增一个元素,没想到也能新增列表。

道行太浅,有什么纰漏的地方,还望阁下指点一二。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3