【问题标题】:Get message size in Gmail API在 Gmail API 中获取邮件大小
【发布时间】:2019-05-28 15:12:06
【问题描述】:

使用 Gmail API,我尝试按大小查找特定的电子邮件。 我希望能够读取消息大小。

API site我找不到这样的方法。

我已经看到了其他使用 .js 脚本的方法,但我使用的是 google 脚本,如下所示:

function label_messages_without_response() {
  var emailAddress = Session.getEffectiveUser().getEmail();
  //Logger.log(emailAddress);

  threads = GmailApp.search("less");

  var size_total = 0;

  Logger.log(size_total);
  for (var i = 0; i < threads.length; i++)
  {
    var thread = threads[i];
    var lastMessage = thread.getMessages()[thread.getMessageCount()-1];
    //size_total+= thread.getMessages()[0].getSubject();   
    Logger.log(thread.getMessages()[0].getSubject());
   }

  Logger.log(size_total);
}

【问题讨论】:

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


    【解决方案1】:
    • 您要检索GmailApp.search() 检索到的电子邮件的总大小。
      • 您认为的大小单位是“字节”。
    • 您希望使用 Google Apps 脚本实现此目的。

    如果我的理解是正确的,那么这个示例脚本怎么样?搜索查询的size:larger:smaller: 使用的大小是正文大小。在这个示例脚本中,我使用了这个。

    示例脚本:

    function label_messages_without_response() {
      var threads = GmailApp.search("less");
      var size_total = 0;
      for (var i = 0; i < threads.length; i++) {
        var messages = threads[i].getMessages();
        for (var j = 0; j < messages.length; j++) {
          var mailSize = messages[j].getBody().length; // Or  messages[j].getRawContent().length
          size_total += mailSize;
          Logger.log("Subject: %s, size: %s", messages[j].getSubject(), mailSize);
        }
      }
      Logger.log("Total size: %s", size_total);
    }
    

    注意:

    • 如果您想检索每封电子邮件的完整大小,请将var mailSize = messages[j].getBody().length 替换为var mailSize = messages[j].getRawContent().length。这样就可以检索到正文、附件和标题中包含特殊字符的大小。

    参考资料:

    【讨论】:

    • 如果我没记错的话,getBody() 返回字符串并且您正在计算该字符串的长度(即字符数)。所以,这是基于1 byte=1 character。对吗?
    • @TheMaster 感谢您的评论。是的。如果正文只是sample 的文本,则值为6 字节。在这种情况下,我在搜索查询中使用 size: 将值对应起来。例如,如果要检索整封电子邮件的值,请将var mailSize = messages[j].getBody().length 替换为var mailSize = messages[j].getRawContent().length。但是,不幸的是,我不确定 OP 所想的大小是否是他们。
    • @TheMaster 感谢您的回复。当使用 Gmail API 中的 messages.get 方法时,可以获取原始数据,即字节数组。该值包括特殊字符、附件文件等。而且,当我比较 Gmail API 中的 messages.get 方法和 GmailApp 的 getRawContent 方法检索到的值的大小时,发现两者的大小是相同的。因此,如果 OP 需要整封电子邮件的大小,我建议使用getRawContent()。关于这个,我更新了我的答案。
    • 第二行:search("less"),这不应该是“smaller:1M”之类的吗?
    • @meleneemil 感谢您的回复。关于您的回复,我原以为您想从您的问题中检索电子邮件的大小(正文或原始),包括 less 的值。当您将查询设置为smaller:1M 时,可以检索正文大小小于1 MByte 的电子邮件。如果您想要大小小于 1 MByte 的电子邮件作为原始大小,smaller:1M 不适合。需要使用脚本。我可以问你想要的the message size吗?您想要电子邮件的正文大小还是原始大小?我对你的问题的理解正确吗?
    猜你喜欢
    • 2016-01-08
    • 2016-04-17
    • 2023-04-10
    • 2014-08-26
    • 2016-12-12
    • 2014-08-19
    • 1970-01-01
    • 2016-10-06
    • 2016-12-23
    相关资源
    最近更新 更多