【问题标题】:How to retrieve the ID of the sent e-mail via GmailApp?如何通过 Gmail App 检索已发送电子邮件的 ID?
【发布时间】:2014-10-14 21:49:36
【问题描述】:

这是一个示例代码

GmailApp.sendEmail("email@example.com", "mail subject", "mail body");

通话后,我可以在我的 gmail 帐户中看到一条已发送的消息,其 ID 类似于 147f7e77a4efed11 我想通过上述代码检索已发送邮件的此 ID

sendEmail 方法返回GmailApp 的实例,这对于链接操作很有用,但无法获取已发送电子邮件的 ID。

我现在正在做的是执行搜索并获取第一条消息。但我确信这不是一个可靠的方法。

例子

var message = GmailApp.search("to:email@example.com", 0, 1)[0].getMessages()[0];

现在我可以获取消息的 ID 并执行所需的操作。

是否可以在不可靠搜索的情况下检索消息或消息的 ID?

【问题讨论】:

    标签: javascript google-apps-script google-docs-api google-drive-api gmail-api


    【解决方案1】:

    构建服务后,您可以使用messages.list,然后像在GMail 中搜索一样过滤它们,您也可以使用labels 仅获取已发送的邮件等。

    messages = gmail_service.users().messages().list(userId='me', q="subject:mail subject deliveredto:email@example.com", maxResults=1).execute()
    if messages['messages']:
        for message in messages['messages']:
            print 'message ID: %s' % (message['id'])
    

    如果您将要搜索的电子邮件和其他“唯一”引用作为 Python 函数中的参数传递,它也会变得更加通用。

    编辑:在与您交谈后,我认为为发送的每封电子邮件创建您自己的个人 ID/参考将是最谨慎的检索方法。我推荐使用faker,他们有一个javascript版本,我使用faker来满足我所有的数据需求。它有很多文档,然后您可以根据您设置 ID 的方式过滤您的列表。

    【讨论】:

    • 感谢您的努力,但这种方法也将面临与搜索相同的问题。这种方法的问题是你不能相信结果。这段代码应该在多用户环境中运行,并且这种方法很有可能会从两个同时调用返回相同的消息而错过其中一个。
    • 此代码用于邮件服务,它基于来自多个用户的触发器。因此在同一个帐户/收件箱上调用服务的多个会话。
    • 添加自定义 ID!谢谢Stormie,您可以在答案中添加相同的内容。这实际上可以解决我的问题。一直以来,我一直在寻找正在生成的唯一 ID,现在我意识到我也可以生成相同的 ID。再次感谢您。
    • 非常感谢您的建议以及伪造者的链接
    • 没问题,我已经在同一条船上好几次了:)
    【解决方案2】:

    您可以直接使用新的 gmail api。您将需要手动 oauth 流程来获取令牌,然后使用 urlFetch 进行调用。
    https://developers.google.com/gmail/api/v1/reference/users/messages/send
    它返回一个带有其 id 的消息资源。使用高级服务也可以做到这一点,但我还没有尝试过。我已经用 urlfetch 完成了它并且工作正常。

    【讨论】:

    • 看起来很有希望,让我们看看如何使用它,因为我的代码在 Google 脚本中。
    • 可以从应用程序脚本调用,我做到了。见 urlfetchApp
    【解决方案3】:

    您可以在电子邮件上设置 Message-Id 标头吗? (不确定应用程序脚本是否允许或覆盖它。)如果是这样,我会这样生成一个唯一的 Id,您可以使用搜索“rfc822msgid:”来查找它。

    【讨论】:

    【解决方案4】:

    先创建草稿,然后发送

    function sendEmail(opts) {
      let draft = GmailApp.createDraft(recipient=opts.recipient, subject=opts.title, {
          htmlBody: opts.msg,
      });
      draft.send()
      let ret = {
        id: draft.getId(),
        messageId: draft.getMessageId(),
      }
      console.log('sendEmail results: ', ret )
      return ret
    }
    

    【讨论】:

      猜你喜欢
      • 2016-10-27
      • 2012-01-07
      • 2023-03-19
      • 2016-09-26
      • 2011-06-01
      • 2018-03-21
      相关资源
      最近更新 更多