try:
if not self.check_smtp_connected("main", self.sender_addr):
self.close("main", self.sender_addr)
if not self.connect("main", self.sender_addr):
self.last_error = "req_id:%d,connect to %s main failed" % (mail_id, self.name)
raise Exception("req_id:%d,connect to %s main failed" % (mail_id, self.name))
sender_addr = parseaddr(self.msg['From'])[1]
recv_addr = parseaddr(self.msg['To'])[1]
self.smtp_conns[self.sender_addr].sendmail(self.msg['From'], self.msg['To'], self.msg.as_string())
except Exception as e:
glogger.warning("req_id:%d,send mail by %s failed, error: %s" % (mail_id, self.name, str(e)))
else:
sent_succ = True
break
check_smtp_connected使用noop()[0]检查与smtp服务器的连接。
我第一次得到: req_id:7066283,tx_smtp发送邮件失败,错误:超时
所以例外是超时然后我使用check_smtp_connected来检查连接,它已经坏了。
我第二次得到: req_id:7066283,tx_smtp发送邮件失败,错误:(250,'确定') 所以例外是(250,'Ok')
我阅读了sendmail的源代码,但找不到会引发此异常的分支。
所以我很困惑。结果是我的邮箱收到两封邮件
答案 0 :(得分:0)
我解决了这个问题,因为我设置了smtplib参数' timeout = 3'并且邮件太大了,所以我第一次得到"超时"。我想第一次得到第一次回复,因为我真的收到了两次这封邮件,但没有得到证实。我把超时设置得更大了,一切都还好!