【问题标题】:How to extract full body content of a Bounced back email?如何提取退回电子邮件的全文?
【发布时间】:2017-05-08 02:28:07
【问题描述】:

上面的截图是收到的退回邮件的示例。

我正在使用以下代码提取邮件正文。

function test() 
{
  var BouncedEmails = GmailApp.search("label:test The following message was undeliverable ");

  for( var i=0;i<BouncedEmails.length;i++)
  {
    var Gmessage = GmailApp.getMessagesForThread(BouncedEmails[i]);

    for(var j=0;j<Gmessage.length;j++)
    {
      var body = Gmessage[j].getPlainBody();
      Logger.log(body);
    }
  }
}

但是当我这样做时,我得到了以下输出。

如您所见,Body 的最后一部分丢失了,即:

我也尝试过使用:

var body = Gmessage[j].getBody();

而不是“GetPlainBody()”,但输出仍然相同。

关于使用:

 var body = Gmessage[j].getRawContent();

我将此作为缺失部分的输出,在我看来这是某种编码。

所以我的问题是,我如何提取退回邮件的全部内容?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    不要使用 Logger.log,因为它会在一定数量的行之后截断输出。将输出记录到电子表格中,您会看到使用 getPlainBody() 或 getBody() 提取了整个正文。

    我最近发布了一个 Google 脚本来获取所有 bounced emails in Gmail 并将它们记录到 Google 表格中。它是开放的,因此可以基于该脚本进行构建。

    【讨论】:

    • 感谢您的建议,但在将问题发布到此处之前,我已经尝试将输出记录在电子表格中。输出还是一样的。
    • 我浏览了你发布的脚本,做得很好。但是我自己能够完成的那部分,有一个附加任务,我正在尝试实现提取未发送的原始邮件的主题 (或者被反弹回来)。
    【解决方案2】:

    我还尝试对退回的电子邮件使用getBody()getPlainBody()getRawContent() 方法。我注意到这些方法没有给出电子邮件的整个正文,即日志中完全跳过了技术细节部分。

    所以,我使用了以下代码(所有归功于 @Amit Agarwal),我在 Amit 在他的回答中分享的链接中找到了该代码,它给了我整个退回的电子邮件。

    代码如下:

    var t = "in:anywhere from:(mailer-daemon@google.com OR mailer-daemon@googlemail.com)";
    GmailApp.search(t,0,500).forEach(function(t)
                                              {
                                                t.getMessages().forEach(function(r)
                                                                        {
                                                                          if(r.getFrom().indexOf("mailer-daemon")!==-1)
                                                                          {
                                                                            var i=r.getPlainBody();
                                                                            Logger.log(i);
                                                                          }
                                                                        }
                                                                        )
                                              }
    
    )
    

    它对我有用,并在日志本身中提供了全部内容。希望这会有所帮助。

    【讨论】:

    • 我已经为我的案例尝试过这个,不幸的是结果令人失望。不过感谢您的尝试。
    • 不客气。如果可以,请尝试更改服务器端的退回电子邮件格式。此外,请尝试重新创建问题并检查其行为是否相同,或者仅在您检查过的电子邮件的情况下才会如此。
    • @ShyamKansagra 答案对我有用。主题是否仍在被编码?你可以发布你上面的代码时得到的日志吗?
    • @utphx 没有理解“主题是否仍在编码中”的意思。顺便说一句,如果我使用简单的getPlainBody(),我得到的是被退回的实际电子邮件的正文,而不是退回的电子邮件正文。但是在使用上面的代码之后,我得到了整个退回的电子邮件
    • @utphx 好的。不,在我的情况下,主题没有被编码。它按原样显示。
    【解决方案3】:

    我终于找到了自己问题的答案。

    这对我有用,而且对我们这个星球上的任何人几乎都有效。

    function test()
    {
      var BouncedEmails = GmailApp.search("label:test The following message was undeliverable ");
    
      for( var i=0;i<BouncedEmails.length;i++)
      {
        var threadId = BouncedEmails[i].getId();
    
        var id = Session.getEffectiveUser().getEmail();
        var body = Gmail.Users.Threads.get(id, threadId, {format : 'full'});
    
        var messages = body.messages;
    
        var payLoad = messages[0].payload.parts[2];
    
        var string = JSON.stringify(payLoad);
        Logger.log(string);
      }
    }   
    

    @AmitAgarwal 和 @ShyamKansagra 提供的解决方案也适用于某些情况,但使用哪种解决方案取决于您的确切要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      • 2020-08-26
      • 1970-01-01
      • 2011-05-24
      • 2013-04-15
      • 2016-09-28
      • 2014-04-07
      相关资源
      最近更新 更多