import nodemailer from 'nodemailer' import { SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, SMTP_FROM, MAILSHIP_NAME, BASE_URL } from './env.js' import type { Subscription } from './alert.js' import { render } from './templates.js' const secure = Number(SMTP_PORT) === 465 const transporter = nodemailer.createTransport({ host: SMTP_HOST, port: Number(SMTP_PORT), secure, requireTLS: !secure, auth: { user: SMTP_USER, pass: SMTP_PASSWORD, }, }) export const sendConfirm = (sub: Subscription) => { const href = `${BASE_URL}/confirm?token=${sub.key}` return transporter .sendMail({ from: SMTP_FROM, to: sub.email, subject: 'Confirm your email digest', html: `

Welcome to ${MAILSHIP_NAME}!

Please confirm that you would like to receive ${sub.frequency} digests by clicking the link below:

Confirm Digest

`, text: `Please confirm that you would like to receive ${sub.frequency} digests by visiting: ${href}`, }) .catch(error => { console.error('mailer: confirmation email failed', { to: sub.email, smtp: { host: SMTP_HOST, port: SMTP_PORT }, error: error?.message || error, }) throw error }) } export const sendDigest = async (sub: Subscription, variables: Record) => { return transporter .sendMail({ from: SMTP_FROM, to: sub.email, subject: 'New activity', html: await render('emails/digest.mjml', { ...variables, name: sub.email.split('@')[0], unsubscribeUrl: `${BASE_URL}/unsubscribe?token=${sub.key}`, }), }) .catch(error => { console.error('mailer: digest email failed', { to: sub.email, smtp: { host: SMTP_HOST, port: SMTP_PORT }, error: error?.message || error, }) throw error }) }