简体   繁体   中英

How to set programmatically recipients of Jenkins Email-ext plugin?

I'm trying to set the recipients of the Email-ext (aka Editable Email Notficiation ) to the owners of failed tests. Since the owners can't be calculated until after a build fails, the Inject Environment Variables plugin can't be used.

How can this be done?

In the Advanced... section create the following Pre-send Script :

import javax.mail.Message
import javax.mail.internet.InternetAddress

msg.addRecipient(Message.RecipientType.TO, new InternetAddress('recipient@example.com'))

You'll also need to set Project Recipient List (maybe to some dummy value) since if it's empty, the plugin decides there's nothing to do.

The script runs on the master so you'll need to ssh onto the slave from the master if you need to process its workspace.

If you need to read list of recipients from file on remote agent, expand above answer with FilePath:

import javax.mail.Message
import javax.mail.internet.InternetAddress

fp = new FilePath(build.workspace, build.workspace.toString() + "/recipients.txt")
emails = fp.readToString().split("\n")

for (email in emails) {
    msg.addRecipient(Message.RecipientType.TO, new InternetAddress(email))
}

In recent Jenkins versions (eg 2.3), importing "javax.mail.Message" in email-ext script, might fail on:

groovy.lang.MissingMethodException: No signature of method: jakarta.mail.inte.net.MimeMessage.addRecipients() is applicable for argument types: (javax.mail.Message$RecipientType, java.lang.String)

In such case, import " jakarta.mail.Message " instead, and then you can set emails with a simple String:

import jakarta.mail.Message
msg.setRecipients(Message.RecipientType.TO, "first@email.com,second@email.com")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM