J'ai un problème avec mon formulaire de contact dans Next.js, je n'ai aucune erreur (qui sont affichées), tout a fonctionné jusqu'à déploiement (sur Vercel). J'approche mon formulaire et j'ai statut 200, mais je ne reçois pas mon email sur gmail. De plus, je ne recive pas d'informations supplémentaires. J'ai reçu des courriels, quand j'ai testé mon application sur "dev" et "construire". J'ai également une option "moins sécurisée d'applications" dans le compte Gmail.
Voici mon code dans le prochain.js:
méthode d'extraction en contact.js:
fetch("/api/contact", {
method: "POST",
headers: {
Accept: "application/json, text/plain, */*",
"Content-Type": "application/json",
},
body: JSON.stringify({
name: mailName,
email: mailAddress,
text: mailText,
}),
}).then((res) => {
console.log("Fetch: ", res);
res.status === 200
?
router.Push("/success")
: router.Push("/error");
dans API/CONTACT.JS
require("dotenv").config();
const nodemailer = require("nodemailer");
export default (req, res) => {
const { name, email, text } = req.body;
const transporter = nodemailer.createTransport({
service: "gmail",
auth: {
user: process.env.EMAIL,
pass: process.env.PASSWORD,
},
});
const mailOption = {
from: `${email}`,
to: `${process.env.EMAIL}`,
subject: `New mail from ${email}`,
text: `
${name} wrote:
${text}
`,
};
transporter.sendMail(mailOption, (err, data) => {
if (err) {
console.log(err);
} else {
console.log("mail send");
}
});
console.log(name, email, text);
res.send("success");
};
S'il vous plaît aider
Étant donné que votre code fonctionne bien en local et non dans l'environnement de déploiement, j'ai deux suggestions.
Tout d'abord, assurez-vous de disposer de toutes les variables d'environnement.
Deuxièmement, la façon dont vous avez écrit votre code, cela reviendra toujours au succès car transporter.sendMail
est asynchrone et res.send
est en dehors de cela.
Changer comme,
transporter.sendMail(mailOption, (err, data) => {
if (err) {
console.log(err);
res.send("error" + JSON.stringify(err));
} else {
console.log("mail send");
res.send("success");
}
});