当前位置: 首页 > 面试题库 >

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

白淇
2023-03-14
问题内容

免责声明:

  • 我遵循了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是否进行了更改?我想念什么?


问题答案:

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

问题1:
在遵循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。但是,我发现我无法创建直接发送到我的电子邮件的“联系我”表单,因为我无法从能够发送电子邮件的节点中找到任何模块。 有人知道node.js电子邮件库或示例联系表单脚本吗? 问题答案: node-email-templates是一个更好的选择:https : //github.com/niftylettuce/node-email- template

  • BaaS.sendEmail(data) 参数说明 data 是 Object 类型,它包括以下几个属性 参数名 类型 必填 描述 recipient String 是 收件人邮箱 subject String 是 邮件标题 body String 是 邮件内容 请求示例 let data = { recipient: "aa@bb.com", subject: "email title"

  • 我从我的域帐户发送消息,但他们不显示在用户(从nodemailer的选项)发送box.But当从gmail服务发送消息时,消息显示在已发送的user.Am我在下面的代码中缺少一些东西?

  • 本文向大家介绍node.js发送邮件email的方法详解,包括了node.js发送邮件email的方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了node.js发送邮件email的方法。分享给大家供大家参考,具体如下: 通常我们做node项目时,可能我们会碰到做一个简单的邮件反馈,那么我们今天就来讨论一下,其中遇到的各种坑。 总的来说做这个东西,我们可能需要node第三方依赖模块,

  • 本文向大家介绍基于java使用JavaMail发送邮件,包括了基于java使用JavaMail发送邮件的使用技巧和注意事项,需要的朋友参考一下 一、邮件的相关概念 邮件协议。主要包括: SMTP协议:Simple Mail Transfer Protocol,即简单邮件传输协议,用于发送电子邮件 POP3协议:Post Office Protocol 3,即邮局协议的第三个版本,用于接收邮件 IM

  • 我正在尝试使用thymeleaf模板发送电子邮件。但我收到一条错误消息 我不能使用WebContext()而不是Context()。因为对于webContext,我需要我无法在这里获得的HttpServletRequest对象,因为它不在请求范围内。我正在尝试使用上下文()发送邮件,但我收到了错误。请任何人对此有解决方案。提前感谢这是我的代码,