python smtplib库给多个收件人发送邮件的时候,To标头怎么分开来显示?

我在使用smtplib给多人发送邮件的时候,所有的收件人都能收到我发邮件,但是邮件的To标头显示的收件人是连在一起的。像截图上这样,该怎么把它给分开呢?

img


下面是代码
代码是每次从txt文档里一次获取很多行收件人地址,然后添加进列表里一次性发出去。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from email.header import Header
from email.mime.text import MIMEText
import smtplib
from email.utils import parseaddr, formataddr
import Queue
import threading
n = 0
def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr((Header(name, 'utf-8').encode(), addr))



muban = open("1.html", "r")
from_addr = "ceshi@mfkbnhl.cn"
password = "Aa332633"
smtp_server = "185.127.xxx"
msg = MIMEText(muban.read(), 'html', 'utf-8')
msg['From'] = _format_addr('nihao <%s>' % from_addr)
msg['Subject'] = Header('nihao', 'utf-8').encode()
server = smtplib.SMTP(smtp_server, 1010)
server.login(from_addr, password)

def smtp1():
    m = [] #添加列表
    while not q.empty():
        global n
        # 获取多组队列数据
        for l in range(2):#一次获取n组
            # print (q.get())
            m.append(q.get())
        msg['To'] = ','.join(m)
        server.sendmail(from_addr, m, msg.as_string())
        #n += 1
        #print("发送成功,第%s封" % (n))





q = Queue.Queue()
try:
    for e in open("1.txt", 'r'):
        i = e.replace("\n", "")
        if "@" not in i or "----" in i or " " in i or len(i) > 90 or "/" in i or "?" in i or "@." in i:
            pass
        else:
            try:
                i.encode("ascii")
            except UnicodeDecodeError:
                pass
            else:
                q.put(i)
    for s in range(1):
        t1 = threading.Thread(target=smtp1)
        t1.start()

except Exception as e:
    with open("baocuo.txt", "a") as s:
        s.write("错误:%s" % e)

我的邮件服务器端对连接数有限制,不能开太高的线程。所以我试了这种单次提交多组的方式,测试发现会快很多。To标头改成统一的话据说会降低邮件评分影响入箱率。如果To标头做不到分开显示的话,smtplib库的内部我能自己改吗?我刚学python没多久 不太懂这些

msg['To'] = ','.join(m),to指定多人,收件人就是连在一块的,如果群发,to做不到显示当前收件人,可以这么改:

msg['To'] = '所有人'

也可以循环收件人群发,通过python多进程发送邮件

import smtplib
from email.mime.text import MIMEText
from multiprocessing import Pool
import time



def sendEmail(smtp, message):
    smtp.sendmail(message["From"], [message["To"]], message.as_string())
    time.sleep(1)

    
if __name__=="__main__":
    address = []
    pool = Pool(processes=10)
    subject = input("请输入邮件的主题")  # 邮件的主题
    content = input("请输入邮件的内容") # 邮件的内容
    sender = ""  # 发件人
    password = '**************'  # 授权密码

    message = MIMEText(content, "html", "utf-8")
    message["From"] = sender
    message["Subject"] = subject

    smtp = smtplib.SMTP_SSL('smtp.163.com', 994)  # qq用465,163用994
    smtp.login(sender, password)
    
    for receiver in address:
        message["To"] = receiver
        pool.apply_async(sendEmail, args=(smtp,message))   #进程总数为10,当前进程执行完后启动新进程.

    pool.close()
    # 主进程阻塞,等所有进程执行完毕
    pool.join()


请看👉 :使用Python中的smtplib模块发送邮件

To标头分开显示的意思是?
每个邮件只对应一个收件人吗?

TO里面什么都不写,不就什么事都没有了吗