MCPcopy Create free account
hub / github.com/boringstack-xyz/boringstack / send

Method send

apps/api/src/lib/email/providers/smtp.ts:57–90  ·  view source on GitHub ↗
(message: IEmailMessage)

Source from the content-addressed store, hash-verified

55 }
56
57 async send(message: IEmailMessage): Promise<IEmailResult> {
58 validateEmailMessage(message, env.EMAIL_FROM);
59 const recipient = maskEmailForLogging(message.to);
60
61 try {
62 return await retryWithBackoff(async () => {
63 const result = await this.transporter.sendMail({
64 from: env.EMAIL_FROM,
65 to: message.to,
66 subject: message.subject,
67 html: message.html,
68 ...(message.text !== undefined && { text: message.text }),
69 });
70
71 logger.info("Email sent via SMTP", {
72 event: "email_sent",
73 provider: "smtp",
74 messageId: result.messageId,
75 to: recipient,
76 });
77
78 return { id: result.messageId, provider: "smtp" };
79 });
80 } catch (error: unknown) {
81 logger.error("Failed to send email via SMTP", {
82 event: "email_send_failed",
83 provider: "smtp",
84 to: recipient,
85 error: getErrorMessage(error),
86 });
87
88 throw ApiErrors.externalService("Failed to send email via SMTP");
89 }
90 }
91}

Callers 13

sendTemplateNowFunction · 0.45
completeMethod · 0.45
verifyMethod · 0.45
acceptMethod · 0.45
acceptMethod · 0.45
smtp.test.tsFile · 0.45
resend.test.tsFile · 0.45
cloudflare.test.tsFile · 0.45
sendgrid.test.tsFile · 0.45

Calls 6

validateEmailMessageFunction · 0.90
maskEmailForLoggingFunction · 0.90
retryWithBackoffFunction · 0.90
getErrorMessageFunction · 0.90
infoMethod · 0.80
errorMethod · 0.80

Tested by

no test coverage detected