使用threadpoolexecutor发送电子邮件时出现错误消息。如果我在单线程中正常发送,则可以正常工作,并且可以发送电子邮件。
(503,b'5.5.1命令顺序错误')
如果我随机睡觉,我可以发送电子邮件。这是唯一的解决方法吗?
我已经按照以下步骤设置了代码。
- 我通过连接到服务器来创建服务器对象。
- 使用相同的服务器对象,我向服务器进行身份验证。
- 然后,我尝试使用threadpoolexecutor将邮件发送给每个收件人。每个收件人将有不同的消息。我不想通过一次又一次的登录来传递服务器对象来发送电子邮件。
请找到功能和代码块的代码片段。
d = [2,3,4]
sleep_rotate = itertools.cycle(d)
def blocking_send_email(server,sender_email,receiver_email,text):
try:
status = True
print("** sending email to " + receiver_email)
# it works when i sleep randomly
time.sleep(next(sleep_rotate))
res = server.sendmail(sender_email,text)
print(str(res))
details = ""
except Exception as e:
status = False
details = str(e)
print(details)
result = [{
receiver_email: {
'status': status,'details': details
}
}]
return result
with smtplib.SMTP(smtp_server,port) as server:
print("connected to smtp server: " + smtp_server)
server.ehlo()
server.starttls()
server.ehlo()
server.login(sender_email,password)
message_data_list = get_email_data(file_path,sender_name)
with concurrent.futures.ThreadPoolExecutor() as executor_pool:
future_result = {executor_pool.submit(blocking_send_email,server,data['sender_email'],data['receiver_email'],data['text']
) for data in message_data_list}
for future in concurrent.futures.as_completed(future_result):
try:
result = future.result()
mail_result.append(result)
except Exception as exc:
print('generated an exception: %s' % exc)