diff --git a/packages/mail/src/classes/mail-service.js b/packages/mail/src/classes/mail-service.js
index 111930985..fcae2ea71 100644
--- a/packages/mail/src/classes/mail-service.js
+++ b/packages/mail/src/classes/mail-service.js
@@ -181,7 +181,7 @@ class MailService {
try {
// copy object to avoid mutating original
- const args = data;
+ const args = { ...data };
//Append multiple flag to data if not set
if (typeof data.isMultiple === 'undefined') {
args.isMultiple = isMultiple;
@@ -191,11 +191,10 @@ class MailService {
if (typeof data.substitutionWrappers === 'undefined') {
args.substitutionWrappers = this.substitutionWrappers;
}
-
//Create Mail instance from data and get JSON body for request
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',
+ });
+
+ });
+ });
+});