Python-发送批量电子邮件
我的任务是发送大约250封电子邮件,每封电子邮件的附件约为30kb。每个附件对收件人都是唯一的。我下面的代码可以工作,虽然我觉得它太慢了,但它大约每7秒发送一封电子邮件,而跨越250封电子邮件需要29分钟。显然,并行化将有助于推动事情的发展。然而,我很好奇我的代码是否可以改进。请注意,我还没有实现目标附件和电子邮件,因为这不会造成如此大的性能损失Python-发送批量电子邮件,python,python-3.x,email,smtplib,Python,Python 3.x,Email,Smtplib,我的任务是发送大约250封电子邮件,每封电子邮件的附件约为30kb。每个附件对收件人都是唯一的。我下面的代码可以工作,虽然我觉得它太慢了,但它大约每7秒发送一封电子邮件,而跨越250封电子邮件需要29分钟。显然,并行化将有助于推动事情的发展。然而,我很好奇我的代码是否可以改进。请注意,我还没有实现目标附件和电子邮件,因为这不会造成如此大的性能损失 import os,datetime def send_mail(recipient, subject, message, files=None):
import os,datetime
def send_mail(recipient, subject, message, files=None):
import smtplib,email,os
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from os.path import basename
username = "myemail"
password ="mypass"
mailServer = smtplib.SMTP('smtp-mail.outlook.com', 587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login(username, password)
for i in range(1,15):
try:
msg = MIMEMultipart()
msg['From'] = username
msg['To'] = recipient
msg['Subject'] = subject
msg.attach(MIMEText(message))
for f in files or []:
with open(f, "rb") as fil:
part = MIMEApplication(
fil.read(),
Name=basename(f)
)
part['Content-Disposition'] = 'attachment; filename="%s"' % basename(f)
msg.attach(part)
print('sending mail to ' + recipient + ' on ' + subject)
mailServer.sendmail(username, recipient, msg.as_string())
except error as e:
print(str(e))
mailServer.close()
print(datetime.datetime.now())
send_mail('recipent, 'Sent using Python', 'May the force be with you.',["colours.xls"])
print(datetime.datetime.now())
您应该分析您的代码,以查看哪些代码占用了大部分时间。 我建议使用
为什么循环14次?每个循环似乎都没有什么不同。您好@PeterWood,如上所述,我还没有针对附件和电子邮件,因为它不应该对性能造成太大的影响。我可以稍后再插上。最初,我想要一些在发送电子邮件时表现良好的东西,然后我将参数化脚本
python -m cProfile -o program.prof my_program.py
snakeviz program.prof