问题描述
在我的节点快速服务器中注册用户后,我想发送一封验证电子邮件。如果创建了用户,我将使用此功能发送电子邮件:
import dotenv from 'dotenv'
import sgMail from '@sendgrid/mail'
sgMail.setApiKey(process.env.SENDGRID_API_KEY)
const sendEmail = (to,token) => {
const msg = {
to,from: process.env.SENDGRID_SENDER,subject: 'Email Verification',text: `Please click the following link: http://localhost:5000/${token}`
}
sgMail
.send(msg)
.then((response) => {
console.log(response[0].statusCode)
console.log(response[0].headers)
})
.catch((error) => {
console.error(error)
})
}
export { sendEmail }
这里被称为:
const registerUser = asyncHandler(async (req,res) => {
const { name,email,password } = req.body
const userExists = await User.findOne({ email })
if (userExists) {
res.status(400)
throw new Error('User already exists')
}
const user = await User.create({
name,password
})
if (user) {
sendEmail(user.email,user.token) //HERE
res.status(201).json({
_id: user._id,name: user.name,email: user.email,isAdmin: user.isAdmin,isverified: user.isverified,token: generatetoken(user._id),})
} else {
res.status(400)
throw new Error('Invalid user data')
}
})
我遇到的问题是在发出请求时收到 ResponseError Unauthorized(代码 401)。用户确实在系统中创建。在我的 sendgrid 帐户中,我已经验证了具有完全访问权限的发件人电子邮件,并将我的 API 密钥存储在我的 .env 文件中。
我使用了 10 分钟的邮件帐户来测试这个和真实的电子邮件帐户。
解决方法
如果 401 状态来自 sendgrid,那么您的 env 变量可能未解析。
导入 dotenv
包
dotenv.config()
如果它不起作用,请尝试在使用它之前控制台.记录 process.env.SENDGRID_API_KEY
以确保它在那里。