我从詹金斯那里发邮件到一个匿名的内部SMTP中继。然后,该中继通过端口587上的TLS安全地将邮件发送到在线交换机。传输工作完美,问题是微软要求发件人地址匹配认证凭据登录名,这是相同的帐户电子邮件地址。例如,假设这是foo@mycompany.com。我怎么能让詹金斯总是从foo@mycompany.com发送邮件?

顺便说一下,当我说传输工作完美时,我的意思是我可以将格式化的电子邮件文件放入SMTP中继服务器上的“Pickup”目录中,并且它可以正确地发送到任何收件人,只要发件人地址是foo@mycompany.com。


我不确定这是否是你的意思,但詹金斯让你提供一个完整的发件人电子邮件地址通知。转到管理jenkins,然后是系统配置,找到名为电子邮件通知的部分。

您可以以Jenkins <foo@mycompany.com>的形式提供您的电子邮件地址。


Jenkins使用系统管理员电子邮件地址作为电子邮件通知的发送者地址。您可以在Manage Jenkins -> configure System下配置。这是在该页面的Jenkins位置标题下!这个设置是否绑定到电子邮件通知设置并不明显,因为它不在配置页的电子邮件通知标题之下。


Manage Jenkins -> Configure System -> Jenkins Location ->系统管理员的电子邮件地址

您可以在页面中搜索“Jenkins Location”,将尚未配置的地址的默认值更改为您想要的任何值。


如果你需要在不使用jenkins UI的情况下做到这一点(例如在自动化jenkins设置时)-你可以使用groovy脚本。

import jenkins.model.*

def jenkinsLocationConfiguration = JenkinsLocationConfiguration.get()

jenkinsLocationConfiguration.setAdminAddress("[your admin name] <[your admin email address]>")
// example format -> .setAdminAddress("Jane Doe <foo@company_email.com>")    

jenkinsLocationConfiguration.save()

注意:这个脚本不是我写的(尽管我已经测试过它并且它可以工作),所有功劳都要归功于Peter Halliday和他的网站以及其他有用的groovy脚本。


有两个地方可以添加“电子邮件通知”

全球层面上 本地级别(Jenkins工作级别)

要在全局级别设置电子邮件通知,请执行以下步骤- 1)去找詹金斯经理 2)系统配置 3) Jenkins位置 4)系统管理员电子邮件地址

要在本地级别(每个Jenkins作业级别)设置电子邮件通知,请执行以下步骤- 1)点击作业名称(如果有的话) 2)点击【配置】 3)然后寻找“构建后行动” 4)在“电邮通知”下填写电邮地址。 5)保存更改。


import javax.mail.Message.RecipientType
import javax.mail.Address
import javax.mail.internet.InternetAddress
import javax.mail.internet.MimeMessage

msg.setFrom(new InternetAddress("john...@server.com"))