我有一个使用nodemailer的表单,xoauth2和谷歌APi oauth2,我上周更新了密码,从那以后我的应用程序没有用,我得到了:
'535-5.7.8不接受用户名和密码。了解更多信息,请访问\ n535 5.7.8
我已尝试删除该应用并创建一个新应用,但它似乎没有获取新的更改密码。有关如何解决此问题的任何建议?我允许安全性较低的应用,并显示解锁验证码。
答案 0 :(得分:22)
@sambellerose我来自
const generator = xoauth2.createXOAuth2Generator({
user: serverConfig.gmail.client_user,
clientId: serverConfig.gmail.client_id,
clientSecret: serverConfig.gmail.secret,
refreshToken: serverConfig.gmail.refresh_token,
accessToken: serverConfig.gmail.access_token,
});
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
xoauth2: generator,
},
});
只是拥有以下内容:
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: serverConfig.gmail.client_user,
clientId: serverConfig.gmail.client_id,
clientSecret: serverConfig.gmail.secret,
refreshToken: serverConfig.gmail.refresh_token,
accessToken: serverConfig.gmail.access_token,
},
});
我希望这会有所帮助
答案 1 :(得分:4)
我通过更新到最新版本的Nodemailer解决了这个问题,并删除了xoauth2模块,因为Nodemailer 3具有更好的Oauth 2支持。继续使用Google Oauth 2.0游乐场,我可以获得正确的访问权限并刷新令牌。
答案 2 :(得分:0)
类似于以上答案。这就是我构造我的矿井的方法,它立即起作用。
const transporter = nodemailer.createTransport({
host: "smtp.gmail.com",
port: 465,
secure: true, // true for 465, false for other ports
auth: {
type: "OAuth2",
user: process.env.EMAIL, // email you are using with nodemailer
pass: process.env.PASSWORD, // email password
clientId: process.env.CLIENTID,
clientSecrect:process.env.CLIENTSECRET,
refreshToken: process.env.REFRESHTOK,
accessToken: process.env.ACCESSTOK,
},
tls:{
rejectUnauthorized:false
}
});
此凭证链接也有效。 https://www.youtube.com/watch?v=JJ44WA_eV8E
您必须四处浏览,因为Google网络布局有些不同。当然可以!