import { Meteor } from 'meteor/meteor'; import nodemailer from 'nodemailer'; import MailTime from 'meteor/ostrio:mailer'; import i18n from 'i18next'; import isMaster from './isMaster'; const transports = []; // First transport const fstTransport = nodemailer.createTransport(Meteor.settings.private.MAIL_URL); transports.push(fstTransport); // console.log(fstTransport.options.auth.user); const db = Meteor.users.rawDatabase(); // new Mongo.Collection('__mailTimeQueue__').rawDatabase(); // https://litmus.com/community/discussions/4633-is-there-a-reliable-1px-horizontal-rule-method export const hr = `
`; let MailQueue; export const isMailServerMaster = Meteor.settings.private.isMailServer && isMaster(); if (isMailServerMaster) { console.log('I\'m the mail server'); MailQueue = new MailTime({ db, type: 'client', // instead of 'server' for now to avoid use the JosK task manager at 250ms, we use our cron // see https://github.com/VeliovGroup/Mail-Time/issues/5 strategy: 'balancer', // Transports will be used in round robin chain transports, from(transport) { // To pass spam-filters `from` field should be correctly set // for each transport, check `transport` object for more options if (!Meteor.isProduction) { // only for test purposes return `${i18n.t('AppName')} `; } return `${i18n.t('AppName')} <${transport.options.auth.user}>`; }, debug: Meteor.settings.private.debugMailer, concatEmails: true, // Concatenate emails to the same addressee concatSubject: `${i18n.t('Nuevas notificaciones de {{app}}', { app: i18n.t('AppName') })}`, /* eslint-disable */ concatDelimiter: hr + '

{{{subject}}}

', // Start each concatenated email with it's own subject /* eslint-enable */ // concatThrottling: 30, // Mail-Time 2.x removed the static MailTime.Template; omitting `template` // uses the built-in default ('{{{html}}}'). (debt: richer wrapper template) }); } else { console.log('I\'m a mail client'); MailQueue = new MailTime({ db, type: 'client', debug: Meteor.settings.private.debugMailer, strategy: 'balancer', // Transports will be used in round robin chain concatEmails: true // Concatenate emails to the same address }); } export default function sendMail(opts, debug) { if (debug) { MailQueue.sendMail(opts, (err, info) => { if (err) { console.error(err); } else { console.log(info); } }); } else { MailQueue.sendMail(opts); } } if (Meteor.settings.private.testMailer) { const emailOpts = { to: Meteor.settings.private.testEmail, userName: 'someone', sendAt: new Date(), subject: 'Some new notification', text: 'Plain text message', template: '{{appName}}

{{{subject}}}

{{{html}}}', appName: i18n.t('AppName'), html: '

Styled message

' }; sendMail(emailOpts, true); sendMail(emailOpts, true); sendMail(emailOpts, true); sendMail(emailOpts, true); } export const sendEmailsFromQueue = () => { MailQueue.___send(() => { }); };