我在 Node.js 应用程序中使用 nodemailer 库来发送电子邮件。我试图根据当前登录的用户动态设置“发件人”地址,但电子邮件始终从我在配置中设置的电子邮件地址发送,而不是预期的“currentUserEmail”地址。
问题是:
电子邮件未从预期的“发件人”地址发送。
我已确认“currentUserEmail”已正确登录到我的后端代码中,并且它包含所需的电子邮件地址。
**配置:**
- 我正在使用 Gmail 作为电子邮件服务。
- 我的 nodemailer 配置将“[电子邮件受保护]”指定为“用户”。
- 我已确保在 Gmail 设置中启用 IMAP。
- Gmail 设置中允许访问“安全性较低的应用程序”。
请在下面找到我的相关代码片段:
我的代码:
app.post('/api/sendMessage',protect, async (req, res) => {
const { name, email, tel, message, currentUserEmail, } = req.body;
console.log('Received currentUserEmail:', currentUserEmail);
const transporter = nodemailer.createTransport({
service: 'Gmail',
auth: {
user: '[email protected]',
pass: 'pass'
},
});
// Compose email message
const mailOptions = {
from: currentUserEmail,
to: '[email protected]' ,
subject: 'New Message from Your Website',
text: `You received a new message from ${name} (${email}, ${tel}):\n\n${message}`,
};
const newMessage = new sendMessage({
name,
email,
tel,
message,
});
newMessage.save()
.then((message) => {
// Send the email
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
console.log('Error sending email:', error);
res.status(500).json({ message: 'Error sending message' });
} else {
console.log('Email sent: ' + info.response);
res.json({ message: 'Message sent and stored successfully' });
}
});
})
.catch((err) => {
console.log('Error saving message to the database:', err);
res.status(500).json({ message: 'Error saving message to the database' });
});
});
即使我已将“发件人”正确设置为“当前用户电子邮件”,为什么我的电子邮件仍从“[电子邮件受保护]”发送?
user
对象中的auth
通常应与您的from
选项相匹配。
发件人电子邮件仍然是
[email protected]
,因为这是您用于身份验证的电子邮件地址(因为它是您的 Gmail 帐户)。
Gmail 使用您在
auth
对象中提供的值来基本上验证谁在发送电子邮件,因此即使您指定不同的 from
地址,发件人仍然是 [email protected]
,因为那是您正在使用的 Gmail 帐户.