chore: import upstream snapshot with attribution
i18n - Build Validation / Validate i18n Builds (24) (push) Has been cancelled
CI - Node.js / Lint (24) (push) Has been cancelled
CI - Node.js / Build (24) (push) Has been cancelled
CI - Node.js / Test (24) (push) Has been cancelled
CI - Node.js / Test - Upcoming Changes (24) (push) Has been cancelled
CI - Node.js / Test - i18n (italian, 24) (push) Has been cancelled
CI - Node.js / Test - i18n (portuguese, 24) (push) Has been cancelled
CD - Docker - GHCR Images / Build and Push Images (push) Has been cancelled
i18n - Build Validation / Validate i18n Builds (24) (push) Has been cancelled
CI - Node.js / Lint (24) (push) Has been cancelled
CI - Node.js / Build (24) (push) Has been cancelled
CI - Node.js / Test (24) (push) Has been cancelled
CI - Node.js / Test - Upcoming Changes (24) (push) Has been cancelled
CI - Node.js / Test - i18n (italian, 24) (push) Has been cancelled
CI - Node.js / Test - i18n (portuguese, 24) (push) Has been cancelled
CD - Docker - GHCR Images / Build and Push Images (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
import nodemailer, { Transporter } from 'nodemailer';
|
||||
|
||||
import { MailProvider, SendEmailArgs } from '../mailer.js';
|
||||
import {
|
||||
EMAIL_PROVIDER,
|
||||
MAILPIT_HOST,
|
||||
SES_SMTP_HOST,
|
||||
SES_SMTP_USERNAME,
|
||||
SES_SMTP_PASSWORD
|
||||
} from '../../utils/env.js';
|
||||
|
||||
export type NodemailerConfig = {
|
||||
host: string;
|
||||
port: number;
|
||||
secure: boolean;
|
||||
auth: { user: string; pass: string };
|
||||
tls?: { rejectUnauthorized: boolean };
|
||||
};
|
||||
|
||||
/**
|
||||
* NodemailerProvider is a wrapper around nodemailer that provides a clean
|
||||
* interface for sending email.
|
||||
*/
|
||||
export class NodemailerProvider implements MailProvider {
|
||||
private transporter: Transporter;
|
||||
|
||||
/**
|
||||
* Sets up nodemailer with the provided configuration.
|
||||
*
|
||||
* @param config - The nodemailer transport configuration.
|
||||
*/
|
||||
constructor(config: NodemailerConfig) {
|
||||
this.transporter = nodemailer.createTransport(config);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends an email using nodemailer.
|
||||
*
|
||||
* @param param Email options.
|
||||
* @param param.to Email address to send to.
|
||||
* @param param.from Email address to send from.
|
||||
* @param param.subject Email subject.
|
||||
* @param param.text Email body (raw text only).
|
||||
* @param param.cc [Optional] Email address to CC.
|
||||
*/
|
||||
async send({ to, from, subject, text, cc }: SendEmailArgs) {
|
||||
await this.transporter.sendMail({
|
||||
from,
|
||||
to,
|
||||
subject,
|
||||
text,
|
||||
cc
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a mail provider based on the EMAIL_PROVIDER environment variable.
|
||||
*/
|
||||
export function createMailProvider(): NodemailerProvider {
|
||||
return EMAIL_PROVIDER === 'ses'
|
||||
? new NodemailerProvider({
|
||||
host: SES_SMTP_HOST,
|
||||
port: 465,
|
||||
secure: true,
|
||||
auth: {
|
||||
user: SES_SMTP_USERNAME ?? '',
|
||||
pass: SES_SMTP_PASSWORD ?? ''
|
||||
}
|
||||
})
|
||||
: new NodemailerProvider({
|
||||
host: MAILPIT_HOST,
|
||||
port: 1025,
|
||||
secure: false,
|
||||
auth: { user: 'test', pass: 'test' },
|
||||
tls: { rejectUnauthorized: false }
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user