收到电子邮件时电子表格自动更新(发布/订阅)但信息错误[关闭]

2024-01-28

我在 Google Cloud Platform 上设置了第一个 Pub/Sub,它使用 Gmail API 在每次收到电子邮件时更新我的​​电子表格

(有关如何执行此操作的更多信息,请参阅我之前的问题) https://stackoverflow.com/questions/76790331/how-to-update-function-so-it-responds-to-certain-emails-automatically/76803573#76803573

但是,下面的 doPost 函数在我的电子表格上返回类似以下内容: "2023 年 8 月 4 日 10:01:59"、"8011555761044464"、"{"电子邮件地址":"[电子邮件受保护] /cdn-cgi/l/email-protection","historyId":37309620}"

我还是个新手,但我希望电子表格包含发件人的信息和主题行。如何改进我的脚本?

// ************************* POST *************************

function doPost (e) {

const message = JSON.parse(e.postData.getDataAsString()).message;
const data = Utilities.newBlob(Utilities.base64Decode(message.data)).getDataAsString();
const ss = SpreadsheetApp.openById("MYSHEET").getSheetByName("Borghers Emails");
ss.appendRow([new Date(), message.message_id, data]);
return 200;

};

// ************************* ENROLL EMAIL *************************

function enrollEmail() {

try {

  const watchRes = {
    labelIds: ["INBOX"],
    labelFilterAction: "include",
    topicName: "projects/myproject/topics/gmailTrigger"
  };

  const response = Gmail.Users.watch(watchRes, "me");
  console.log(response);


} catch (error) {
  console.log(error);
}

};

编辑:这是更新的代码这确实有效,谢谢田池!但是,我认为 Pub/Sub 和我的脚本之间存在沟通不畅,因为当我发送一封测试电子邮件时,电子表格将进入无限循环,在该循环中更新工作表并且不会停止。我不确定如何与 Pub/Sub 通信以确保一次只发生一条消息。请参阅下面的我的脚本和工作表上的结果:

function doPost(e) {

  const message = JSON.parse(e.postData.getDataAsString()).message;
  const data = JSON.parse(Utilities.newBlob(Utilities.base64Decode(message.data)).getDataAsString());

  const { historyId } = data;
  const { history } = Gmail.Users.History.list("me", { startHistoryId: historyId });

  if (history.length > 0) {
    const messageId = history[0].messages[0].id;
    const msg = GmailApp.getMessageById(messageId);
    const ss = SpreadsheetApp.openById("MYSHEET").getSheetByName("Email Log");
    ss.appendRow([new Date(), messageId, msg.getFrom(), msg.getSubject()]);
  }

  return ContentService.createTextOutput("ok");

}

我相信您的目标如下。

  • 您已经完成了在收到电子邮件时通过发布/订阅推送到 Web 应用程序的设置。
  • 您想通过修改脚本来检索电子邮件的电子邮件地址和电子邮件标题。

既然如此,下面的修改如何?

修改后的脚本:

请在高级 Google 服务中启用 Gmail API。

function doPost(e) {
  const message = JSON.parse(e.postData.contents).message;
  const data = JSON.parse(Utilities.newBlob(Utilities.base64Decode(message.data)).getDataAsString());
  const { historyId } = data;
  const { history } = Gmail.Users.History.list("me", { startHistoryId: historyId });
  if (history.length > 0) {
    const messageId = history[0].messages[0].id;
    const msg = GmailApp.getMessageById(messageId);
    const ss = SpreadsheetApp.openById("MYSHEET").getSheetByName("Borghers Emails");
    ss.appendRow([new Date(), messageId, msg.getFrom(), msg.getSubject()]);
  }
  return ContentService.createTextOutput("ok");
}
  • 在此修改后的脚本中,当收到电子邮件时,doPost使用来自 pub/sub 的事件对象运行。并且,从事件对象中检索历史ID。然后,从最新的历史ID中检索消息ID。检索消息 ID、发件人和消息标题,并将这些值附加到“Borghers Emails”表中。

  • 在这种情况下,message.message_id您脚本中的消息 ID 与电子邮件的消息 ID 不同。这是发布/订阅消息 ID。请注意这一点。

Note:

  • 当您修改Web Apps的Google Apps脚本时,请将部署修改为新版本。这样,修改后的脚本就会反映在Web Apps中。请注意这一点。

  • 您可以在我的报告中看到详细信息“在不更改新 IDE 的 Web 应用程序 URL 的情况下重新部署 Web 应用程序(作者:我) https://gist.github.com/tanaikech/ebf92d8f427d02d53989d6c3464a9c43".

参考:

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

收到电子邮件时电子表格自动更新(发布/订阅)但信息错误[关闭] 的相关文章

随机推荐

  • iPhone 自动对焦中到“兴趣点”的距离

    在iphone中 我想计算相机到拍摄对象的距离 我想知道也许 iPhone 相机的 主动自动对焦 为我提供了到拍摄对象 兴趣点 的距离 提前谢谢了 附注伙计们 如果您认为不可能 请告诉我 据我所知 这是不可能的 请参阅here http d
  • Pyside6:从 QTableWidget 复制粘贴、删除、撤消多个单元格

    我希望能够使用 control C control V 在 Pyside6 表 QTableWidget 之间进行复制和粘贴 主要是在 Excel 之间进行复制和粘贴 我找到了 Momo 2023 年 1 月的帖子 1 https stac
  • JavaScript 闭包。在循环中访问当前 i、j 变量[重复]

    这个问题在这里已经有答案了 我尝试动态生成 table 使用 jQuery 我想为每个单元格设置单击处理程序 因此当单元格单击时 弹出窗口将显示单元格的当前索引 我如何访问 CURRENTi and j循环中的变量 for var i 0
  • 如何使用不同的服务帐户凭据验证谷歌API?

    任何曾经不幸以编程方式与 Google CLI 二进制文件进行交互的人都会意识到 可以使用以下工具进行身份验证gcloud gsutil bq等远非直观或琐碎 尤其当您需要跨不同项目工作时 我正在为不同的项目运行与 Google Cloud
  • 在 Ubuntu Linux 上安装功能齐全的 PostGIS 2.0 GEOS/GDAL 问题

    我一直致力于在 ubuntu maverick amd64 Linux 服务器上启动并运行 postgis 2 0 大约一周 我正在寻求栅格和拓扑支持 我使用以下内容进行配置 sudo configure with raster with
  • JAXB RI ClassFactory 中的空指针异常

    Intro 我和我的朋友正在开发一个 JavaFX 应用程序 该应用程序充当我们学校的规划器 我们有任务 课程作业 活动 课程和学生信息 为了将数据持久存储在用户的硬盘上 我们使用了 JAXB 我们已经注释了我们的类 并且可以成功地将 Ta
  • 使用 Flexbox 具有相同高度元素的多行网格

    我正在尝试创建一个具有多行和多列的网格 我希望使用 Flexbox 使它们都具有相同的高度 但我唯一能得到的是一行上具有相同大小的列 这是我正在尝试做的事情的一个例子 http jsbin com maxavahesa 1 edit htm
  • 如何在 OSX 上替换 Python 中的“关于 Tkinter”菜单

    编辑 我指的是 OSX 应用程序菜单 其中包含 关于 和 首选项 菜单项 以及其他菜单项 对于知道正确搜索词的人来说 也许这将是另一个简单的过程 但是在花费数小时在 IDLE 中跟踪代码并搜索网络之后 我还没有完全能够将这些点联系起来 我正
  • 以编程方式从 DataTable 创建 DataGridview

    我有以下代码 DataTable table new DataTable DataTable is filled with values here DataGridView grid new DataGridView foreach Dat
  • Javascript charAt() 打破多字节字符串

    此代码在 Nodejs v0 10 21 中崩溃 usr bin env node use strict var urlEncoded http zh wikipedia org wiki F0 A8 A8 8F var urlDecode
  • Python请求,如何将内容类型添加到multipart/form-data请求

    我使用 python requests 通过 PUT 方法上传文件 远程 API 仅当正文包含属性时才接受任何请求 Content Type i mage png 不作为请求标头 当我使用 python requests 时 请求因缺少属性
  • 迭代器性能

    与直接使用指针相比 实现和使用迭代器是否会带来任何类型的性能损失 假设我们使用最高的编译器优化 代码来自http www cplusplus com reference iterator iterator http www cplusplu
  • 迭代器实现应该如何处理检查异常?

    我将 java sql RecordSet 包装在 java util Iterator 中 我的问题是 如果任何记录集方法抛出 SQLException 我该怎么办 The java util Iterator javadoc http
  • 如何在eclipse中运行maven项目

    我有一个带有 TestNG 的 Java Maven 项目 我想从 eclipse 运行它 我使用 Eclipse Kepler 并安装了 m2eclipse 插件 但是菜单 Run as 中没有任何与 maven 连接的选项 有人可以帮我
  • 当我单击“确定”按钮时,Android AlertDialog 总是退出

    有没有办法在单击 确定 后进行验证 我没有忽略它 但当我单击 确定 时它会关闭 我编写了一个使用一些编辑文本的自定义 AlertDialog 问题是我无法验证任何内容 如果验证失败 我想更改消息并告诉用户 但它只是关闭 我正在使用Alert
  • Blazor 服务器应用程序中的 HttpContext.Session

    我正在尝试使用HttpContext Session在我的 ASP NET Core Blazor Server 应用程序中 如此处所述MS Doc https learn microsoft com en us aspnet core f
  • TCPDF:将文本剪切到单元格宽度

    我正在广泛使用 TCPDF 的 Cell 方法生成 PDF 报告 使用 Cell 方法打印的文本超出了方法中指定的宽度 我只想打印适合指定宽度的文本部分 但不要溢出或换行到下一行 我不想要字体拉伸策略 我搜索了很多但找不到解决方案 还有其他
  • 如何优雅地为具有多态关联的模型构建表单?

    这是我的模型 class Lesson lt ActiveRecord Base belongs to topic polymorphic gt true validates presence of topic type topic id
  • 如何检测三角形区域的触摸

    对于我的应用程序 我需要将 iPhone 的屏幕对角线分成 4 个部分 并检测哪个部分被触摸 我很困惑 因为我的区域是三角形而不是正方形 我找不到解决方案来检测哪个三角形被触摸 我用 TouchBegan 方法得到了被触摸的点 然后我被卡住
  • 收到电子邮件时电子表格自动更新(发布/订阅)但信息错误[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我在 Google Cloud Platform 上设置了第一个 Pub Sub 它使用 Gmail API 在每次收到电子邮件时更新