All files mail.ts

28.57% Statements 8/28
100% Branches 0/0
0% Functions 0/2
28.57% Lines 8/28

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 481x     1x   1x   1x 1x 1x           1x   1x                                                            
import nodemailer from "nodemailer";
import type JSONTransport from "nodemailer/lib/json-transport";
import type Mail from "nodemailer/lib/mailer";
import { getLogger } from "./log";
 
const log = getLogger("mail");
 
const devTransporter = nodemailer.createTransport({
  jsonTransport: true,
});
 
/**
 * This outbox traps sent emails during testing (NODE_ENV=test).
 * Access the outbox during testing to assert on sent emails.
 */
export const outbox: JSONTransport.SentMessageInfo[] = [];
 
export function defineMailer(config: {
  host: string;
  port: number;
  secure: boolean;
  auth: {
    user: string;
    pass: string;
  };
}): nodemailer.Transporter {
  return nodemailer.createTransport(config);
}
 
/** Send an email using the configured mailer. */
export async function sendMail(
  mailer: nodemailer.Transporter,
  mailOptions: Mail.Options,
): Promise<void> {
  if (
    process.env.NODE_ENV === "test" ||
    process.env.NODE_ENV === "development"
  ) {
    const result = await devTransporter.sendMail(mailOptions);
    outbox.push(result);
    log.info("email sent to dev outbox -------------", mailOptions);
    log.info(result.envelope);
    log.info(result.message);
    return;
  }
  await mailer.sendMail(mailOptions);
}