如何提取退回电子邮件的完整内容?

How to extract full body content of a Bounced back email?

以上截图是收到退回邮件的样本。

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

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();

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

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

谢谢。

不要使用 Logger.log,因为它会在一定行数后截断输出。将输出记录在 spreadsheet 中,您会看到完整的 body 是使用 getPlainBody() 或 getBody() 提取的。

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

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

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

代码如下:

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);
                                                                      }
                                                                    }
                                                                    )
                                          }

)

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

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

这对我有用,对我们星球上的任何人都非常有用。

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 提供的解决方案也适用于某些情况,但使用哪种解决方案取决于您的具体要求。