import path from 'path'; import moment from 'moment'; import { Random } from 'meteor/random'; import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; import mkdirp from 'mkdirp'; import * as Mailer from '../../app/mailer'; import { Messages, Users } from '../../app/models/server'; import { settings } from '../../app/settings/server'; import { Message } from '../../app/ui-utils/server'; import { exportRoomMessagesToFile, copyFile, getRoomData, makeZipFile, sendEmail, uploadZipFile, } from '../../app/user-data-download/server/cronProcessDownloads'; import { IUser } from '../../definition/IUser'; import { getMomentLocale } from './getMomentLocale'; type ExportEmail = { rid: string; toUsers: string[]; toEmails: string[]; subject: string; messages: string[]; language: string; } type ExportFile = { rid: string; dateFrom: Date; dateTo: Date; format: 'html' | 'json'; } type ExportInput = { type: 'email'; data: ExportEmail; } | { type: 'file'; data: ExportFile; }; type ISentViaEmail = { missing: string[]; }; export const sendViaEmail = (data: ExportEmail, user: IUser): ISentViaEmail => { const emails = data.toEmails.map((email) => email.trim()).filter(Boolean); const missing = [...data.toUsers].filter(Boolean); Users.findUsersByUsernames(data.toUsers, { fields: { username: 1, 'emails.address': 1 } }).forEach((user: IUser) => { const emailAddress = user.emails?.[0].address; if (!emailAddress) { return; } if (!Mailer.checkAddressFormat(emailAddress)) { throw new Error('error-invalid-email'); } const found = missing.indexOf(String(user.username)); if (found !== -1) { missing.splice(found, 1); } emails.push(emailAddress); }); const email = user.emails?.[0]?.address; const lang = data.language || user.language || 'en'; const localMoment = moment(); if (lang !== 'en') { const localeFn = getMomentLocale(lang); if (localeFn) { Function(localeFn).call({ moment }); localMoment.locale(lang); } } const html = Messages.findByRoomIdAndMessageIds(data.rid, data.messages, { sort: { ts: 1 }, }).fetch().map(function(message: any) { const dateTime = moment(message.ts).locale(lang).format('L LT'); return `
${ message.u.username } ${ dateTime }
${ Message.parse(message, data.language) }