如何使用电子邮件分机插件在 Jenkins 中设置发件人地址?
How to set from address in Jenkins with email-ext plugin?
使用 AWS SES 作为邮件服务器。在扩展电子邮件通知区域设置 smtp、用户名和密码。但是没有找到从地址设置的位置。如果不设置,发送邮件将失败:
SendFailedException message: 501 Invalid MAIL FROM address provided
在 Jenkins Location 区域,有一个 System Admin 电子邮件地址输入。即使在那里设置地址,也无法成功发送邮件。
我们使用 Jenkins 管道并通过 emailext 选项设置发件人:
def subject = "JENKINS-NOTIFICATION: ${buildStatus}: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'"
emailext(
mimeType: 'text/html',
replyTo: '$DEFAULT_REPLYTO',
subject: subject,
from: 'jenkins@host.com',
to: 'dummy@corp.com',
body: '${SCRIPT,template="email.template"}',
attachLog: true,
compressLog: true,
recipientProviders: [[$class: 'DevelopersRecipientProvider']]
)
另请参阅 documentation 您可以定义的选项。
以下是使用 Jenkins 2.319.3 测试的:
因此,使用扩展电子邮件插件 - 它无法正确区分 FROM 电子邮件地址 - 与 SMTP 用户名,这与 built-in 电子邮件不同。因为 AWS SES 要求发件人地址是经过验证的电子邮件 - 它们需要彼此不同。如果您不使用管道 - 您可以通过以下方式设置 FROM 地址:
- 以管理员身份登录 Jenkins
- 点击“管理 Jenkins”
- 点击“配置系统”
- 找到两个 SMTP 服务器 - 并设置为您的 AWS 区域电子邮件服务器
- 单击两个
下方的'Advanced'
- 确保在两者上都选中“使用 TLS”
- 确保两者的 SMTP 端口都设置为 587
- 在“E-mail 通知”中 - 打开“使用 SMTP 身份验证”并使用特定的 AWS 生成的 SMTP 用户名和密码(不是发件人地址!)作为“用户名”和“密码” " 在那个部分
- 在“扩展 E-mail 通知”-(在扩展的“高级”部分)- 设置“SMTP 用户名”和“SMTP 密码”以使用特定的 AWS 生成的 SMTP 用户名和密码(不是发件人地址!)。
- 找到“默认 Pre-send 脚本”部分
- 添加以下内容(将 fromaddress@domain.com 更改为您要使用的 FROM 电子邮件)
import javax.mail.Message.RecipientType
import javax.mail.Address
import javax.mail.internet.InternetAddress
import javax.mail.internet.MimeMessage
msg.setFrom(new InternetAddress("fromaddress@domain.com"))
- 确认所有扩展电子邮件任务中的默认预发送脚本都使用 $DEFAULT_PRESEND_SCRIPT - 否则您必须 pre-append/edit 本地脚本包含以上内容。
- 测试! (创建一个测试作业来验证总是一件好事 - 我创建了强制失败的作业 - 带有扩展的电子邮件通知 - 以检查我是否通过 SES 收到了带有附件的电子邮件。)
使用 AWS SES 作为邮件服务器。在扩展电子邮件通知区域设置 smtp、用户名和密码。但是没有找到从地址设置的位置。如果不设置,发送邮件将失败:
SendFailedException message: 501 Invalid MAIL FROM address provided
在 Jenkins Location 区域,有一个 System Admin 电子邮件地址输入。即使在那里设置地址,也无法成功发送邮件。
我们使用 Jenkins 管道并通过 emailext 选项设置发件人:
def subject = "JENKINS-NOTIFICATION: ${buildStatus}: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'"
emailext(
mimeType: 'text/html',
replyTo: '$DEFAULT_REPLYTO',
subject: subject,
from: 'jenkins@host.com',
to: 'dummy@corp.com',
body: '${SCRIPT,template="email.template"}',
attachLog: true,
compressLog: true,
recipientProviders: [[$class: 'DevelopersRecipientProvider']]
)
另请参阅 documentation 您可以定义的选项。
以下是使用 Jenkins 2.319.3 测试的:
因此,使用扩展电子邮件插件 - 它无法正确区分 FROM 电子邮件地址 - 与 SMTP 用户名,这与 built-in 电子邮件不同。因为 AWS SES 要求发件人地址是经过验证的电子邮件 - 它们需要彼此不同。如果您不使用管道 - 您可以通过以下方式设置 FROM 地址:
- 以管理员身份登录 Jenkins
- 点击“管理 Jenkins”
- 点击“配置系统”
- 找到两个 SMTP 服务器 - 并设置为您的 AWS 区域电子邮件服务器
- 单击两个 下方的'Advanced'
- 确保在两者上都选中“使用 TLS”
- 确保两者的 SMTP 端口都设置为 587
- 在“E-mail 通知”中 - 打开“使用 SMTP 身份验证”并使用特定的 AWS 生成的 SMTP 用户名和密码(不是发件人地址!)作为“用户名”和“密码” " 在那个部分
- 在“扩展 E-mail 通知”-(在扩展的“高级”部分)- 设置“SMTP 用户名”和“SMTP 密码”以使用特定的 AWS 生成的 SMTP 用户名和密码(不是发件人地址!)。
- 找到“默认 Pre-send 脚本”部分
- 添加以下内容(将 fromaddress@domain.com 更改为您要使用的 FROM 电子邮件)
import javax.mail.Message.RecipientType
import javax.mail.Address
import javax.mail.internet.InternetAddress
import javax.mail.internet.MimeMessage
msg.setFrom(new InternetAddress("fromaddress@domain.com"))
- 确认所有扩展电子邮件任务中的默认预发送脚本都使用 $DEFAULT_PRESEND_SCRIPT - 否则您必须 pre-append/edit 本地脚本包含以上内容。
- 测试! (创建一个测试作业来验证总是一件好事 - 我创建了强制失败的作业 - 带有扩展的电子邮件通知 - 以检查我是否通过 SES 收到了带有附件的电子邮件。)