我正在使用一个保存联系人的程序。我想添加一个新功能,让您可以通过电子邮件帐户向联系人发送电子邮件。我尝试使用 nodemailer 来完成,从用户需要填写的表单中获取登录数据。
但是nodemailer给我发了一个错误,看这个:
Error: Invalid login: 535-5.7.8 Username and Password not accepted.
我尝试使用应用程序密码并激活不太安全的选项,但错误仍然存在。看我的代码:
在这里,我获取用户的电子邮件和密码:
router.post('/email', isLoggedIn, async (req, res) => {
var { email } = req.body;
var { password } = req.body;
var parts = email.substring(email.lastIndexOf('@')+ 1);
exports.email = email;
exports.password = password;
res.redirect('/links/message')
});
我在这里接受消息:
router.post('/sendmessage', isLoggedIn, async (req, res) => {
const { message } = req.body;
const { assumpt } = req.body;
exports.message = message;
exports.assumpt = assumpt;
res.redirect('/links/contactsemail')
});
最后,我采用您需要发送电子邮件的类别联系人,然后发送电子邮件,其中包含用户给我的消息和数据登录:
router.post('/contactsend', isLoggedIn, async (req, ress) => {
const { contacts } = req.body;
const row = await pool.query('SELECT count(email) AS email FROM links WHERE user_id=? AND category=? AND email IS NOT NULL',[req.user.id, contacts]);
const rows = row[0].email;
const assumpt = myModule.assumpt;
const message = myModule.message;
const email = myModule.email;
const password = myModule.password
var parts = email.substring(email.lastIndexOf('@')+ 1);
const hosts = 'smtp.' + parts;
var transporter = nodemailer.createTransport({
host: hosts,
port: 587,
auth: {
user: email,
pass: password
}
});
for (i = 1; i <= rows; i++ ){
var email1 = await pool.query('SELECT email AS email FROM (SELECT email, ROW_NUMBER() OVER (ORDER BY email) AS rn FROM links WHERE user_id= ? AND category=?) q WHERE rn = ?', [req.user.id, contacts, i]);
var email1 = email1[0].email;
var mailOptions = {
from: email,
to: email1,
subject: assumpt,
text: message
};
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
res.flash('success', 'Missatge enviat correctament');
res.redirect('/links');
}
});
};
});
我的问题是:
如何修复错误?
我可以用不同的方式做到这一点,这样更容易更好吗?