我在使用smtplib给多人发送邮件的时候,所有的收件人都能收到我发邮件,但是邮件的To标头显示的收件人是连在一起的。像截图上这样,该怎么把它给分开呢?
下面是代码
代码是每次从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没多久 不太懂这些