NodeMailer – 使用Google服务帐户发送邮件失败,因为“用户名和密码不被接受”

我正在创build一个Twitter机器人,并且正在执行一个方法,如果发生错误,会向我发送电子邮件。 由于我已经在使用Google API访问Google云端硬盘(这里没有问题),所以我决定使用服务帐户发送电子邮件(Google控制台表示可以这样使用)

我到目前为止发送电子邮件的方法是:

var config = require('./config/mail'); var google = require('./config/google'); var nodemailer = require('nodemailer'); var send = function (args) { let transporter = nodemailer.createTransport({ 'service': 'gmail', 'auth': { 'type': 'OAuth2', 'user': google.client_email, 'serviceClient': google.client_id, 'privateKey': google.private_key } }); transporter.on('token', token => console.log(token)); let message = { 'from': `"${config.serverFromName}" <${config.serverFromMail}>`, 'to': args.to, 'subject': args.subject, 'text': args.text, 'html': `<p>${args.text}</p>` }; transporter.sendMail(message, (err, info) => { if (err) { console.log('Mail couldn\'t be sent because: ' + err); } else { console.log('Mail sent'); } }); }; 

config/google文件包含Google在创build服务帐户时为您生成的数据。 config.serverFromNameconfig.serverFromMail是发件人的名称和电子邮件(与服务帐户ID不一样)。 args包含配方电子邮件和内容

当我testing发送方法时,我在控制台中收到以下消息:

 Mail couldn't be sent because: Error: Invalid login: 535-5.7.8 Username and Password not accepted. Learn more at 535 5.7.8 https://support.google.com/mail/?p=BadCredentials z123sm543690vkd.10 - gsmtp 

我知道令牌正在创build正确,因为我创build的侦听器正在打印它:

 { user: 'name@project.iam.gserviceaccount.com', accessToken: 'ya29.ElmIBLxzfU_kkuZeyISeuRBeljmAe7HNTlwuG4K12ysUNo46s-eJ8NkMYHQqD_JrqTlH3yheNc2Aopu9B5vw-ivEqvPR4sTDpWBOg3xUU_4XiJEBLno8FHsg', expires: 1500151434603 } 

在Internet上search我发现这可能是OAuth范围的一个问题。 但是,所有涉及到的信息都是指使用客户端ID而不是服务帐户。 我也没有在Google开发者控制台中find这个选项。

任何想法我做错了什么?