如何解决为什么我无法使用 nodemailer 发送邮件?
下面是我的nodemailer函数-
function mailer(firstName,emailId,password){
var transporter = nodemailer.createTransport({
service: 'gmail',host: process.env.HOST,// hostname
secureConnection: false,// TLS requires secureConnection to be false
port: process.env.OUTLOOK_PORT,// port for secure SMTP
tls: {
ciphers:'SSLv3'
},auth: {
user: process.env.EMAILID,pass: process.env.PASSWORD
}
});
var mailOptions = {
from: process.env.EMAILID,to: emailId,subject: 'DM automation tool login details',text: 'Hi ' + firstName + ','
+ '\n\nThank you for registering.\nYou can Now login to the account using the password ' + password +
'\nPlease click on the given link to login to your account http://localhost:8080/login' +
'\n\nNote : Please make sure to reset your password within an hour.'
};
transporter.sendMail(mailOptions,function(error,info){
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
}
这里,我在 .env 文件中提供了电子邮件 ID 和密码,我正在使用下面的此功能。客户将从我的 ID 收到一封邮件到他的电子邮件 ID。
const createCustomer = async(req,res,next) => {
try{
var id = Math.floor(Math.random()*9000000) + 10000000;
var db = req.con;
const data = {
"customerId" : id,"customerGroupId" : req.body.customerGroupId,"username" : req.body.username,"avatar" : req.file.filename,"email" : req.body.email,"password" : req.body.password,"mobileNumber" : req.body.mobileNumber,};
console.log(data)
const salt = await bcrypt.genSalt(20);
data.password = await bcrypt.hash(data.password,salt);
var pass = data.password;
console.log(pass)
if (!req.file.filename)
return res.status(400).send('No files were uploaded.');
let filename = fs.readdirsync('./src/template-store/temporaryImage/')
console.log(filename)
var file = req.files
let result = db.query(`INSERT INTO customers set ?`,[data],function(err,rows){
if(err){
res.json({
success:0,message:"An error occurred",err
})
}
else{
res.json({
success:1,message:"Inserted",data: data
})
mailer(req.body.username,req.body.email,req.body.password)
}
})
}
catch(error){
res.json({
message:"An error occured",error:error
})
}
}
错误:无效登录:534-5.7.9 需要特定于应用程序的密码。了解更多信息 534 5.7.9 https://support.google.com/mail/?p=InvalidSecondFactor f17sm10086327pfk.184 - gsmtp 在 SMTPConnection._formatError (E:\coding backup\Brands\node_modules\nodemailer\lib\smtp-connection\index.js:774:19) 在 SMTPConnection._actionAUTHComplete (E:\coding backup\Brands\node_modules\nodemailer\lib\smtp-connection\index.js:1513:34)
解决方法
如果没有完整的 gmail
身份验证,很难通过 OAuth2
进行身份验证。
我建议您使用 SendGrid 等外部服务来发送生产交易电子邮件。
它甚至有一个不错的免费计划,如果您的应用不是很大,那不会有问题! :)
PS:尽量避免应用程序引导程序之外的“同步”方法,因为它会阻塞整个服务器(您在此处使用 readdirSync
)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。