共计 2700 个字符,预计需要花费 7 分钟才能阅读完成。
如何把收件人名字一一对应
本文适宜有一丢丢会主动发邮件的道友看,仅供参考,坑位无限。
前提条件,鄙人的解释器是 IDLE 3.6(用惯了,不想降级)
以两个邮箱为例子。
to_emails=['123@qq.com','456@qq.com'] | |
to_names=['怪盗基德','上杉绘梨衣'] |
主动群发邮件,解决收件人姓名时大多是用 join 函数解决,
造成以逗号分隔的字符串。
官网大大说:Header 承受的第一个参数的数据类型必须要是字符串或者字节,列表是不能解码。
to_names=['怪盗基德','上杉绘梨衣'] | |
msg['To'] = Header(",".join) |
But, 我试了一下,没有用,两个邮箱的收件人都是怪盗基德,上杉绘梨衣。不确定是什么起因,不排除是版本问题,有道友晓得能够跟我说一下哈。
如上图,两个名字一起了(把怪盗基德忘了吧)。
外汇经纪商比照 https://www.fx61.com/brokerlist
没方法,笔者只好另辟蹊径,想出了有两种解决方案。
【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='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]])
正文完