All checks were successful
release / Publish to Cloudflare Pages (push) Successful in 1m20s
56 lines
1.9 KiB
TypeScript
56 lines
1.9 KiB
TypeScript
import staticFormsPlugin from "@cloudflare/pages-plugin-static-forms";
|
|
import { EmailMessage } from "cloudflare:email";
|
|
|
|
const formatEmptyString = (s: string) => s ?? "Not Specified";
|
|
|
|
export const onRequest: PagesFunction = (context) => {
|
|
// Wrap static forms plugin so we can extract the env to use email routing
|
|
return staticFormsPlugin({
|
|
respondWith: async ({ formData }) => {
|
|
const fullName = formData.get("name");
|
|
const organisation = formData.get("org") ?? "Unknown Organisation";
|
|
const email = formData.get("email");
|
|
const mobile = formData.get("mobile") ?? "Unknown Mobile";
|
|
const message = formData.get("message");
|
|
|
|
// Must have some kind of identifiable information for me to actually care about them.
|
|
if ((fullName || email) && message) {
|
|
const rawEmailMessage = `----
|
|
From: Michael Pivato Contact Form <contact@michaelpivato.dev>
|
|
To: Michael Pivato <contact@michaelpivato.dev
|
|
Subject: Message from ${fullName ?? email}
|
|
|
|
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",
|
|
rawEmailMessage
|
|
);
|
|
|
|
try {
|
|
await (context.env as any).SEB.send(cfMessage);
|
|
} catch (e) {
|
|
return new Response(e.message);
|
|
}
|
|
|
|
console.log("Full Name: " + fullName ?? "fullname");
|
|
console.log("Organisation: " + organisation);
|
|
console.log("Email: " + email ?? "email");
|
|
console.log("Mobile: " + mobile ?? "mobile");
|
|
console.log("Message: " + message);
|
|
}
|
|
|
|
return Response.redirect("https://michaelpivato.dev");
|
|
},
|
|
})(context);
|
|
};
|