Je dirais que le problème est lié à cette question.
Retournez dans vos deux dernières return NextResponse...
調(diào)用在transporter.sendMail()
回調(diào)內(nèi)部,所以它們不會從POST()
fonctions.
Utilisez la capacité de Nodemailer à renvoyer des promesses au lieu d'utiliser les fonctions de rappel...
try { await transporter.sendMail(mailOptions); return NextResponse.json( { message: "郵件發(fā)送成功!" }, { status: 200 }, ); } catch (err) { return NextResponse.json({ message: err.toString() }, { status: 500 }); }
Une autre approche consiste à convertir le rappel du Nodemailer en promesse, même si ce n'est pas assez concis à mon avis
return new Promise((resolve) => { transporter.sendMail(mailOptions, (err) => { const status = err ? 500 : 200; const message = err?.toString() ?? "郵件發(fā)送成功!"; resolve(NextResponse.json({ message }, { status })); }); });