The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/packages/rocketchat-lib/server/lib/sendEmailOnMessage.js

90 lines
2.5 KiB

RocketChat.callbacks.add('afterSaveMessage', function(message, room) {
// skips this callback if the message was edited
if (message.editedAt) {
return message;
}
var emailSubject, usersToSendEmail = {};
if (room.t === 'd') {
usersToSendEmail[message.rid.replace(message.u._id, '')] = 1;
emailSubject = TAPi18n.__("Offline_DM_Email", {
site: RocketChat.settings.get('Site_Name'),
user: message.u.username
});
} else {
if (message.mentions) {
message.mentions.forEach(function(mention) {
return usersToSendEmail[mention._id] = 1;
});
}
emailSubject = TAPi18n.__("Offline_Mention_Email", {
site: RocketChat.settings.get('Site_Name'),
user: message.u.username,
room: room.name
});
}
// code duplicate of packages/rocketchat-ui-message/message/message.coffee
message.html = s.escapeHTML(message.msg);
message = RocketChat.callbacks.run('renderMessage', message);
if (message.tokens && message.tokens.length > 0) {
message.tokens.forEach((token) => {
token.text = token.text.replace(/([^\$])(\$[^\$])/gm, '$1$$$2');
message.html = message.html.replace(token.token, token.text);
});
}
message.html = message.html.replace(/\n/gm, '<br/>');
RocketChat.models.Subscriptions.findWithSendEmailByRoomId(room._id).forEach((sub) => {
switch (sub.emailNotifications) {
case 'all':
usersToSendEmail[sub.u._id] = 'force';
break;
case 'mentions':
if (usersToSendEmail[sub.u._id]) {
usersToSendEmail[sub.u._id] = 'force';
}
break;
case 'nothing':
delete usersToSendEmail[sub.u._id];
break;
case 'default':
break;
}
});
userIdsToSendEmail = Object.keys(usersToSendEmail);
if (userIdsToSendEmail.length > 0) {
var usersOfMention = RocketChat.models.Users.getUsersToSendOfflineEmail(userIdsToSendEmail).fetch();
if (usersOfMention && usersOfMention.length > 0) {
usersOfMention.forEach((user) => {
if (user.settings && user.settings.preferences && user.settings.preferences.emailNotificationMode && user.settings.preferences.emailNotificationMode === 'disabled' && usersToSendEmail[user._id] !== 'force') {
return;
}
user.emails.some((email) => {
if (email.verified) {
var email = {
to: email.address,
from: RocketChat.settings.get('From_Email'),
subject: emailSubject,
html: "&gt; " + message.html
};
Email.send(email);
return true;
}
});
});
}
}
return message;
}, RocketChat.callbacks.priority.LOW);