Try adding contact form with email
All checks were successful
release / Publish to Cloudflare Pages (push) Successful in 1m33s
All checks were successful
release / Publish to Cloudflare Pages (push) Successful in 1m33s
This commit is contained in:
72
functions/contact.ts
Normal file
72
functions/contact.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
import staticFormsPlugin from "@cloudflare/pages-plugin-static-forms";
|
||||
import { EmailMessage } from "cloudflare:email";
|
||||
|
||||
export const onRequest: PagesFunction = 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 emailMessage = createMimeMessage();
|
||||
// emailMessage.setSender({
|
||||
// name: "Michael Pivato Contact Form",
|
||||
// addr: "contact@michaelpivato.dev",
|
||||
// });
|
||||
// emailMessage.setRecipient("contact@michaelpivato.dev");
|
||||
// emailMessage.setSubject(`Message from ${fullName ?? email}`);
|
||||
// emailMessage.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 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 env.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");
|
||||
},
|
||||
});
|
||||
|
||||
const formatEmptyString = (s: string) => s ?? "Not Specified";
|
||||
13
functions/tsconfig.json
Normal file
13
functions/tsconfig.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "esnext",
|
||||
"module": "NodeNext",
|
||||
"moduleResolution": "nodenext",
|
||||
"lib": [
|
||||
"esnext"
|
||||
],
|
||||
"types": [
|
||||
"@cloudflare/workers-types"
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user