Nodemailer对接Gmail发送邮件失败(含两种实现方式)求助
Gmail SMTP 发送邮件故障求助
我一开始尝试用非OAuth2的简单方式发送邮件,多次尝试后仅偶然成功发送2-3封;查阅资料后改用OAuth2方式实现,但仍然无法正常发送邮件,甚至试过SendGrid也无效,希望能得到解决帮助。
无OAuth2实现代码(已开启IMAP、双因素认证并创建自定义密码)
export const sendEmail = (options) => { const transporter = nodemailer.createTransport({ service: "gmail", port: 587, type: "SMTP", host: "smtp.gmail.com", secure: true,// for port 587 it should be false but this worked a few times so i let it be auth: { user: EMAIL_FROM, pass: EMAIL_PASSWORD, }, }); const mailOptions = { from: EMAIL_FROM, to: options.to, subject: options.subject, html: options.text, }; transporter.sendMail(mailOptions, function (err, info) { if (err) { console.log(err); } else { console.log(info); } }); };
OAuth2实现代码
const oAuth2Client = new google.auth.OAuth2(CLIENT_ID,CLIENT_SECRET,REDIRECT_URI); oAuth2Client.setCredentials({refresh_token:REFRESH_TOKEN}); export const sendEmail = async(options) => { try { const accessToken = (await oAuth2Client.getAccessToken()).token console.log(accessToken,REDIRECT_URI,REFRESH_TOKEN,CLIENT_ID,CLIENT_SECRET) const transporter = nodemailer.createTransport({ service: "gmail", host: "smtp.gmail.com", port: 587, //port: 465, secure : false, // true for 465, false for other ports //type: "SMTP", //secure: true, auth: { type:"OAuth2", user: "my email", clientId: CLIENT_ID, accessToken, clientSecret: CLIENT_SECRET, refreshToken: REFRESH_TOKEN, //pass: EMAIL_PASSWORD, }, }); const mailOptions = { from: "my email", to: options.to, subject: options.subject, text:"Password change", html: options.text, }; const result = await transporter.sendMail(mailOptions); return result; } catch (error) { return error; } };
当前遇到的错误
Error: connect ETIMEDOUT 74.125.68.109:465
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1300:16) {
errno: -4039,
code: 'ESOCKET',
syscall: 'connect',
address: '74.125.68.109',
port: 465,
command: 'CONN'
}
内容的提问来源于stack exchange,提问作者Moeez
相关产品推荐
相关产品推荐

