<Formik
initialValues={{
fullName: "",
phoneNumber: "",
email: "",
message: "",
}}
validationSchema={Yup.object({
fullName: Yup.string().required("Required"),
phoneNumber: Yup.string().required("Required"),
email: Yup.string()
.email("Invalid email address")
.required("Required"),
message: Yup.string().required("Required"),
})}
onSubmit={async (values, { setSubmitting, resetForm }) => {
try {
const response = await fetch("/api/sendEmail", {
// Adjusted path here
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(values),
});
if (!response.ok) {
throw new Error("Failed to send email");
}
setShowSuccessMessage(true);
setTimeout(() => {
setShowSuccessMessage(false);
}, 5000);
resetForm();
} catch (error) {
console.error("Error sending email:", error);
} finally {
setSubmitting(false);
}
}}
>
{(formik) => (
<Form >
<div className="pb-3">
<Field
type="text"
name="fullName"
placeholder="Full Name"
className="form-input space-y-2 pt-15px lg:pt-20px w-full h-12 px-5 py-10px placeholder-white text-white"
style={{ backgroundColor: '#0c3863',border: '1.5px solid white'}}
/>
<ErrorMessage
name="fullName"
component="div"
className="text-red-600"
style={{color: "red"}}
/>
</div>
<div className="pb-3">
<Field
type="text"
name="phoneNumber"
placeholder="Phone Number"
className="form-input space-y-2 pt-15px lg:pt-20px w-full h-12 px-5 py-10px placeholder-white text-white "
style={{ backgroundColor: '#0c3863',border: '1.5px solid white'}}
/>
<ErrorMessage
name="phoneNumber"
component="div"
className="text-red-600"
style={{color: "red"}}
/>
</div>
<div className="pb-3">
<Field
type="email"
name="email"
placeholder="Email"
className="form-input space-y-2 pt-10px lg:pt-15px w-full h-12 px-5 py-10px placeholder-white text-white"
style={{ backgroundColor: '#0c3863',border: '1.5px solid white'}}
/>
<ErrorMessage
name="email"
component="div"
className="text-red-600"
style={{color: "red"}}
/>
</div>
<div className="pb-3">
<Field
as="textarea"
name="message"
placeholder="Message"
className="form-textarea w-full pt-15px lg:pt-20px placeholder-white px-5 py-30px text-white"
style={{ backgroundColor: '#0c3863',border: '1.5px solid white'}}
/>
<ErrorMessage
name="message"
component="div"
className="text-red-600"
style={{color: "red"}}
/>
</div>
<Button
type="submit"
disabled={formik.isSubmitting}
className="btn"
size={"large"} colorTheme="blue1" uppercase
>
Enquire now
</Button>
</Form>
)}
</Formik>
{showSuccessMessage && (
<div className="success-message flex items-center text-white text-sm font-bold py-3" >
Message sent successfully!
</div>
)}
</div>
在我的页面/API中,我有sendemail.ts file
现在我正在使用mailtrap.
import { NextApiRequest, NextApiResponse } from 'next';
import nodemailer from 'nodemailer';
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
if (req.method !== 'POST') {
return res.status(405).end(); // Method Not Allowed
}
try {
const { fullName, phoneNumber, email, message } = req.body;
const transporter = nodemailer.createTransport({
host: 'sandbox.smtp.mailtrap.io',
port: 2525,
auth: {
user: '543c2217cf0f8b',
pass: '5rthae759cd4c0',
},
});
await transporter.sendMail({
from: '[email protected]',
to: '[email protected]',
subject: 'New contact form submission',
html: `
<p>Full Name: ${fullName}</p>
<p>Phone Number: ${phoneNumber}</p>
<p>Email: ${email}</p>
<p>Message: ${message}</p>
`,
});
res.status(200).json({ message: 'Email sent successfully' });
} catch (error) {
console.error('Error sending email:', error);
res.status(500).json({ error: 'An error occurred while sending the email' });
}
}
当我在本地测试时,它可以完美地完成表单验证并发送电子邮件。
我在我的实时服务器上没有任何更改。但是,每当我试图将其转移到我的生产中,它都会给我
mydomain.com/api/sendEmail not found.
由于我是Nectjs的新手,我正在努力寻找问题在哪里...
首先,您可以提供您遇到的错误,而我的猜测是文件名,请尝试在生产服务器上进行仔细检查。
TROTY测试如果使用Postman存在终点,并且如果不是终点,则可能只是文件名[sendemail.ts]。
您找到解决方案吗?有同样的问题。