import 'std/dotenv/load.ts'; import { helpEmail } from '/lib/utils.ts'; const BREVO_API_KEY = Deno.env.get('BREVO_API_KEY') || ''; enum BrevoTemplateId { BEWCLOUD_VERIFY_EMAIL = 20, } interface BrevoResponse { messageId?: string; code?: string; message?: string; } function getApiRequestHeaders() { return { 'Api-Key': BREVO_API_KEY, 'Accept': 'application/json; charset=utf-8', 'Content-Type': 'application/json; charset=utf-8', }; } interface BrevoRequestBody { templateId?: number; params: Record | null; to: { email: string; name?: string }[]; cc?: { email: string; name?: string }[]; bcc?: { email: string; name?: string }[]; htmlContent?: string; textContent?: string; subject?: string; replyTo: { email: string; name?: string }; tags?: string[]; attachment?: { name: string; content: string; url: string }[]; } async function sendEmailWithTemplate( to: string, templateId: BrevoTemplateId, data: BrevoRequestBody['params'], attachments: BrevoRequestBody['attachment'] = [], cc?: string, ) { const email: BrevoRequestBody = { templateId, params: data, to: [{ email: to }], replyTo: { email: helpEmail }, }; if (attachments?.length) { email.attachment = attachments; } if (cc) { email.cc = [{ email: cc }]; } const brevoResponse = await fetch('https://api.brevo.com/v3/smtp/email', { method: 'POST', headers: getApiRequestHeaders(), body: JSON.stringify(email), }); const brevoResult = (await brevoResponse.json()) as BrevoResponse; if (brevoResult.code || brevoResult.message) { console.log(JSON.stringify({ brevoResult }, null, 2)); throw new Error(`Failed to send email "${templateId}"`); } } export async function sendVerifyEmailEmail( email: string, verificationCode: string, ) { const data = { verificationCode, }; await sendEmailWithTemplate(email, BrevoTemplateId.BEWCLOUD_VERIFY_EMAIL, data); }