/* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-return */ import path from 'path' import Email from 'email-templates' import i18n from 'i18n' import { createTransport } from 'nodemailer' import { CONFIG } from '@/config' import { backendLogger as logger } from '@/server/logger' export const sendEmailTranslated = async ({ receiver, template, locals, }: { receiver: { to: string cc?: string } template: string locals: Record }): Promise | boolean | null> => { // TODO: test the calling order of 'i18n.setLocale' for example: language of logging 'en', language of email receiver 'es', reset language of current user 'de' if (!CONFIG.EMAIL) { logger.info(`Emails are disabled via config...`) return null } // because language of receiver can differ from language of current user who triggers the sending // const rememberLocaleToRestore = i18n.getLocale() i18n.setLocale('en') // for logging logger.info( `send Email: language=${locals.locale as string} to=${receiver.to}` + (receiver.cc ? `, cc=${receiver.cc}` : '') + `, subject=${i18n.__('emails.' + template + '.subject')}`, ) if (CONFIG.EMAIL_TEST_MODUS) { logger.info( `Testmodus=ON: change receiver from ${receiver.to} to ${CONFIG.EMAIL_TEST_RECEIVER}`, ) receiver.to = CONFIG.EMAIL_TEST_RECEIVER } const transport = createTransport({ host: CONFIG.EMAIL_SMTP_URL, port: CONFIG.EMAIL_SMTP_PORT, secure: false, // true for 465, false for other ports requireTLS: CONFIG.EMAIL_TLS, auth: { user: CONFIG.EMAIL_USERNAME, pass: CONFIG.EMAIL_PASSWORD, }, }) i18n.setLocale(locals.locale as string) // for email // TESTING: see 'README.md' const email = new Email({ message: { from: `Gradido (${i18n.__('emails.general.doNotAnswer')}) <${CONFIG.EMAIL_SENDER}>`, }, transport, preview: false, // i18n, // is only needed if you don't install i18n }) const resultSend = await email .send({ template: path.join(__dirname, 'templates', template), message: { ...receiver, attachments: [ { filename: 'gradido-header.jpeg', path: path.join(__dirname, 'templates/includes/gradido-header.jpeg'), cid: 'gradidoheader', }, { filename: 'facebook-icon.png', path: path.join(__dirname, 'templates/includes/facebook-icon.png'), cid: 'facebookicon', }, { filename: 'telegram-icon.png', path: path.join(__dirname, 'templates/includes/telegram-icon.png'), cid: 'telegramicon', }, { filename: 'twitter-icon.png', path: path.join(__dirname, 'templates/includes/twitter-icon.png'), cid: 'twittericon', }, { filename: 'youtube-icon.png', path: path.join(__dirname, 'templates/includes/youtube-icon.png'), cid: 'youtubeicon', }, ], }, locals, // the 'locale' in here seems not to be used by 'email-template', because it doesn't work if the language isn't set before by 'i18n.setLocale' }) .catch((error: unknown) => { logger.error('Error sending notification email', error) return false }) return resultSend }