Google Apps 脚本/正则表达式仅显示电子邮件中的最新消息"train"
Google Apps Script / Regular expression to show only latest message in an email "train"
email train = 一封电子邮件的全部内容,包括以前的消息
电子邮件 线程 = Google Apps 脚本消息数组
问题:在 Google Apps 脚本中,我如何才能仅从电子邮件序列中导入最新的电子邮件?
我有一个基于 GmailApp class 的简单 Google Apps 脚本。最终,这会将所有发往和发自给定地址的电子邮件(使用搜索查询)导入电子表格:
var threads = GmailApp.search('from: test@gmail.com OR to: test@gmail.com');
Logger.log("Thread count: " + threads.length);
for (var i = 0; i < threads.length; i++) {
Logger.log("Subject:" + threads[i].getFirstMessageSubject());
Logger.log("ID:" + threads[i].getId());
var messages = threads[i].getMessages();
for (var j = 0; j < messages.length; j++) {
Logger.log(messages[j].getPlainBody());
}
}
电子邮件的一般问题是,当有人回复电子邮件时,它会包含原始文本。回复 5 或 6 次后,每封邮件都会变得很长,并且在如上所述导入 Gmail 线程中的所有邮件时,会出现大量重复。
gmail.com 网络界面通过使用省略号按钮解决了这个问题:
如何复制这个黑魔法?
我知道任何给定的解决方案都不是完美的。
我的第一个想法是使用某种正则表达式,但我不知道从哪里开始。
的确,正则表达式可以为这个问题提供一个不完美的解决方案。对于 U.S。时间和日期标准,以下匹配引用邮件前面的 Gmail 日期时间字符串:
var prev = /On (?:Sun|Mon|Tue|Wed|Thu|Fri|Sat), (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{1,2}, \d{4} at \d{1,2}:\d{2} [AP]M,/;
然后在循环中,可以截断从该日期时间开始的每条消息。
for (var j = 0; j < messages.length; j++) {
var text = messages[j].getPlainBody();
var match = text.match(prev);
if (match) {
text = text.slice(0, match.index);
}
Logger.log(text);
}
如果一些参与者对 Gmail 使用不同的区域设置,这将失败。当然,可以尝试调整这一点,例如,将星期几和 [AP]M
设为可选。
email train = 一封电子邮件的全部内容,包括以前的消息
电子邮件 线程 = Google Apps 脚本消息数组
问题:在 Google Apps 脚本中,我如何才能仅从电子邮件序列中导入最新的电子邮件?
我有一个基于 GmailApp class 的简单 Google Apps 脚本。最终,这会将所有发往和发自给定地址的电子邮件(使用搜索查询)导入电子表格:
var threads = GmailApp.search('from: test@gmail.com OR to: test@gmail.com');
Logger.log("Thread count: " + threads.length);
for (var i = 0; i < threads.length; i++) {
Logger.log("Subject:" + threads[i].getFirstMessageSubject());
Logger.log("ID:" + threads[i].getId());
var messages = threads[i].getMessages();
for (var j = 0; j < messages.length; j++) {
Logger.log(messages[j].getPlainBody());
}
}
电子邮件的一般问题是,当有人回复电子邮件时,它会包含原始文本。回复 5 或 6 次后,每封邮件都会变得很长,并且在如上所述导入 Gmail 线程中的所有邮件时,会出现大量重复。
gmail.com 网络界面通过使用省略号按钮解决了这个问题:
如何复制这个黑魔法?
我知道任何给定的解决方案都不是完美的。
我的第一个想法是使用某种正则表达式,但我不知道从哪里开始。
的确,正则表达式可以为这个问题提供一个不完美的解决方案。对于 U.S。时间和日期标准,以下匹配引用邮件前面的 Gmail 日期时间字符串:
var prev = /On (?:Sun|Mon|Tue|Wed|Thu|Fri|Sat), (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{1,2}, \d{4} at \d{1,2}:\d{2} [AP]M,/;
然后在循环中,可以截断从该日期时间开始的每条消息。
for (var j = 0; j < messages.length; j++) {
var text = messages[j].getPlainBody();
var match = text.match(prev);
if (match) {
text = text.slice(0, match.index);
}
Logger.log(text);
}
如果一些参与者对 Gmail 使用不同的区域设置,这将失败。当然,可以尝试调整这一点,例如,将星期几和 [AP]M
设为可选。