diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json
index 9ef9452a616..cefbcf224ac 100644
--- a/packages/rocketchat-i18n/i18n/en.i18n.json
+++ b/packages/rocketchat-i18n/i18n/en.i18n.json
@@ -48,6 +48,12 @@
"Accounts_denyUnverifiedEmail": "Deny unverified email",
"Accounts_EmailVerification": "Email Verification",
"Accounts_EmailVerification_Description": "Make sure you have correct SMTP settings to use this feature",
+ "Accounts_Email_Approved": "[name]
Your account was approved.
",
+ "Accounts_Email_Activated": "[name]
Your account was activated.
",
+ "Accounts_Email_Deactivated": "[name]
Your account was deactivated.
",
+ "Accounts_Email_Approved_Subject": "Account approved",
+ "Accounts_Email_Activated_Subject": "Account activated",
+ "Accounts_Email_Deactivated_Subject": "Account deactivated",
"Accounts_Enrollment_Email": "Enrollment Email",
"Accounts_Enrollment_Email_Default": "Welcome to [Site_Name]
Go to [Site_URL] and try the best open source chat solution available today!
",
"Accounts_Enrollment_Email_Description": "You may use the following placeholders:
- [name], [fname], [lname] for the user's full name, first name or last name, respectively.
- [email] for the user's email.
- [Site_Name] and [Site_URL] for the Application Name and URL respectively.
",
diff --git a/server/lib/accounts.js b/server/lib/accounts.js
index 0f2bfd761a5..946b0b0f67c 100644
--- a/server/lib/accounts.js
+++ b/server/lib/accounts.js
@@ -12,7 +12,53 @@ Accounts.emailTemplates.siteName = RocketChat.settings.get('Site_Name');
Accounts.emailTemplates.from = `${ RocketChat.settings.get('Site_Name') } <${ RocketChat.settings.get('From_Email') }>`;
-Accounts.emailTemplates.notifyAdmin = {};
+Accounts.emailTemplates.userToActivate = {
+ subject() {
+ const subject = TAPi18n.__('Accounts_Admin_Email_Approval_Needed_Subject_Default');
+ const siteName = RocketChat.settings.get('Site_Name');
+
+ return `[${ siteName }] ${ subject }`;
+ },
+
+ html(options = {}) {
+ const header = RocketChat.placeholders.replace(RocketChat.settings.get('Email_Header') || '');
+ const footer = RocketChat.placeholders.replace(RocketChat.settings.get('Email_Footer') || '');
+
+ const email = options.reason ? 'Accounts_Admin_Email_Approval_Needed_With_Reason_Default' : 'Accounts_Admin_Email_Approval_Needed_Default';
+
+ const html = RocketChat.placeholders.replace(TAPi18n.__(email), {
+ name: options.name,
+ email: options.email,
+ reason: options.reason
+ });
+
+ return header + html + footer;
+ }
+};
+
+Accounts.emailTemplates.userActivated = {
+ subject({active, username}) {
+ const action = active ? (username ? 'Activated' : 'Approved') : 'Deactivated';
+ const subject = `Accounts_Email_${ action }_Subject`;
+ const siteName = RocketChat.settings.get('Site_Name');
+
+ return `[${ siteName }] ${ TAPi18n.__(subject) }`;
+ },
+
+ html({active, name, username}) {
+ const header = RocketChat.placeholders.replace(RocketChat.settings.get('Email_Header') || '');
+ const footer = RocketChat.placeholders.replace(RocketChat.settings.get('Email_Footer') || '');
+
+ const action = active ? (username ? 'Activated' : 'Approved') : 'Deactivated';
+
+ const html = RocketChat.placeholders.replace(TAPi18n.__(`Accounts_Email_${ action }`), {
+ name
+ });
+
+ return header + html + footer;
+ }
+};
+
const verifyEmailHtml = Accounts.emailTemplates.verifyEmail.text;
@@ -61,28 +107,6 @@ Accounts.emailTemplates.enrollAccount.html = function(user = {}/*, url*/) {
return header + html + footer;
};
-Accounts.emailTemplates.notifyAdmin.subject = function() {
- const subject = TAPi18n.__('Accounts_Admin_Email_Approval_Needed_Subject_Default');
- const siteName = RocketChat.settings.get('Site_Name');
-
- return `[${ siteName }] ${ subject }`;
-};
-
-Accounts.emailTemplates.notifyAdmin.html = function(options = {}) {
- const header = RocketChat.placeholders.replace(RocketChat.settings.get('Email_Header') || '');
- const footer = RocketChat.placeholders.replace(RocketChat.settings.get('Email_Footer') || '');
-
- const email = options.reason ? 'Accounts_Admin_Email_Approval_Needed_With_Reason_Default' : 'Accounts_Admin_Email_Approval_Needed_Default';
-
- const html = RocketChat.placeholders.replace(TAPi18n.__(email), {
- name: options.name,
- email: options.email,
- reason: options.reason
- });
-
- return header + html + footer;
-};
-
Accounts.onCreateUser(function(options, user = {}) {
RocketChat.callbacks.run('beforeCreateUser', options, user);
@@ -123,8 +147,8 @@ Accounts.onCreateUser(function(options, user = {}) {
RocketChat.models.Roles.findUsersInRole('admin').forEach(adminUser => {
if (Array.isArray(adminUser.emails)) {
- adminUser.emails.forEach(address => {
- destinations.push(`${ adminUser.name }<${ address }>`);
+ adminUser.emails.forEach(email => {
+ destinations.push(`${ adminUser.name }<${ email.address }>`);
});
}
});
@@ -132,8 +156,8 @@ Accounts.onCreateUser(function(options, user = {}) {
const email = {
to: destinations,
from: RocketChat.settings.get('From_Email'),
- subject: Accounts.emailTemplates.notifyAdmin.subject(),
- html: Accounts.emailTemplates.notifyAdmin.html(options)
+ subject: Accounts.emailTemplates.userToActivate.subject(),
+ html: Accounts.emailTemplates.userToActivate.html(options)
};
Meteor.defer(() => Email.send(email));
diff --git a/server/methods/setUserActiveStatus.js b/server/methods/setUserActiveStatus.js
index 47ad26b2f68..58607a65346 100644
--- a/server/methods/setUserActiveStatus.js
+++ b/server/methods/setUserActiveStatus.js
@@ -30,6 +30,19 @@ Meteor.methods({
RocketChat.models.Users.unsetReason(userId);
}
+ const destinations = Array.isArray(user.emails) && user.emails.map(email => `${ user.name || user.username }<${ email.address }>`);
+
+ if (destinations) {
+ const email = {
+ to: destinations,
+ from: RocketChat.settings.get('From_Email'),
+ subject: Accounts.emailTemplates.userActivated.subject({active}),
+ html: Accounts.emailTemplates.userActivated.html({active, name: user.name, username: user.username})
+ };
+
+ Meteor.defer(() => Email.send(email));
+ }
+
return true;
}