diff --git a/packages/mail/src/classes/mail-service.js b/packages/mail/src/classes/mail-service.js index 8f4bb8bb1..fcae2ea71 100644 --- a/packages/mail/src/classes/mail-service.js +++ b/packages/mail/src/classes/mail-service.js @@ -180,20 +180,21 @@ class MailService { //Send mail try { + // copy object to avoid mutating original + const args = { ...data }; //Append multiple flag to data if not set if (typeof data.isMultiple === 'undefined') { - data.isMultiple = isMultiple; + args.isMultiple = isMultiple; } //Append global substitution wrappers if not set in data if (typeof data.substitutionWrappers === 'undefined') { - data.substitutionWrappers = this.substitutionWrappers; + args.substitutionWrappers = this.substitutionWrappers; } - //Create Mail instance from data and get JSON body for request - const mail = Mail.create(data); + const mail = Mail.create(args); const body = mail.toJSON(); - + //Filters the Mail body to avoid sensitive content leakage this.filterSecrets(body); diff --git a/packages/mail/src/classes/mail-service.spec.js b/packages/mail/src/classes/mail-service.spec.js new file mode 100644 index 000000000..a6fea0014 --- /dev/null +++ b/packages/mail/src/classes/mail-service.spec.js @@ -0,0 +1,33 @@ +const { assert } = require('chai'); + +const MailService = require('./mail-service'); +describe('MailService send', () => { + it('should not mutate original data variable', () => { + const mailService = new MailService(); + mailService.setClient({ + request: (req, cb) => { + return new Promise((resolve) => { + resolve(); + }); + }, + }); + const data = { + to: 'test@example.com', + from: 'test@example.com', // Use the email address or domain you verified above + subject: 'Sending with Twilio SendGrid is Fun', + text: 'and easy to do anywhere, even with Node.js', + html: 'and easy to do anywhere, even with Node.js', + }; + return mailService.send(data).then(() => { + assert.deepStrictEqual(data, + { + to: 'test@example.com', + from: 'test@example.com', // Use the email address or domain you verified above + subject: 'Sending with Twilio SendGrid is Fun', + text: 'and easy to do anywhere, even with Node.js', + html: 'and easy to do anywhere, even with Node.js', + }); + + }); + }); +});