发送emai后程序完成

2024-04-27 00:29:30 发布

您现在位置:Python中文网/ 问答频道 /正文

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()

Tags: 代码nameself协议initdns电子邮件email
2条回答

是的,用户Glyph是对的,现在我觉得做这个问题像个傻瓜:“'”

解决办法是去掉反应堆停止(),因此这些函数现在是:

 def cbSentMessage(self, result):
    print "Message sent"

在另一个例子中,一个不是必需的,因为函数在触发错误时被调用,但是我还是改变了它:

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

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

(另外,您应该去掉对threading.Thread.__init__的调用,这是不必要的,而且几乎肯定会导致其他bug。)

相关问题 更多 >