Get email address from body of inbound email and set as Requested For?

na93
Mega Expert

Hi All,

I have an inbound request action, and what I am trying to do is get the the inbound action to check the inbound email for an Email Address within the body of the email itself. Then use this email address to set it as the 'Requested for" of the Request.

Now excuse me as I am completely new to development and Javascript so I'm probably a mile off but this is what I have so far, I'm not sure how I go about using the variable 'emails' to essentially check the user table and set this as the requester

createRequest();

function createRequest() {

//Create Request

var grRequest = new GlideRecord ("sc_request");

grRequest.initialize();

var content = email.body_text;  

var emails = content.match(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}/ig);  

gs.log('Email is ' + emails); NOTE: This prints the email address from the body of the email fine

var userObject = gs.getUser().getRecord().getValue('emails');

grRequest.requested_for.setDisplayValue(emails);

grRequest.short_description = email.subject.toString();

grRequest.description = "received from: " + email.origemail + "\n\n" + email.body_text;

var requestSysId = grRequest.insert();

//Create Request Item, substitute your requested for

//current.requested_for = '52aa1965db4ef2006de0f3731d9619e1';

current.requested_for.setDisplayValue('emails');

current.short_description = email.subject.toString();

current.description = "received from: " + email.origemail + "\n\n" + email.body_text;

//substitute your cat item

current.cat_item = '73a67d42db248300aefef3731d961917';

current.parent = requestSysId;

current.request = requestSysId;

current.insert();

//Workflow Trigger

var w = new Workflow();

wfSysId = w.getWorkflowFromName("Test");

w.startFlow(wfSysId, current, current.operation());

}

Any points or help would be much appreciated.

1 ACCEPTED SOLUTION

renaud3
Giga Contributor

it would be best to call a function doing the job.


Something like:



grRequest.requested_for = getRequestedForID(emails);




and create the new function after or inside your "createRequest" function:



function getRequestedForID(retrievedEmail){


var grUser = new GlideRecord("sys_user");


grUser.addQuery("email", retrievedEmail);


grUser.query();


if(grUser.next()){


return grUser.sys_id.toString();


}


else {


gs.log("Couldn't find user based on email: " + retrievedEmail + " in Inbound Email Action Create Request","Inbound Email log");


}


}


View solution in original post

19 REPLIES 19

Karthik Reddy T
Kilo Sage

Hello Nabeel,




In the inbound action mark requested for as Email >Sender.



Please try and let me know if you need any other information related to this.


Karthik Reddy T.
ServiceNow Commnunity MVP -2018 class.

Hi Karthik,



The send of the email is a generic email unfortunately, the user's email address is only within the body of the email itself



Thanks,


Nabeel


Karthik Reddy T
Kilo Sage

You can write script as below.


Current.requested_for = email.body.email.



As the user today give email in the below format.



Email: user mail I'd.


Karthik Reddy T.
ServiceNow Commnunity MVP -2018 class.

Unfortunately no because I don't have any control over the inbound email and can't amend it, it only has the email address at the bottom there isn't any words or anything before it.



Any other ideas?



Thanks