用于在Node.js中发送邮件的Gmail API

免责声明:

  • 我遵循了Google自己的Node.js快速入门指南,并成功连接并使用了该 gmail.users.labels.list()功能。
  • 我在这里检查了问题/答案,

我的问题:

使用Google的Node.js API时,尝试发送电子邮件时出现错误。错误是:

{

"code": 403,

"errors": [{

"domain": "global",

"reason": "insufficientPermissions",

"message": "Insufficient Permission"

}]

}

我的设置:

fs.readFile(secretlocation, function processClientSecrets(err, content) {

if (err) {

console.log('Error loading client secret file: ' + err);

return;

}

authorize(JSON.parse(content), sendMessage);

});

function sendMessage(auth) {

var raw = makeBody('myrealmail@gmail.com', 'myrealmail@gmail.com', 'subject', 'message test');

gmail.users.messages.send({

auth: auth,

userId: 'me',

message: {

raw: raw

}

}, function(err, response) {

res.send(err || response)

});

}

该功能processClientSecrets来自我上面提到的Google指南。它将读取.json包含access_token和的文件refresh_token。该makeBody功能是使编码的正文消息。

在配置变量中,我还具有:

var SCOPES = [

'https://mail.google.com/',

'https://www.googleapis.com/auth/gmail.modify',

'https://www.googleapis.com/auth/gmail.compose',

'https://www.googleapis.com/auth/gmail.send'

];

为什么要工作:

  • 授权过程适用于该gmail.users.labels.list()方法。
  • 如果我在Google的测试页上对其进行测试,则我正在测试的消息正文会起作用。


我的问题:

我的设置错了吗?API是否进行了更改?我想念什么?

回答:

好的,所以我发现了问题。

在遵循Node.js快速入门指南的同时,该教程中的示例

var SCOPES = ['https://www.googleapis.com/auth/gmail.readonly'];

当我得到的时候.json,看起来像:

{

"access_token": "xxx_a_long_secret_string_i_hided_xxx",

"token_type": "Bearer",

"refresh_token": "xxx_a_token_i_hided_xxx",

"expiry_date": 1451721044161

}

产生的那些标记 考虑auth/gmail.readonly了教程代码中的范围。

所以我删除了第一个.json,从我的最终作用域数组中添加了作用域(我在问题中发帖了),然后再次运行了教程设置,得到了一个新令牌。

在传递给API的对象中,我正在发送:

{

auth: auth,

userId: 'me',

message: {

raw: raw

}

}

但这是错误的,message应该调用key resource


回答:

这是我添加到教程代码中的内容:

function makeBody(to, from, subject, message) {

var str = ["Content-Type: text/plain; charset=\"UTF-8\"\n",

"MIME-Version: 1.0\n",

"Content-Transfer-Encoding: 7bit\n",

"to: ", to, "\n",

"from: ", from, "\n",

"subject: ", subject, "\n\n",

message

].join('');

var encodedMail = new Buffer(str).toString("base64").replace(/\+/g, '-').replace(/\//g, '_');

return encodedMail;

}

function sendMessage(auth) {

var raw = makeBody('myrealemail@gmail.com', 'myrealemail@gmail.com', 'test subject', 'test message');

gmail.users.messages.send({

auth: auth,

userId: 'me',

resource: {

raw: raw

}

}, function(err, response) {

res.send(err || response)

});

}

并使用以下命令调用所有内容:

fs.readFile(secretlocation, function processClientSecrets(err, content) {

if (err) {

console.log('Error loading client secret file: ' + err);

return;

}

// Authorize a client with the loaded credentials, then call the

// Gmail API.

authorize(JSON.parse(content), sendMessage);

});

以上是 用于在Node.js中发送邮件的Gmail API 的全部内容, 来源链接: utcz.com/qa/411887.html

回到顶部