import { EmailMessage } from "cloudflare:email"; import { WorkerEntrypoint } from "cloudflare:workers"; import { createMimeMessage } from "mimetext"; const formatEmptyString = (s: string) => s ?? "Not Specified"; interface EmailDetails { fullName: string; organisation: string; email: string; mobile: string; message: string; } export default class SendEmailWorker extends WorkerEntrypoint { async fetch() { return new Response("Unimplemented"); } async sendEmail({ fullName, organisation, email, mobile, message, }: EmailDetails) { const msg = createMimeMessage(); msg.setSender({ name: "Michael Pivato Contact Form", addr: "contact@michaelpivato.dev", }); msg.setRecipient("contact@michaelpivato.dev"); msg.setSubject(`Message from ${fullName ?? email}`); msg.addMessage({ contentType: "text/plain", data: `You've received a new message from ${fullName ?? email}. Full Name: ${formatEmptyString(fullName)} Organisation: ${formatEmptyString(organisation)} Email: ${formatEmptyString(email)} Mobile: ${formatEmptyString(mobile)} Message: ${message}`, }); const cfMessage = new EmailMessage( "contact@michaelpivato.dev", "contact@michaelpivato.dev", msg.asRaw() ); this.ctx.waitUntil(this.env.SEB.send(cfMessage)); } }