【问题标题】:Modify only the subject and send the draft只修改主题并发送草稿
【发布时间】:2019-07-11 18:16:43
【问题描述】:

我知道怎么send a Gmail draft with:

var draft = GmailApp.getDrafts()[0]; 
var msg = draft.send();

以及如何使用update修改草稿:

draft.update("mike@example.com", "current time", "The time hello")

但是如何只修改主题而不修改内容,不修改附件(如果有的话),不修改收件人?

【问题讨论】:

  • gmail api 为每个单独的设置器 developers.google.com/gmail/api/guides/drafts 但应用程序脚本 api 似乎没有这些...奇怪,你是否尝试过设置器?即使它们没有在 api 中列出?
  • 谢谢@Erch,你是说email.setSubject(subject);吗?
  • 无论是那个还是直接在草稿上,但这是一个很长的镜头,因为在 api 中没有这样的设置器
  • @Erch TypeError: Cannot find function setSubject in object GmailMessage,在对象 GmailDraft 中相同。
  • mhh 没有惊喜 tbh,我认为现在有办法,但是将值存储在某处创建邮件并在更新中重用它们

标签: google-apps-script gmail gmail-api


【解决方案1】:
  • 您只想更新草稿的主题。
  • 您不想修改文本正文、HTML 正文和附件文件。
  • 您希望使用 Google Apps 脚本实现此目的。

如果我的理解是正确的,那么这个示例脚本怎么样?我认为有几个答案。所以请认为这只是其中之一。

在这个示例脚本中,我使用了类 GmailApp 和 Gmail API。脚本流程如下。

  1. 使用类 GmailApp 以文本形式检索草稿的原始数据。
  2. 替换原始数据的主题。
  3. 使用Utilities.base64EncodeWebSafe()将文本转换为base64。
  4. 通过 Gmail API 使用新的原始数据更新草稿。

通过这个流程,只能更新主题。

在运行此脚本之前,请在高级 Google 服务和 API 控制台中启用 Gmail API。

在高级 Google 服务中启用 Gmail API v1

  • 在脚本编辑器上
    • 资源 -> 高级 Google 服务
    • 开启 Gmail API v1

在 API 控制台启用 Gmail API

  • 在脚本编辑器上
    • 资源 -> 云平台项目
    • 查看 API 控制台
    • 在开始时,单击“探索并启用 API”。
    • 点击左侧的库。
    • 在搜索 API 和服务时,输入“Gmail”。然后点击 Gmail API。
    • 点击启用按钮。
    • 如果API已经开启,请不要关闭。

示例脚本:

function updateDraftmail() {
  var newSubject = "new subject"; // Please set new subject.
  var userId = "me"; // Please set userId.
  var draft = GmailApp.getDrafts()[0]; // Retrieve a draft.

  var raw = draft.getMessage().getRawContent();
  var newRaw = raw.replace(/Subject: \w.+/, "Subject: " + newSubject);
  var newRawB64 = Utilities.base64EncodeWebSafe(newRaw, Utilities.Charset.UTF_8);
  Gmail.Users.Drafts.update({message: {raw: newRawB64}}, userId, draft.getId());
}

参考资料:

如果我误解了您的问题并且这不是您想要的,我深表歉意。

【讨论】:

  • 非常感谢@Tanaike。只是一个旁注:在我的真实代码中应该是什么而不是var userId = "me"; // Please set userId.?我的电子邮件是这样的:myaddress@gmail.com?或者一个 ID(在哪里可以找到?)
  • @Basj 感谢您的回复。您可以同时使用me 和您的电子邮件userId。比如你也可以在here看到关于userId的文档。
猜你喜欢
  • 1970-01-01
  • 2013-06-29
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
  • 2018-01-16
  • 2016-05-12
  • 1970-01-01
  • 2021-07-23
相关资源
最近更新 更多