Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 发送电子邮件后程序完成_Python_Email_Client_Twisted - Fatal编程技术网

Python 发送电子邮件后程序完成

Python 发送电子邮件后程序完成,python,email,client,twisted,Python,Email,Client,Twisted,Email类经过测试,具有在使用有效凭据时发送电子邮件的功能。当我使用twisted的多个协议时,问题就出现了;例如,当协议扭曲邮件和扭曲DNS或扭曲IRC时 创建的代码将无休止地运行,当触发事件时,我希望收到一封报告问题的电子邮件,例如DNS无法解析有效域,DNS服务已关闭等。但当收到电子邮件时,程序将退出(返回代码0),因此类邮件应包含一些我误导的代码,我已经检查了API,但是没有关于我遗漏了什么的线索 我当前用于发送电子邮件的类: class Email: def __init__(sel

Email类经过测试,具有在使用有效凭据时发送电子邮件的功能。当我使用twisted的多个协议时,问题就出现了;例如,当协议扭曲邮件和扭曲DNS或扭曲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()

您正在调用
reactor.stop
以在
resultDeferred
触发后停止程序。如果您停止这样做,您的程序将不再退出


(另外,您应该去掉对
线程.Thread.\uu init\uuuu
的调用,这是不必要的,而且几乎肯定会导致其他错误。)

是的,用户Glyph是对的,现在我感觉自己像个傻瓜,现在做了这个问题:''(

解决方案是删除回调函数上的reactor.stop(),因此这些函数现在为:

 def cbSentMessage(self, result):
    print "Message sent"
在另一种情况下,不需要另一个,因为在触发错误时调用该函数,但我还是更改了它:

 def ebSentMessage(self, err):
    err.printTraceback()