用于在nodejs javascript中向用户发送消息的gmail API失败

2024-03-28

我的nodejs程序无法使用Gmail api发送消息。

解决方案来自用于在 Node.js 中发送邮件的 Gmail API https://stackoverflow.com/questions/34546142/gmail-api-for-sending-mails-in-node-js对我不起作用。

我用以下方式对电子邮件进行编码

var {google} = require('googleapis');

// to and from = "some name <blaw.blaw.com"
function makeBody(to, from, subject, message) {
    var str = ["Content-Type: text/plain; charset=\"UTF-8\"\r\n",
        "MIME-Version: 1.0\r\n",
        "Content-Transfer-Encoding: 7bit\r\n",
        "to: ", to, "\r\n",
        "from: ", from, "\r\n",
        "subject: ", subject, "\r\n\r\n",
        message
    ].join('');

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

    return encodedMail;
}

然后转到 Google API 浏览器https://developers.google.com/apis-explorer/#p/ https://developers.google.com/apis-explorer/#p/输入 gmail.users.messages.send 和上面 make_body 生成的字符串。

电子邮件将成功发送。所以我知道上面的编码是 好的。

当我的程序尝试使用以下命令发送时,它失败并出现错误

错误:“原始”RFC822 有效负载消息字符串或通过上传消息 /上传/* 需要 URL

function sendMessage(auth) {
    var gmail = google.gmail('v1');
    var raw = makeBody('john g <[email protected] /cdn-cgi/l/email-protection>', 'john g<[email protected] /cdn-cgi/l/email-protection>', 'test subject', 'test message #2');

    gmail.users.messages.send({
        auth: auth,
        userId: 'me',
        resource: {
            raw: raw
        }

    }, function(err, response) {
        console.log(err || response)
    });
}

身份验证令牌很好,因为我可以调用 gmail.users.labels.list,并且在使用 API 资源管理器时使用相同的授权。

Q1:有谁知道为什么上面不起作用?

Q2: 用于在 Node.js 中发送邮件的 Gmail API https://stackoverflow.com/questions/34546142/gmail-api-for-sending-mails-in-node-js没有解释为什么原始电子邮件被包装在资源字段中。我尝试简单地生吃,但没有帮助。

这失败了。

gmail.users.messages.send({
        auth: auth,
        userId: 'me',
        resource: {
            raw: raw
        }

    }, function(err, response) {
        console.log(err || response)
    });

也是如此

gmail.users.messages.send({
    auth: auth,
    userId: 'me',
    raw: raw

}, function(err, response) {
    console.log(err || response)
});

这也是如此用于发送带有附件的电子邮件的 GMAIL API https://stackoverflow.com/questions/31784167/gmail-api-for-sending-email-with-attachment

gmail.users.messages.send({
    auth: auth,
    userId: 'me',
    data: raw

}, function(err, response) {
    console.log(err || response)
});

有谁知道它在哪里记录了如何传递 api 资源管理器所要求的“请求正文”?

Q3:为什么google api需要base64编码的替换?

我尝试使用编码

const Base64 = require("js-base64").Base64
var encodedMail = Base64.encode(str);

当我将其输入 API 资源管理器时,出现错误

"message": "字节字符串的值无效:


哎呀!对于其他在这里绊倒的人,有几件事。首先 - 我们现在在这里有一个完整的端到端发送邮件的示例:

https://github.com/google/google-api-nodejs-client/blob/master/samples/gmail/send.js https://github.com/google/google-api-nodejs-client/blob/master/samples/gmail/send.js

其次,上面的答案大部分是正确的:)而不是安装最新版本google-auth-library...只需将其从 package.json 中一起删除即可。入门指南非常非常错误(现已修复)。googelapis引入了它自己的兼容版本google-auth-library,所以你真的不想通过安装你自己的版本来搞乱它:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于在nodejs javascript中向用户发送消息的gmail API失败 的相关文章

随机推荐

  • 导入错误:没有模块名称 urllib2

    这是我的代码 import urllib2 request response urllib2 urlopen http www google com html response read print html 有什么帮助吗 如中所述urll
  • ajax div 重新加载后 datepicker 不会启动

    我在 div 中有一个 jquery datepicker 通过 ajax 更新 我可以在整个页面重新加载后打开一次日期选择器 但是在ajax仅更新包含日期选择器输入的div后 我看不到日期选择器 我尝试过针对类似问题的解决方案 但没有成功
  • 在 Matlab 中使用 Pochhammer 符号

    我尝试使用一个脚本来评估波赫默符号 http mathworld wolfram com PochhammerSymbol html 上升阶乘 在Matlab中 但它无法评估pochhammer x n 每当x即使表达式在以下情况下有效 也
  • -bash: /usr/local/bin/virtualenvwrapper.sh: 没有这样的文件或目录 #10

    我没有 sudo 特权 当我跑步时 printf n s n s n s virtualenv export WORKON HOME virtualenvs source usr local bin virtualenvwrapper sh
  • 使用遗留头文件作为 c++20 模块

    我正在将旧代码转换为可作为 C 模块导入的代码 问题是我希望它仍然可以工作并且可以像旧的标头 源版本一样轻松维护 我该怎么做 如果可能的话 是否可以创建一个导出标头内容的模块 也可以接受任何其他可以让您维护旧的 cpp h 文件和模块文件的
  • 如何设置列表视图项目的填充?

    我在 Windows 窗体中的大图标视图上有一个列表视图 图像彼此非常接近 那么我如何为项目设置填充呢 ListView 中没有方法可以执行此操作 你可以看一下LVM SETICONSPACING http msdn microsoft c
  • 所有视图中的单个 .NET Core Razor C# 函数

    我知道有一种方法可以在视图中添加 C 函数并使用以下方法调用它们 functions 方法在我的视图中 但是有没有一种方法可以创建一个共享视图 其中包含这些函数以包含在控制器视图内部 而无需在每个视图上复制相同的代码行 我尝试使用 inje
  • 输出文件名,不是带有选择字符串的字符串

    我正在使用 powershell 来 grep 特定字符串的源代码 如果字符串在文件中 我想要文件的名称 而不是包含该字符串的代码行 我还想要文件名 仅一次 而不是与文件存在的次数一样多地列出 我目前正在使用 gci include sql
  • 在实体框架和 Sql Server 中创建对象计数器

    注 1 我重新表述了问题 它现在由供应商和订单组成 而不是汽车和零件 注 2 此问题是假设的 我的目标是了解如何创建对象计数器 为了满足监管要求 我需要对每个供应商的每个订单进行顺序编号 我在用着 实体框架 与 SQL Server In
  • Django 使用 Ajax 登录?

    我正在开发一个 jquery 函数来使用 ajax 发布登录表单 在ajax成功中 如果登录成功与否 我想以不同的方式处理响应 因此 在 Django 中 我想知道是否可以在现有登录视图的基础上添加一些成功 错误变量 以便与返回的页面一起发
  • 在 C# 中声明事件的语法是什么?

    在我的班级中 我想声明一个其他班级可以订阅的事件 声明事件的正确方法是什么 这不起作用 public event CollectMapsReportingComplete 你忘了提及type 对于非常简单的事件 EventHandler h
  • 由于iOS 7,视图不出现

    我在装有 iOS 7 的 iPhone 上尝试了我的应用程序 除了一件事之外 一切都运行良好 在 iOS 6 版本上 当我执行以下代码时 加载视图 带有活动指示器 出现并在加载结束时消失 在 iOS 7 上 加载期间根本不会出现视图 sel
  • 在 Google Cloud Build yaml 中克隆私有 GitHub 存储库

    根据一个note https cloud google com cloud build docs access private github repos在 Cloud Build 文档中 标题为访问私有 GitHub 存储库 当您使用 Cl
  • 如何保存循环中的字符输出?

    所以我做了这个函数 它只需要一个数字元素 而不是一个向量 salaryCategory function s if s gt 40000 s lt 70000 print Low if s gt 70000 s lt 100000 prin
  • 导入错误:没有名为 cloud.ml 的模块

    我正在尝试按照说明在张量流中使用本地预测 如下所述here https cloud google com sdk gcloud reference ml engine local predict 运行命令gcloud ml engine l
  • 在 Twitter Bootstrap 装订线中放置垂直线的最佳方法

    div class row fluid div class span6 Some content div div class span6 Some content div div 我想在这两列之间的排水沟中间放置一条垂直线 该线不是列的完整
  • GODI-电池:安装问题

    我正在尝试使用 GODI 控制台安装 godi batteries 我似乎已经对所有依赖项进行了排序 例如甘菊 我在 Godi 的界面中收到以下错误 gt ocamlfind ocamlopt shared linkall package
  • Tidyverse 重复跟踪父 ID 直到祖先的方法

    来自 Rebrickable 的主题数据集 https rebrickable com downloads 包括每个主题的 ID 及其父 ID 此处已重命名列 可能会递归 ID 可能有祖父母 曾祖父母等 这是一个遵循父链 City gt A
  • apscheduler 中的作业调度中下一次运行时间错过了几秒

    我有一个执行 cron 作业的函数 def add config job sched job module JOB METHODS get job type if module is None logging warn job type r
  • 用于在nodejs javascript中向用户发送消息的gmail API失败

    我的nodejs程序无法使用Gmail api发送消息 解决方案来自用于在 Node js 中发送邮件的 Gmail API https stackoverflow com questions 34546142 gmail api for