Example scripts
To homepage
Jira

Create a New Issue Using a Mail Handler Script and Set the Priority to Match the Emails Priority Header
App in script

ScriptRunner For Jira
by Adaptavist
Compatibility

Jira (8.0 - 8.14)

ScriptRunner For Jira (6.18.0)
Language |
groovy
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.exception.CreateException
import com.atlassian.jira.service.util.ServiceUtils
import com.atlassian.jira.service.util.handler.MessageHandlerContext
import com.atlassian.jira.service.util.handler.MessageUserProcessor
import com.atlassian.jira.user.util.UserManager
import com.atlassian.mail.MailUtils
final targetProjectKey = 'TEST'
final defaultReporterName = 'admin'
final defaultIssueType = 'Task'
final defaultFallbackPriority = 'Medium'
// X-Priority is usually a number string and is defined by your mail server admin. This map defines an example relationship between X-Priority and a Jira Priority Name.
final priorityHeaderValueToJiraPriorityName = [
'5': 'Lowest',
'4': 'Low',
'3': 'Medium',
'2': 'High',
'1': 'Highest',
]
def constantsManager = ComponentAccessor.constantsManager
def messageUserProcessor = ComponentAccessor.getComponent(MessageUserProcessor) as MessageUserProcessor
def userManager = ComponentAccessor.getComponent(UserManager)
def projectManager = ComponentAccessor.projectManager
def issueFactory = ComponentAccessor.issueFactory
def subject = message.subject as String
def issue = ServiceUtils.findIssueObjectInString(subject)
if (issue) {
// issue already exists so do nothing
return
}
def project = projectManager.getProjectObjByKey(targetProjectKey)
def user = userManager.getUserByName(defaultReporterName)
def reporterUser = messageUserProcessor.getAuthorFromSender(message) ?: user
def defaultPriority = constantsManager.priorities.findByName(defaultFallbackPriority)
def mailPriority = message.getHeader('X-Priority')?.first()
def translatedPriority = priorityHeaderValueToJiraPriorityName[mailPriority]
def derivedPriority = constantsManager.priorities.findByName(translatedPriority) ?: defaultPriority
if (!derivedPriority) {
log.error('A valid Priority could not be found so no issue will be created')
return
}
def issueObject = issueFactory.issue.with {
setProjectObject(project)
setSummary(subject ?: 'Created via ScriptRunner mail handler') // Issues must always have a summary
setDescription(MailUtils.getBody(message))
setIssueTypeId(project.issueTypes.find { it.name == defaultIssueType }.id)
setReporter(reporterUser)
setPriority(derivedPriority)
it
}
try {
(messageHandlerContext as MessageHandlerContext).createIssue(user, issueObject)
} catch (CreateException e) {
log.error('Error creating issue: ', e)
}
Having an issue with this script?
Report it here