Skip to content
Snippets Groups Projects
Commit b8be58d3 authored by Diego Sampaio's avatar Diego Sampaio
Browse files

offline emails refactor

parent 2e4ef5bc
No related branches found
No related tags found
No related merge requests found
......@@ -47,6 +47,7 @@ Package.onUse(function(api) {
api.addFiles('server/lib/roomTypes.coffee', 'server');
api.addFiles('server/lib/sendNotificationsOnMessage.js', 'server');
api.addFiles('server/lib/notifyUsersOnMessage.js', 'server');
api.addFiles('server/lib/sendEmailOnMessage.js', 'server');
// SERVER MODELS
api.addFiles('server/models/_Base.coffee', 'server');
......
RocketChat.callbacks.add('afterSaveMessage', function(message, room) {
var emailSubject, mentionIds = [];
if (room.t === 'd') {
mentionIds.push(message.rid.replace(message.u._id, ''));
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 mentionIds.push(mention._id);
});
}
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/>');
if (mentionIds.length > 0) {
var usersOfMention = RocketChat.models.Users.getUsersToSendOfflineEmail(mentionIds).fetch();
if (usersOfMention && usersOfMention.length > 0) {
usersOfMention.forEach((user) => {
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);
......@@ -268,3 +268,23 @@ RocketChat.models.Users = new class extends RocketChat.models._Base
verified: false
return @remove query
###
Find users to send a message by email if:
- he is not online
- has a verified email
- has not disabled email notifications
###
getUsersToSendOfflineEmail: (usersIds) ->
query =
_id:
$in: usersIds
status: 'offline'
statusConnection:
$ne: 'online'
'emails.verified': true
'settings.preferences.emailNotificationMode':
$ne: 'disabled'
return @find query, { fields: { emails: 1 } }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment