如何用Nodemailer实现网站联系表单的客户自动回复功能?
实现Nodemailer自动发送客户回复邮件
嘿,这个需求其实很简单,你只需要在现有发送表单内容到你邮箱的逻辑之后,新增一段发送回复邮件给客户的代码就行。核心就是创建第二个邮件配置对象,指定收件人为客户填写的邮箱,内容设置成你想要的感谢语。
我把你的代码修改并补全了,直接替换原来的router.post('/contact/send'...)部分就行:
router.post('/contact/send', async function(req, res) { // 初始化邮件传输器(和你原来的配置一致) var transporter = nodeMailer.createTransport({ service: 'Gmail', auth: { user: process.env.GMAIL_USER, pass: process.env.GMAIL_PASS } }); // 1. 发送客户留言到你的邮箱(保留你原来的核心逻辑,补全了邮件内容) const adminMailOptions = { from: `${req.body.name} <${req.body.email}>`, // 显示发件人为客户的姓名+邮箱,方便你直接回复 to: process.env.GMAIL_USER, // 你的目标邮箱 subject: `新留言:来自 ${req.body.name}`, text: `客户姓名:${req.body.name}\n客户邮箱:${req.body.email}\n留言内容:\n${req.body.message}`, html: `<p><strong>客户姓名:</strong>${req.body.name}</p> <p><strong>客户邮箱:</strong>${req.body.email}</p> <p><strong>留言内容:</strong></p> <p>${req.body.message}</p>` }; // 2. 发送自动回复给客户的邮件配置 const replyMailOptions = { from: `你的网站名称 <${process.env.GMAIL_USER}>`, // 用你的邮箱作为发件人,避免被当作垃圾邮件 to: req.body.email, // 客户填写的邮箱地址,从表单请求中获取 subject: '感谢你的留言!', text: '感谢您的留言,我会尽快回复', html: '<p>感谢您的留言,我会尽快回复</p>' }; try { // 先发送给你自己的邮件,再发送客户回复 await transporter.sendMail(adminMailOptions); await transporter.sendMail(replyMailOptions); // 发送成功后,跳转到联系页并带上成功标识,方便前端提示用户 res.redirect('/contact?success=true'); } catch (error) { // 捕获发送失败的错误,打印日志方便排查 console.error('邮件发送失败:', error); // 跳转回联系页并带上错误标识 res.redirect('/contact?error=true'); } });
几个关键注意点:
- 我用了
async/await来处理异步的邮件发送逻辑,比嵌套回调更清晰易读,Node.js 8及以上版本都支持这个特性 - 回复邮件的
from字段一定要用你自己的邮箱(也就是process.env.GMAIL_USER),如果用客户的邮箱作为发件人,很大概率会被邮箱服务商判定为垃圾邮件 - 要确保你的表单里有让客户填写邮箱的字段,并且后端能通过
req.body.email正确获取到这个值 - 如果你的Gmail账号开启了两步验证,记得要用App Password代替普通密码,否则会验证失败;如果没开两步验证,需要在Gmail设置里开启“低安全性应用访问”(更推荐用App Password)
- 你可以自定义回复邮件的HTML内容,比如加上你的网站logo、联系方式,或者更详细的提示语
内容的提问来源于stack exchange,提问作者Larsmanson
相关产品推荐
相关产品推荐

