Python 发送电子邮件后程序完成
Email类经过测试,具有在使用有效凭据时发送电子邮件的功能。当我使用twisted的多个协议时,问题就出现了;例如,当协议扭曲邮件和扭曲DNS或扭曲IRC时 创建的代码将无休止地运行,当触发事件时,我希望收到一封报告问题的电子邮件,例如DNS无法解析有效域,DNS服务已关闭等。但当收到电子邮件时,程序将退出(返回代码0),因此类邮件应包含一些我误导的代码,我已经检查了API,但是没有关于我遗漏了什么的线索 我当前用于发送电子邮件的类:Python 发送电子邮件后程序完成,python,email,client,twisted,Python,Email,Client,Twisted,Email类经过测试,具有在使用有效凭据时发送电子邮件的功能。当我使用twisted的多个协议时,问题就出现了;例如,当协议扭曲邮件和扭曲DNS或扭曲IRC时 创建的代码将无休止地运行,当触发事件时,我希望收到一封报告问题的电子邮件,例如DNS无法解析有效域,DNS服务已关闭等。但当收到电子邮件时,程序将退出(返回代码0),因此类邮件应包含一些我误导的代码,我已经检查了API,但是没有关于我遗漏了什么的线索 我当前用于发送电子邮件的类: class Email: def __init__(sel
class Email:
def __init__(self):
threading.Thread.__init__(self)
self.smtp_server = "SMTP"
self.user_name = "MAIL@DOMAIN"
self.user_password = "MAIL_PASSWORD"
self.portTLS = 587
self.portSSL = 465
def sendEmail(self, m):
contextFactory = ClientContextFactory()
contextFactory.method = SSLv3_METHOD
resultDeferred = Deferred()
senderFactory = ESMTPSenderFactory(
self.user_name,
self.user_password,
self.user_name,
m.to,
m.text,
resultDeferred,
contextFactory=contextFactory)
reactor.connectTCP(self.smtp_server, self.portTLS, senderFactory)
resultDeferred.addCallbacks(self.cbSentMessage, self.ebSentMessage)
return resultDeferred
def cbSentMessage(self, result):
print "Message sent"
reactor.stop()
def ebSentMessage(self, err):
err.printTraceback()
reactor.stop()
您正在调用
reactor.stop
以在resultDeferred
触发后停止程序。如果您停止这样做,您的程序将不再退出
(另外,您应该去掉对
线程.Thread.\uu init\uuuu
的调用,这是不必要的,而且几乎肯定会导致其他错误。)是的,用户Glyph是对的,现在我感觉自己像个傻瓜,现在做了这个问题:''(
解决方案是删除回调函数上的reactor.stop(),因此这些函数现在为:
def cbSentMessage(self, result):
print "Message sent"
在另一种情况下,不需要另一个,因为在触发错误时调用该函数,但我还是更改了它:
def ebSentMessage(self, err):
err.printTraceback()