Attachment from email is not attaching to Incident table with Inbound Email Action

dileep0146
Tera Contributor

Hi All,

 

I have created Inbound Email action with the script attached to create Incident and it's working fine. Record is creating but If I attach any attachment to email and sending to ServiceNow, the attachment is not attaching to newly created Incident record.

 

Please suggest.

Thank you

var emailSubject = email.subject; // Get the subject line of the email
var callerEmail = emailSubject.match(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/)[0]; // Extract email using regex

// Look up user based on the email address
var user = new GlideRecord('sys_user');
user.addQuery('email', callerEmail); // Query for user with the extracted email
user.query();

if (user.next()) {
    // User found, proceed to set the caller and affected user
    var incident = new GlideRecord('incident');
    incident.initialize(); // Initialize a new incident record
    incident.caller_id = user.sys_id; // Set the caller to the found user
    incident.u_affected_user = user.sys_id; // Set the affected user to the found user
	incident.priority = 3; // Set the priority to Moderate
	incident.short_description = email.subject; // Set the short description to email subject
	incident.description = email.body_text; // Set the description to email body
    incident.insert(); // Insert the incident record
} else {
    gs.info('User with email ' + callerEmail + ' not found.');
}

var attachment = new GlideRecord('sys_attachment'); // GlideRecord for the sys_attachment table
var emailAttachments = email.getAttachments(); // Get the email attachments

// Check if email attachments exist
if (emailAttachments) {
    // Iterate through each attachment and insert it into the Incident table
    emailAttachments.forEach(function(emailAttachment) {
        // Create a new sys_attachment record for the incident
        var newAttachment = new GlideRecord('sys_attachment');
        newAttachment.initialize();
        newAttachment.table_name = 'incident'; // Set the table to 'incident'
        newAttachment.table_sys_id = incident.sys_id; // Link the attachment to the incident using its sys_id
        newAttachment.file_name = emailAttachment.file_name;
        newAttachment.content_type = emailAttachment.content_type;
        newAttachment.size_bytes = emailAttachment.size_bytes;

        // Copy the attachment content from the email to the new record
        newAttachment.setAttachmentData(emailAttachment);

        // Insert the new attachment record
        newAttachment.insert();
    });
}
5 REPLIES 5

Ankur Bawiskar
Tera Patron

@dileep0146 

why not use GlideSysAttachment.copy?

var emailSubject = email.subject; // Get the subject line of the email
var callerEmail = emailSubject.match(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/)[0]; // Extract email using regex

// Look up user based on the email address
var user = new GlideRecord('sys_user');
user.addQuery('email', callerEmail); // Query for user with the extracted email
user.query();

if (user.next()) {
    // User found, proceed to set the caller and affected user
    var incident = new GlideRecord('incident');
    incident.initialize(); // Initialize a new incident record
    incident.caller_id = user.sys_id; // Set the caller to the found user
    incident.u_affected_user = user.sys_id; // Set the affected user to the found user
	incident.priority = 3; // Set the priority to Moderate
	incident.short_description = email.subject; // Set the short description to email subject
	incident.description = email.body_text; // Set the description to email body
    incident.insert(); // Insert the incident record
GlideSysAttachment.copy('sys_email',current.sys_id,'incident',incident.sys_id);
} else {
    gs.info('User with email ' + callerEmail + ' not found.');
}

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Hi Ankur,

 

Thanks for your reply.

 

Attchement is not attaching to Incident with the help of above script, Can you please sugegst

 

Thank you

var emailSubject = email.subject; // Get the subject line of the email
var callerEmail = emailSubject.match(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/)[0]; // Extract email using regex

// Look up user based on the email address
var user = new GlideRecord('sys_user');
user.addQuery('email', callerEmail); // Query for user with the extracted email
user.query();

if (user.next()) {
    // User found, proceed to set the caller and affected user
    var incident = new GlideRecord('incident');
    incident.initialize(); // Initialize a new incident record
    incident.caller_id = user.sys_id; // Set the caller to the found user
    incident.u_affected_user = user.sys_id; // Set the affected user to the found user
	incident.priority = 3; // Set the priority to Moderate
	incident.short_description = email.subject; // Set the short description to email subject
	incident.description = email.body_text; // Set the description to email body
    incident.insert(); // Insert the incident record
	GlideSysAttachment.copy('sys_email',current.sys_id,'incident',incident.sys_id);
} else {
    gs.info('User with email ' + callerEmail + ' not found.');
}

Anand Kumar P
Tera Patron

Hi @dileep0146 ,

 

As suggested by @Ankur Bawiskar  you can use 

GlideSysAttachment.copy('sys_email',current.sys_id,'incident',incident.sys_id);


Mark it as helpful and solution proposed if it serves your purpose.
Thanks,
Anand