Email类经过测试,并且具有在使用有效凭据时发送电子邮件的功能。当我使用twisted的多个协议时,问题就出现了;例如,当协议twisted mail和twisted DNS或twisted IRC时。你知道吗
创建的代码将无休止地运行,当事件被触发时,我希望收到一封电子邮件报告问题,如DNS无法解析有效域,DNS服务关闭等。但当收到电子邮件时,程序退出(返回代码0),因此类电子邮件应包含一些我误导的代码,我已经检查了API,但是没有关于我遗漏了什么的线索。你知道吗
我当前用于发送电子邮件的类:
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()
是的,用户Glyph是对的,现在我觉得做这个问题像个傻瓜:“'”
解决办法是去掉反应堆停止(),因此这些函数现在是:
在另一个例子中,一个不是必需的,因为函数在触发错误时被调用,但是我还是改变了它:
在
resultDeferred
触发后,您正在调用reactor.stop
停止程序。如果您停止这样做,您的程序将不再退出。你知道吗(另外,您应该去掉对
threading.Thread.__init__
的调用,这是不必要的,而且几乎肯定会导致其他bug。)相关问题 更多 >
编程相关推荐