Forward an email to Jira as the sender
This how-to will help you out solving the following use case:
A customer (john@customer.com
) sends an email to an employee (joe@mycompany.com
) instead of the JEMHC's Jira mail box (support@mycompany.com
). The employee would like to tackle the use case via Jira rather than a standard email conversation with the customer. So the employee could reply/forward the email to both the customer (john@customer.com
) with copy to JEMHC mail box (support@mycompany.com
). There are a few problems with this approach.
The employee will be the reporter/sender of the email instead of the customer
The employee may not want to be involved, he wants the ticket in the Jira queue so the ticket is handled by the team
The employee needs to send the forwarded email back to the customer so customer address doesn't get lost. If this email is replied, the conversation will be out of Jira.
The user may also receive a JEMHC email from the created ticket but not as the reporter/sender of the email
The original reply could be stripped out so forward should be used
A forwarded email from Google Mail looks similar to the following:
Example forwarded email
MIME-Version: 1.0
Received: by 10.157.39.45 with HTTP; Mon, 2 Jan 2017 18:24:15 -0800 (PST)
In-Reply-To: <CAM05jUm7ChfoFW_AM8RCsODW_hL8cpyT4LrNvPDL1GjoxJ6tFg@mail.gmail.com>
References: <CAM05jUm7ChfoFW_AM8RCsODW_hL8cpyT4LrNvPDL1GjoxJ6tFg@mail.gmail.com>
Date: Mon, 2 Jan 2017 23:24:15 -0300
Subject: Fwd: I have a problem
From: Joe Company <joe@mycompany.com>
To: Support <support@mycompany.com>
Content-Type: text/plain; charset=UTF-8
Message-ID: <CAJQE=NOijOO4=89Scau3RZZgHWB19q=C+tnBfaLK6F1wp3v0FQ@mail.gmail.com>
---------- Forwarded message ----------
From: John Customer <john@customer.com>
Date: Mon, Jan 2, 2017 at 11:23 PM
Subject: I have a problem
To: Joe Company <joe@mycompany.com>
Hi Joe, my name is John and I have this problem....
You can see how the body includes the sender of the original email (second From:).
Out of the box, this forwarded email will create an issue where the reporter is the employee (Joe Company) and not the customer (John Customer)
One solution is to transform the email converting the From: address from joe@mycompany.com
to john@customer.com
with Velocity Pre-Processing Task. The velocity script will take the From: email address in the body and replace the From: header of the forwarded message. After this pre-processing, JEMHC will handle the email as if the customer has sent the email directly to the JEMHC mail box (support@mycompany.com
) and not the employee.
With the following pre-processing script, JEMHC will handle the following transformed email (Notice the changed From: header)
Example forwarded email (after task has run)
MIME-Version: 1.0
Received: by 10.157.39.45 with HTTP; Mon, 2 Jan 2017 18:24:15 -0800 (PST)
In-Reply-To: <CAM05jUm7ChfoFW_AM8RCsODW_hL8cpyT4LrNvPDL1GjoxJ6tFg@mail.gmail.com>
References: <CAM05jUm7ChfoFW_AM8RCsODW_hL8cpyT4LrNvPDL1GjoxJ6tFg@mail.gmail.com>
Date: Mon, 2 Jan 2017 23:24:15 -0300
Message-ID: <CAJQE=NOijOO4=89Scau3RZZgHWB19q=C+tnBfaLK6F1wp3v0FQ@mail.gmail.com>
Subject: Fwd: I have a problem
From: John Customer <john@customer.com> <---HERE!
To: Support <support@mycompany.com>
Content-Type: text/plain; charset=UTF-8
---------- Forwarded message ----------
From: John Customer <john@customer.com> <---COPIED FROM HERE!
Date: Mon, Jan 2, 2017 at 11:23 PM
Subject: I have a problem
To: Joe Company <joe@mycompany.com>
Hi Joe, my name is John and I have this problem....
Create a Pre-Processing Task
Go to Profiles → Profile → Cog → Edit → Check Use PreProcessed Message and check Scripted Task Enabled
Enter the following Velocity Script. The script replaces the From header with the From found in the body.
Pre-Processing Task Script
#if ($taskUtils.isForward($message,"Fwd:","Fw:","WG:","Doorst:","VL:","TR:","I:","FS:","VS:","VB:","RV:","PD")) #set ($originalFrom = $taskUtils.getHeaderValue($message, 'From')) #if ( $stringUtils.containsIgnoreCase($originalFrom,'@mycompany.com')) #set ($from = $taskUtils.getHeaderFromBody($message,"from")) #if ($stringUtils.isNotBlank($from)) $taskUtils.getHeaderOrCreate($message,"from").setValue($from) $taskUtils.log("Setting new From: value $from") #end #end #end
Line 1: Check if the email is a forward. This helps preventing false negative (an non forwarding email including a From: line in the body) and it saves JEMHC the complexity of extracting values from the body. If no prefix list is provided (
#if ($taskUtils.isForward($message))
), the system default is used.Line 2-3 It validates that the user forwarding the email is an employee so only people in team can execute this feature.
Line 4: Extracts the original sender From: email and personal from the body.
Line 5: Validates that there was a From: in the body.
Line 6: Sets the new From so email looks like it was send by the original sender/customer. From: header should exist as it was validated in Line 3 so
getHeader
could be used instead ofgetHeaderOrCreate
Line 7: Adds a line in the report confirming that the from has been changed.
Enter the example email as test case
Add the following assertion to test that the header has been changed
Click Validate and check the outcome.
Test the script with a Test Case
Go to Test Cases → Create → Copy the example email address. Change the To: header with the mail box address (must match the profile's catch email address)
Run the test case, the report shown is the following (Notice the log line confirming that the From: address has been changed)
The created issue has the customer as the reporter. If you have outbound notification mappings, the reporter/customer can receive the created issue as email so when he replies, the issue gets commented
This feature works nicely with the JEMHC's Auto create Jira user. To enable it go to Profiles → Profile → Project Mapping → User and enable the feature. Revisit the groups new users will join.
Creating users may cause your license tier to go up increasing the price of the Jira instance, JEMHC and other paid Add-ons.
You can use Directive Set when forwarding the email. For example, write @Assignee=peter in the body so you can assign the issue when it's created.