offline emails refactor

pull/2198/head
Diego Sampaio 10 years ago
parent 2e4ef5bc70
commit b8be58d303
  1. 1
      packages/rocketchat-lib/package.js
  2. 62
      packages/rocketchat-lib/server/lib/sendEmailOnMessage.js
  3. 20
      packages/rocketchat-lib/server/models/Users.coffee

@ -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');

@ -0,0 +1,62 @@
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 } }

Loading…
Cancel
Save