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

Thanks Jaspal here is the exact email



From: smoothwall@example.com
Sent: 25 August 2017 15:53
To: 'ServiceNow' <*****@service-now.com>
Subject: Unblock request for https://example.com



Please unblock https://example.com


Guardian user is AD\USERNAME


[The following information is not authenticated by Guardian] Additional information:Please can you make this available for me


Request from John Doe john.doe@example.com


renaud3
Giga Contributor

Hello Arshad,



Can you try to replace this part of the script:


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


grRequest.requested_for.setDisplayValue(emails);



with:


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


grRequest.requested_for = userObject;



I think you have to assign a sys_id on a reference field.


Can you confirm that "userObject " variable contain the wanted sys_id ?


If not, you'll have to do a glide record on sys_user to retrieve the sys_id based on the email.



regards


R


Thanks renaud, I think we're getting close..



"userObject" doesn't contain the sys_id unfortunately however, what is the best way/script I should use to get this based on the email?



Cheers,
Nabeel


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");


}


}


Renaud thank you so much, I've now got this working perfectly



Much appreciated for your help!



Regards,
Nabeel