Skip to main content
Example scripts
arrow icon
To homepage
Jira
Data centre icon
Data Center

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

Created 1 year ago, Updated 1 month(s) ago
App in script
ScriptRunner For Jira
ScriptRunner For Jira
by Adaptavist
Compatibility
compatibility bullet
Jira (8.0 - 8.14)
compatibility bullet
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