我在内部从 Jenkins 向匿名 SMTP 中继发送邮件。然后,该中继通过端口 587 上的 TLS 安全地发送邮件以进行在线交换。传输工作完美,问题是 Microsoft 要求发件人地址与身份验证凭据登录名匹配,该登录名与帐户电子邮件地址相同。例如,假设这是 foo@mycompany.com。我怎样才能让詹金斯总是从 foo@mycompany.com 发送邮件?
顺便说一句,当我说传输工作完美时,我的具体意思是我可以将格式化的电子邮件文件放入 SMTP 中继服务器上的“拾取”目录中,并且如果发件人地址是 foo@mycompany,它会正确发送给任何收件人.com。
Jenkins 使用系统管理员电子邮件地址作为电子邮件通知的发件人地址。您可以在管理 Jenkins -> 配置系统下进行配置。这是该页面上的 Jenkins Location 标题下!此设置是否与电子邮件通知设置相关并不是很明显,因为它不在配置页面上的电子邮件通知标题下。
管理 Jenkins -> 配置系统 -> Jenkins 位置 -> 系统管理员电子邮件地址
您可以在页面上搜索“Jenkins Location”以将尚未配置的地址的默认值更改为您想要的任何值。
有两个地方可以添加“E-Mail Notificaitons”
全局级别 本地级别(Jenkins 工作级别)
要在全局级别设置电子邮件通知,请按照以下步骤操作 - 1) 转到管理 Jenkins 2) 配置系统 3) Jenkins 位置 4) 系统管理员电子邮件地址
https://i.stack.imgur.com/1GH7x.png
要在本地级别(每个 Jenkins 作业级别)设置电子邮件通知,请按照以下步骤操作 - 1)单击作业名称(如果存在) 2)单击“配置”3)然后查找“发布- build Action” 4) 在“E-mail Notification”下指定电子邮件地址。 5) 保存更改。
https://i.stack.imgur.com/yVnEe.png
我不确定这是否是您的意思,但 Jenkins 使您能够为通知提供完整的发件人电子邮件地址。转到管理 jenkins,然后转到系统配置并找到名为电子邮件通知的部分。
您可以以 Jenkins <foo@mycompany.com>
的形式提供您的电子邮件地址。
如果您需要在不使用 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 脚本 here。
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"))