如何提取退回电子邮件的完整内容?
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 提供的解决方案也适用于某些情况,但使用哪种解决方案取决于您的具体要求。
以上截图是收到退回邮件的样本。
我正在使用以下代码提取邮件正文。
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);
}
}
}
但是当我这样做时,我得到了以下输出。
我也试过使用:
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 提供的解决方案也适用于某些情况,但使用哪种解决方案取决于您的具体要求。