Javascript 尝试使用nodeEmailer在nodejs中设置密码恢复
尝试使用NodeEmailer在我的nodejs项目中设置密码恢复。我遇到“未定义收件人”错误。如何修复代码 这是我的密码:Javascript 尝试使用nodeEmailer在nodejs中设置密码恢复,javascript,node.js,express,nodemailer,mern,Javascript,Node.js,Express,Nodemailer,Mern,尝试使用NodeEmailer在我的nodejs项目中设置密码恢复。我遇到“未定义收件人”错误。如何修复代码 这是我的密码: app.post('/forgotpass', (req, res, next)=> { let recoveryPassword = ''; async.waterfall([ (done) => { crypto.randomBytes(20, (err , buf) => {
app.post('/forgotpass', (req, res, next)=> {
let recoveryPassword = '';
async.waterfall([
(done) => {
crypto.randomBytes(20, (err , buf) => {
let token = buf.toString('hex');
done(err, token);
});
},
(token, done) => {
User.findOne({username : req.body.username})
.then(user => {
if(!user) {
console.log("user does not exists");
return res.redirect('/forgotpass');
}
user.resetPasswordToken = token;
user.resetPasswordExpires = Date.now() + 1800000; // 1/2 hours
user.save(err => {
done(err, token, user);
});
});
},
(token, user) => {
let smtpTransport = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 465,
auth: {
user: 'test@gmail.com',
pass: 'testpass'
}
});
let mailOptions = {
to: user.email,
from : 'Ghulam Abbas myapkforest@gmail.com',
subject : 'Recovery Email from Auth Project',
text : 'Please click the following link to recover your passoword: \n\n'+
'http://'+ req.headers.host +'/reset/'+token+'\n\n'+
'If you did not request this, please ignore this email.'
};
smtpTransport.sendMail(mailOptions, err=> {
console.log(err);
res.redirect('/forgotpass');
});
}
], err => {
if(err) res.redirect('/forgotpass');
if (err )console.log(err);
});
});
下面是我得到的错误:
Error: No recipients defined
at SMTPConnection._formatError (C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-connection\index.js:784:19)
at SMTPConnection._setEnvelope (C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-connection\index.js:995:34)
at SMTPConnection.send (C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-connection\index.js:615:14)
at sendMessage (C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-transport\index.js:227:28)
at C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-transport\index.js:285:25
at SMTPConnection._actionAUTHComplete (C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-connection\index.js:1537:9)
at SMTPConnection.<anonymous> (C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-connection\index.js:550:26)
at SMTPConnection._processResponse (C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-connection\index.js:942:20)
at SMTPConnection._onData (C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-connection\index.js:749:14)
at TLSSocket.SMTPConnection._onSocketData (C:\Users\JITHENDRA\Desktop\project\node\Secrets-Starting-Code\node_modules\nodemailer\lib\smtp-connection\index.js:195:44)
at TLSSocket.emit (events.js:310:20)
at addChunk (_stream_readable.js:286:12)
at readableAddChunk (_stream_readable.js:268:9)
at TLSSocket.Readable.push (_stream_readable.js:209:10)
at TLSWrap.onStreamRead (internal/stream_base_commons.js:186:23) {
code: 'EENVELOPE',
command: 'API'
}
错误:未定义收件人
在SMTPConnection上。\u格式错误(C:\Users\JITHENDRA\Desktop\project\node\Secrets起始代码\node\u modules\nodemailer\lib\smtp connection\index.js:784:19)
在SMTPConnection.\u setEnvelope(C:\Users\JITHENDRA\Desktop\project\node\Secrets起始代码\node\u modules\nodemailer\lib\smtp连接\index.js:995:34)
在SMTPConnection.send(C:\Users\JITHENDRA\Desktop\project\node\Secrets起始代码\node\u modules\nodemailer\lib\smtp连接\index.js:615:14)
在sendMessage(C:\Users\JITHENDRA\Desktop\project\node\Secrets起始代码\node\u modules\nodemailer\lib\smtp传输\index.js:227:28)
在C:\Users\JITHENDRA\Desktop\project\node\Secrets起始代码\node\u modules\nodemailer\lib\smtp传输\index.js:285:25
在SMTPConnection.\u actionAUTHComplete(C:\Users\JITHENDRA\Desktop\project\node\Secrets start Code\node\u modules\nodemailer\lib\smtp connection\index.js:1537:9)
在SMTP连接处。(C:\Users\JITHENDRA\Desktop\project\node\Secrets起始代码\node\u modules\nodemailer\lib\smtp连接\index.js:550:26)
在SMTPConnection.\u processResponse(C:\Users\JITHENDRA\Desktop\project\node\Secrets起始代码\node\u modules\nodemailer\lib\smtp connection\index.js:942:20)
在SMTPConnection.\u onData(C:\Users\JITHENDRA\Desktop\project\node\Secrets start Code\node\u modules\nodemailer\lib\smtp connection\index.js:749:14)
在TLSSocket.SMTPConnection.\u onSocketData(C:\Users\JITHENDRA\Desktop\project\node\Secrets start Code\node\modules\nodemailer\lib\smtp connection\index.js:195:44)
在TLSSocket.emit(events.js:310:20)
在addChunk(_stream_readable.js:286:12)
在readableAddChunk(_stream_readable.js:268:9)
在TLSSocket.Readable.push(_stream_Readable.js:209:10)
在TLSWrap.onStreamRead(internal/stream_base_commons.js:186:23){
代码:“eDevelope”,
命令:“API”
}
这就是我的错误。请修复代码
我只希望节点邮件程序在验证用户是否存在后发送邮件此错误意味着您没有传递
mailpoptions.to
值,因此user.email
值为空或不是有效的电子邮件地址。如果使用async/await
,则可以更简洁地编写代码,并避免使用async.fallet
,从而更易于调试。下面指出了一些更改/打字错误-
// define transport here, outside the handler
const smtpTransport = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 465,
auth: {
user: 'test@gmail.com',
pass: 'testpass'
}
});
// use async function as the handler
app.post('/forgotpass', async (req, res) => {
try {
const user = await User.findOne({username : req.body.username});
if (!user) {
console.log("user does not exists");
return res.redirect('/forgotpass');
}
// make sure you have a valid email here
console.log(`Sending email to ${user.email}`);
// get token here once we have a valid user
const token = crypto.randomBytes(20);
// update the user with the token
user.resetPasswordToken = token;
user.resetPasswordExpires = Date.now() + 1800000; // 1/2 hours
await user.save();
// send the email
await smtpTransport.sendMail({
to: user.email,
from : 'Ghulam Abbas <myapkforest@gmail.com>', // <-- wrap email address in <>
subject : 'Recovery Email from Auth Project',
text : 'Please click the following link to recover your passoword: \n\n'+ // <-- typo: "passoword" should be "password"
'http://'+ req.headers.host +'/reset/'+token+'\n\n'+ // <-- use HTTPS!
'If you did not request this, please ignore this email.'
});
} catch (err) {
// catch all exceptions here...
console.log(err);
}
// everything redirects to the GET handler for forgotpass
return res.redirect('/forgotpass');
});
//在处理程序之外的此处定义传输
const smtpTransport=nodemailer.createTransport({
主机:“smtp.gmail.com”,
港口:465,
认证:{
用户:'test@gmail.com',
通过:“测试通过”
}
});
//使用异步函数作为处理程序
app.post('/forgotpass',异步(请求、回复)=>{
试一试{
const user=wait user.findOne({username:req.body.username});
如果(!用户){
console.log(“用户不存在”);
返回res.redirect('/forgotpass');
}
//确保您在此处有有效的电子邮件
log(`Sending email to${user.email}`);
//一旦我们有了一个有效的用户,就在这里获取令牌
常量令牌=加密随机字节(20);
//使用令牌更新用户
user.resetPasswordToken=令牌;
user.resetPasswordExpires=Date.now()+1800000;//1/2小时
等待user.save();
//发送电子邮件
等待smtpTransport.sendMail({
致:user.email,
from:'Ghulam Abbas',//这行代码from:'Ghulam Abbas'myapkforest@gmail.com“
格式不正确。电子邮件周围应该有括号,如:'Ghulam Abbas'
。