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

Could you check for system log>> all & search for message mail is & it's


outcome.




Thanks,



Jaspal Singh


+919022506309


It comes out as blank



find_real_file.png



I'm not convinced that it is in the email header as I've sent the email to myself and checked the headers within Outlook and can't see the email address which is within the body inside the headers.


ServiceNow SA
Kilo Guru

I am using Cart API to generate request, and i have reference icon to populate manager's info. Like suppose in my email, i am using Manager:Test User



So it will check the user and correctly populating in the reference field.


Hi Sri,



Does your email body include the word 'email:' and then the email address?



As I don't have the word email within my email body unfortunately.


Hey Nabeel,



Is it possible to help with the format of mail you would be sending to


Servicenow..



Thanks,



Jaspal Singh


+919022506309