我有一个针对软件项目运行的buildbot设置,我正在尝试设置这样的电子邮件通知:
from buildbot.status import mail
c['status'].append(mail.MailNotifier(fromaddr=BUILDBOT_EMAIL,
mode=('failing'),
extraRecipients=[NOTIFICATION_EMAIL],
sendToInterestedUsers=False))
BUILDBOT_EMAIL
是字符串“buildbot@name-of-our-project.org”,而NOTIFICATION_EMAIL
是一个字符串,其中包含我希望收到通知的电子邮件。
根据documentation,一切似乎都很好;我没有向感兴趣的用户发送邮件,因此不需要lookup
参数。我只是尝试将邮件发送到明确声明的地址,以防任何构建失败。我基本上是这样做的:
要获得一个简单的单消息构建(例如,对于邮件列表),请使用 而是以下形式。此表单不会向个人发送邮件 开发人员(因此不需要lookup =参数,解释 以下),相反,它只发送邮件给名为的额外收件人 在论点中:
mn = MailNotifier(fromaddr="buildbot@example.org",
sendToInterestedUsers=False,
extraRecipients=['listaddr@example.org'])
然而,即使我确实有失败的构建,也没有电子邮件到达。可能是什么原因?
我使用fromaddr并根据示例简单地使用buildbot@domain-name.org
地址的方式会出现问题吗?该地址是否应以某种方式在我们的域中注册?如果我改用buildbot@localhost
会不会产生影响?
问题可能是由于我没有使用relayhost
造成的?从文档中的示例看来,这只需要设置为使用出站进行身份验证 - 而不是入站地址。
非常感谢任何帮助。
答案 0 :(得分:1)
与kfunk建议的类似,我开始看看twistd.log。它包含以下内容:
2013-02-09 04:26:18+0000 [-] sending mail (868 bytes) to ['addr@example.com']
2013-02-09 04:26:18+0000 [-] Starting factory <twisted.mail.smtp.ESMTPSenderFactory instance at 0x31dc488>
2013-02-09 04:26:18+0000 [Uninitialized] SMTP Client retrying server. Retry: 5
2013-02-09 04:26:18+0000 [Uninitialized] SMTP Client retrying server. Retry: 4
2013-02-09 04:26:18+0000 [Uninitialized] SMTP Client retrying server. Retry: 3
2013-02-09 04:26:18+0000 [Uninitialized] SMTP Client retrying server. Retry: 2
2013-02-09 04:26:18+0000 [Uninitialized] SMTP Client retrying server. Retry: 1
2013-02-09 04:26:18+0000 [Uninitialized] Unhandled error in Deferred:
2013-02-09 04:26:18+0000 [Uninitialized] Unhandled Error
Traceback (most recent call last):
Failure: twisted.internet.error.ConnectionRefusedError: Connection was refused by other side: 111: Connection refused.
我尝试从机器的命令行手动发送电子邮件(使用sendmail
),但失败了;事实证明没有SMTP服务器。解决方案是安装和配置邮件传输代理(对于Ubuntu,最常见的一个似乎是Postfix所以我安装了它)。有很多关于如何安装和配置Postfix的教程和手册,所以一旦我发现线索很容易就可以了。
拥有自己的SMTP服务器有很多注意事项;例如,找到一种方法来保护它免受未经授权的访问,否则它可以被例如使用。垃圾邮件发送者。但是,如果您想从buildbot获取电子邮件,则必须拥有SMTP服务器,因此值得花时间学习和正确配置它。