foxes
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
import nodemailer from "nodemailer";
|
||||
import { AppSetting } from "../entities/AppSetting.js";
|
||||
|
||||
type MailSettings = Pick<AppSetting, 'smtpHost' | 'smtpPort' | 'smtpSecure' | 'smtpUser' | 'smtpPassword' | 'smtpFromName' | 'smtpFromEmail' | 'appName'>;
|
||||
|
||||
const normalizePort = (value: number | null | undefined) => {
|
||||
const port = Number(value ?? 0);
|
||||
return Number.isFinite(port) && port > 0 ? port : 587;
|
||||
};
|
||||
|
||||
export const resolveSmtpSecurity = (settings: Pick<AppSetting, 'smtpPort' | 'smtpSecure'>) => {
|
||||
const port = normalizePort(settings.smtpPort);
|
||||
const wantsSecure = Boolean(settings.smtpSecure);
|
||||
const secure = port === 465 ? true : wantsSecure && port !== 587;
|
||||
const requireTLS = port === 587 || (!secure && wantsSecure);
|
||||
return { port, secure, requireTLS };
|
||||
};
|
||||
|
||||
export const createSmtpTransport = (settings: MailSettings) => {
|
||||
const security = resolveSmtpSecurity(settings);
|
||||
return nodemailer.createTransport({
|
||||
host: settings.smtpHost ?? undefined,
|
||||
port: security.port,
|
||||
secure: security.secure,
|
||||
requireTLS: security.requireTLS,
|
||||
auth: settings.smtpUser ? { user: settings.smtpUser, pass: settings.smtpPassword ?? '' } : undefined
|
||||
});
|
||||
};
|
||||
|
||||
export const formatFromAddress = (settings: Pick<AppSetting, 'smtpFromName' | 'smtpFromEmail'>) => {
|
||||
if (!settings.smtpFromEmail) return '';
|
||||
return settings.smtpFromName
|
||||
? `"${settings.smtpFromName}" <${settings.smtpFromEmail}>`
|
||||
: settings.smtpFromEmail;
|
||||
};
|
||||
|
||||
export const describeSmtpMode = (settings: Pick<AppSetting, 'smtpPort' | 'smtpSecure'>) => {
|
||||
const { port, secure, requireTLS } = resolveSmtpSecurity(settings);
|
||||
if (secure) return `implicit TLS on port ${port}`;
|
||||
if (requireTLS) return `STARTTLS on port ${port}`;
|
||||
return `plain/upgrade connection on port ${port}`;
|
||||
};
|
||||
Reference in New Issue
Block a user