diff --git a/mail-worker/src/template/email-msg.js b/mail-worker/src/template/email-msg.js index 57b856a..8bdb885 100644 --- a/mail-worker/src/template/email-msg.js +++ b/mail-worker/src/template/email-msg.js @@ -1,39 +1,62 @@ import emailUtils from '../utils/email-utils'; +const TELEGRAM_MESSAGE_LIMIT = 3500; +const TRUNCATED_SUFFIX = '...'; + +function escapeHtml(text = '') { + return text + .replace(//g, '>'); +} + +function truncateText(text, maxLength) { + if (!text || text.length <= maxLength) { + return text || ''; + } + + if (maxLength <= TRUNCATED_SUFFIX.length) { + return TRUNCATED_SUFFIX.slice(0, maxLength); + } + + return text.slice(0, maxLength - TRUNCATED_SUFFIX.length) + TRUNCATED_SUFFIX; +} + export default function emailMsgTemplate(email, tgMsgTo, tgMsgFrom, tgMsgText) { - let template = `${email.subject}` + let template = `${escapeHtml(email.subject || '')}` if (tgMsgFrom === 'only-name') { template += ` -From\u200B:${email.name}` +From\u200B:${escapeHtml(email.name || '')}` } if (tgMsgFrom === 'show') { template += ` -From\u200B:${email.name} <${email.sendEmail}>` +From\u200B:${escapeHtml(email.name || '')} <${escapeHtml(email.sendEmail || '')}>` } if(tgMsgTo === 'show' && tgMsgFrom === 'hide') { template += ` -To:\u200B${email.toEmail}` +To:\u200B${escapeHtml(email.toEmail || '')}` } else if(tgMsgTo === 'show') { template += ` -To:\u200B${email.toEmail}` +To:\u200B${escapeHtml(email.toEmail || '')}` } - const text = (emailUtils.formatText(email.text) || emailUtils.htmlToText(email.content)) - .replace(//g, '>'); + const text = escapeHtml(emailUtils.formatText(email.text) || emailUtils.htmlToText(email.content)); if(tgMsgText === 'show') { + const prefix = `${template} + +`; + const maxTextLength = Math.max(0, TELEGRAM_MESSAGE_LIMIT - prefix.length); template += ` -${text}` +${truncateText(text, maxTextLength)}` } return template;