Python Buildbot(来自Buildbot.net):iCloud电子邮件未作为状态目标运行

Python Buildbot(来自Buildbot.net):iCloud电子邮件未作为状态目标运行,python,smtp,twisted,buildbot,Python,Smtp,Twisted,Buildbot,我正在设置buildbot以使用iCloud电子邮件地址作为状态目标: m = mail.MailNotifier(fromaddr="some_icloud_user@me.com", sendToInterestedUsers=False, extraRecipients=["some_other_icloud_users@me.com"], useTls=True, relayhos

我正在设置buildbot以使用iCloud电子邮件地址作为状态目标:

m = mail.MailNotifier(fromaddr="some_icloud_user@me.com",
                  sendToInterestedUsers=False,
                  extraRecipients=["some_other_icloud_users@me.com"],
                  useTls=True, relayhost="smtp.mail.me.com", smtpPort=587,
                  smtpUser="some_icloud_user@me.com", smtpPassword="some_icloud_password")
(iCloud电子邮件设置说明如下所示)

似乎TLS/SSL握手(来自master/twistd.log)有问题:

2014-06-09 00:43:34-0700[ESMTPSender,client]SMTP客户端重试服务器。重试:1
2014-06-09 00:43:34-0700[ESMTPSender,client]未处理的错误
回溯(最近一次呼叫最后一次):
文件“/Users/ionut/work/buildbot/sandbox/lib/python2.7/site packages/Twisted-14.0.0-py2.7-macosx-10.9-intel.egg/Twisted/internet/tcp.py”,第214行,多里德
返回自我。已接收数据(数据)
文件“/Users/ionut/work/buildbot/sandbox/lib/python2.7/site-packages/Twisted-14.0.0-py2.7-macosx-10.9-intel.egg/Twisted/internet/tcp.py”,第220行,在收到的数据中
rval=self.protocol.dataReceived(数据)
文件“/Users/ionut/work/buildbot/sandbox/lib/python2.7/site packages/Twisted-14.0.0-py2.7-macosx-10.9-intel.egg/Twisted/protocols/basic.py”,第571行,格式为dataReceived
为什么=self.lineReceived(行)
文件“/Users/ionut/work/buildbot/sandbox/lib/python2.7/site packages/Twisted-14.0.0-py2.7-macosx-10.9-intel.egg/Twisted/mail/smtp.py”,第1063行,已收到
为什么=self.\u确定响应(self.code,'\n'.join(self.resp))
---  ---
esmtpState_starttls中的文件“/Users/ionut/work/buildbot/sandbox/lib/python2.7/site packages/Twisted-14.0.0-py2.7-macosx-10.9-intel.egg/Twisted/mail/smtp.py”,第1411行
self.transport.startTLS(self.context)
exceptions.AttributeError:“Client”对象没有属性“startTLS”
2014-06-09 00:43:34-0700[ESMTPSender,client]延迟中未处理的错误:
2014-06-09 00:43:34-0700[ESMTPSender,client]未处理的错误
回溯(最近一次呼叫最后一次):
失败:twisted.mail.smtp.TLSError:451无法完成SSL/TLS握手

如今,随着所有反垃圾邮件措施的实施,直接向收件人的邮件服务器发送邮件的策略不太可能奏效。您最好使用组织的SMTP服务器


除此之外,我怀疑这里的问题是您没有安装pycrypto,或者正在使用不支持TLS的Twisted reactor。

解决了这个问题:由于buildbot使用virtualenv,我需要通过easy_install安装pyOpenSSL—在包含本地python环境(即“沙盒”)的目录中,我运行了“easy_install pyOpenSSL”SSL握手过程正常,因此buildbot现在可以发送电子邮件了。最初,我通过从系统Python框架内部链接到SSL目录来“安装”pyOpenSSL。看起来buildbot安装脚本没有安装pyOpenSSL,很奇怪。谢谢大家!

您也可以将其标记为“twisted”,谢谢,刚刚这么做了(顺便说一句,这里是python新手)。我看到virtualenv目录中有ssl和加密相关的文件-我必须手动安装它们,通过从Python.framework system library.BTW链接它们,我在site packages dir:sandbox//lib/python2.7/site-packages/Twisted-14.0.0-py2.7-macosx-10.9-intel.egg/virtualenv目录有python 2.7,我的系统框架是2.6——这可能是将OpenSSL链接到virtualenv dir的问题吗?lrwxr-xr-x 1 ionut staff 82 Jun 8 23:52沙盒/lib/python2.7/OpenSSL->/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/Python/OpenSSL
2014-06-09 00:43:34-0700 [ESMTPSender,client] SMTP Client retrying server. Retry: 1
2014-06-09 00:43:34-0700 [ESMTPSender,client] Unhandled Error
    Traceback (most recent call last):
      File "/Users/ionut/work/buildbot/sandbox/lib/python2.7/site-packages/Twisted-14.0.0-py2.7-macosx-10.9-intel.egg/twisted/internet/tcp.py", line 214, in doRead
        return self._dataReceived(data)
      File "/Users/ionut/work/buildbot/sandbox/lib/python2.7/site-packages/Twisted-14.0.0-py2.7-macosx-10.9-intel.egg/twisted/internet/tcp.py", line 220, in _dataReceived
        rval = self.protocol.dataReceived(data)
      File "/Users/ionut/work/buildbot/sandbox/lib/python2.7/site-packages/Twisted-14.0.0-py2.7-macosx-10.9-intel.egg/twisted/protocols/basic.py", line 571, in dataReceived
        why = self.lineReceived(line)
      File "/Users/ionut/work/buildbot/sandbox/lib/python2.7/site-packages/Twisted-14.0.0-py2.7-macosx-10.9-intel.egg/twisted/mail/smtp.py", line 1063, in lineReceived
        why = self._okresponse(self.code,'\n'.join(self.resp))
    --- <exception caught here> ---
      File "/Users/ionut/work/buildbot/sandbox/lib/python2.7/site-packages/Twisted-14.0.0-py2.7-macosx-10.9-intel.egg/twisted/mail/smtp.py", line 1411, in esmtpState_starttls
        self.transport.startTLS(self.context)
    exceptions.AttributeError: 'Client' object has no attribute 'startTLS'
2014-06-09 00:43:34-0700 [ESMTPSender,client] Unhandled error in Deferred:
2014-06-09 00:43:34-0700 [ESMTPSender,client] Unhandled Error
    Traceback (most recent call last):
    Failure: twisted.mail.smtp.TLSError: 451 Could not complete the SSL/TLS handshake
    <<< 250-NO-SOLICITING
    <<< 250 SIZE 28311552
    >>> STARTTLS
    <<< 220 2.5.0 Go ahead with TLS negotiation.