import { Theme } from "next-auth"; import { SendVerificationRequestParams } from "next-auth/providers"; import { createTransport } from "nodemailer"; export default async function sendVerificationRequest( params: SendVerificationRequestParams ) { const { identifier, url, provider, theme } = params; const { host } = new URL(url); const transport = createTransport(provider.server); const result = await transport.sendMail({ to: identifier, from: provider.from, subject: `Sign in to ${host}`, text: text({ url, host }), html: html({ url, host, theme }), }); const failed = result.rejected.concat(result.pending).filter(Boolean); if (failed.length) { throw new Error(`Email (${failed.join(", ")}) could not be sent`); } } function html(params: { url: string; host: string; theme: Theme }) { const { url, host, theme } = params; const escapedHost = host.replace(/\./g, "​."); const brandColor = theme.brandColor || "#0029cf"; const color = { background: "#f9f9f9", text: "#444", mainBackground: "#fff", buttonBackground: brandColor, buttonBorder: brandColor, buttonText: theme.buttonText || "#fff", }; return `
Sign in to ${escapedHost}
Sign in
If you did not request this email you can safely ignore it.
`; } /** Email Text body (fallback for email clients that don't render HTML, e.g. feature phones) */ function text({ url, host }: { url: string; host: string }) { return `Sign in to ${host}\n${url}\n\n`; }