如何把收件人名字一一对应

本文适合有一丢丢会自动发邮件的道友看,仅供参考,坑位有限。

前提条件,我的解释器是 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表格进行循环
用Python自动群发邮件给欠钱老赖,哭着喊着把钱还你

    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]])