Node.js中Nodemailer问题:主题显示错位与占位符解析错误
解决Slack+Node.js Nodemailer的主题错位与[object Object]解析问题
问题根源分析
你的代码存在参数传递顺序错误,直接引发了两个异常:
- 调用
sendEmail(client, subject, message)时,传入的第一个参数是client,但sendEmail函数定义的第一个参数是subject,参数完全错位:sendEmail里的subject实际接收的是client对象,所以console.log(subject)输出的是对象(无有效文本内容),模板字符串拼接时就会显示[object Object]sendEmail里的message实际接收的是原本的subject值,导致主题内容错误出现在邮件正文里
修复代码
修改sendEmail的调用逻辑,移除多余的client参数(你的sendEmail函数并未使用该参数):
app.view('your_view_callback_id', async ({ ack, body, client }) => { console.log('View Submission Payload:', JSON.stringify(body, null)); const subject = body.view.state.values.uik1r.sl_input.value; const message = body.view.state.values["35GrF"].ml_input.value; // 保持参数顺序与函数定义一致,移除多余的client参数 await sendEmail(subject, message) await ack(); console.log('Acknowledged view submission', body); });
sendEmail函数本身定义无问题,保持原样即可:
async function sendEmail(subject, message){ console.log('Subject:', subject); console.log('Message:', message); const transporter = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 465, secure: true, auth: { user: process.env.EMAIL_USER, pass: process.env.EMAIL_PASSWORD, } }) const info = await transporter.sendMail({ from: "SlackEmail <motty6700@gmail.com>", to: "techsupport@fidelitypayment.com", subject:`This is just a test ${subject}`, text: message }) console.log("message sent:" + info.messageId); console.log("Message info:", info); console.log("message rejected:" + info.rejected) }
修复效果验证
修复完成后:
console.log(subject)会正确输出从Slack视图获取的主题值(如Testing)- 邮件主题将显示
This is just a test Testing,不再出现[object Object] - 邮件正文会正确显示
P200 is working as expected,主题内容不会再错位到正文区域
内容的提问来源于stack exchange,提问作者Yaakov
相关产品推荐
相关产品推荐

