电子邮件类已经过测试,并且具有在使用有效凭据时发送电子邮件的功能。当我使用扭曲的多种协议时,问题就出现了;例如,协议扭曲邮件和扭曲的DNS或扭曲的IRC。
创建的代码将无休止地运行,当触发事件时,我希望收到报告问题的电子邮件,例如DNS无法解析有效域,DNS服务已关闭等等,但收到电子邮件时程序退出(返回代码0),因此类Email应该包含一些我误导的代码,我已经检查了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()
答案 0 :(得分:0)
在reactor.stop
点火后,您正在致电resultDeferred
以停止您的计划。如果你停止这样做,你的程序将不再退出。
(另外,你应该摆脱对threading.Thread.__init__
的调用,这是不必要的,几乎肯定会导致其他错误。)
答案 1 :(得分:0)
是的,用户雕文是对的,现在我觉得自己感觉自己像现在这样做的傻瓜:'''(
解决方案是在回调函数上删除reactor.stop(),因此这些函数现在为:
def cbSentMessage(self, result):
print "Message sent"
在另一个中是不必要的,因为当一个错误被触发时调用该函数,但是无论如何我都改变了它:
def ebSentMessage(self, err):
err.printTraceback()