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',
+ });
+
+ });
+ });
+});