|
|
|
@ -1,6 +1,57 @@ |
|
|
|
|
import moment from 'moment'; |
|
|
|
|
import s from 'underscore.string'; |
|
|
|
|
|
|
|
|
|
function getEmailContent({ messageContent, message, user, room }) { |
|
|
|
|
const lng = user && user.language || RocketChat.settings.get('language') || 'en'; |
|
|
|
|
|
|
|
|
|
const roomName = `#${ RocketChat.settings.get('UI_Allow_room_names_with_special_chars') ? room.fname || room.name : room.name }`; |
|
|
|
|
|
|
|
|
|
const userName = RocketChat.settings.get('UI_Use_Real_Name') ? message.u.name || message.u.username : message.u.username; |
|
|
|
|
|
|
|
|
|
const header = TAPi18n.__(room.t === 'd' ? 'User_sent_a_message_to_you' : 'User_sent_a_message_on_channel', { |
|
|
|
|
username: userName, |
|
|
|
|
channel: roomName, |
|
|
|
|
lng |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
if (messageContent) { |
|
|
|
|
return `${ header }<br/><br/>${ messageContent }`; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (message.file) { |
|
|
|
|
const fileHeader = TAPi18n.__(room.t === 'd' ? 'User_uploaded_a_file_to_you' : 'User_uploaded_a_file_on_channel', { |
|
|
|
|
username: userName, |
|
|
|
|
channel: roomName, |
|
|
|
|
lng |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
let content = `${ TAPi18n.__('Attachment_File_Uploaded') }: ${ message.file.name }`; |
|
|
|
|
|
|
|
|
|
if (message.attachments && message.attachments.length === 1 && message.attachments[0].description !== '') { |
|
|
|
|
content += `<br/><br/>${ message.attachments[0].description }`; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return `${ fileHeader }<br/><br/>${ content }`; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (message.attachments.length > 0) { |
|
|
|
|
const [ attachment ] = message.attachments; |
|
|
|
|
|
|
|
|
|
let content = ''; |
|
|
|
|
|
|
|
|
|
if (attachment.title) { |
|
|
|
|
content += `${ attachment.title }<br/>`; |
|
|
|
|
} |
|
|
|
|
if (attachment.text) { |
|
|
|
|
content += `${ attachment.text }<br/>`; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return `${ header }<br/><br/>${ content }`; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return header; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
RocketChat.callbacks.add('afterSaveMessage', function(message, room) { |
|
|
|
|
// skips this callback if the message was edited
|
|
|
|
|
if (message.editedAt) { |
|
|
|
@ -26,8 +77,11 @@ RocketChat.callbacks.add('afterSaveMessage', function(message, room) { |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const divisorMessage = '<hr style="margin: 20px auto; border: none; border-bottom: 1px solid #dddddd;">'; |
|
|
|
|
let messageHTML = s.escapeHTML(message.msg); |
|
|
|
|
|
|
|
|
|
let messageHTML; |
|
|
|
|
|
|
|
|
|
if (message.msg !== '') { |
|
|
|
|
messageHTML = s.escapeHTML(message.msg); |
|
|
|
|
message = RocketChat.callbacks.run('renderMessage', message); |
|
|
|
|
if (message.tokens && message.tokens.length > 0) { |
|
|
|
|
message.tokens.forEach((token) => { |
|
|
|
@ -35,10 +89,11 @@ RocketChat.callbacks.add('afterSaveMessage', function(message, room) { |
|
|
|
|
messageHTML = messageHTML.replace(token.token, token.text); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
messageHTML = messageHTML.replace(/\n/gm, '<br/>'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const header = RocketChat.placeholders.replace(RocketChat.settings.get('Email_Header') || ''); |
|
|
|
|
let footer = RocketChat.placeholders.replace(RocketChat.settings.get('Email_Footer') || ''); |
|
|
|
|
messageHTML = messageHTML.replace(/\n/gm, '<br/>'); |
|
|
|
|
|
|
|
|
|
const usersToSendEmail = {}; |
|
|
|
|
if (room.t === 'd') { |
|
|
|
@ -166,11 +221,17 @@ RocketChat.callbacks.add('afterSaveMessage', function(message, room) { |
|
|
|
|
} |
|
|
|
|
user.emails.some((email) => { |
|
|
|
|
if (email.verified) { |
|
|
|
|
const content = getEmailContent({ |
|
|
|
|
messageContent: messageHTML, |
|
|
|
|
message, |
|
|
|
|
user, |
|
|
|
|
room |
|
|
|
|
}); |
|
|
|
|
email = { |
|
|
|
|
to: email.address, |
|
|
|
|
from: RocketChat.settings.get('From_Email'), |
|
|
|
|
subject: emailSubject, |
|
|
|
|
html: header + messageHTML + divisorMessage + (linkByUser[user._id] || defaultLink) + footer |
|
|
|
|
html: header + content + divisorMessage + (linkByUser[user._id] || defaultLink) + footer |
|
|
|
|
}; |
|
|
|
|
// If direct reply enabled, email content with headers
|
|
|
|
|
if (RocketChat.settings.get('Direct_Reply_Enable')) { |
|
|
|
|