我有这个功能,我每小时运行一次。它检查收件箱中是否有邮件列表。然后,它重新格式化它们,保存附件,并将它们转发到另一个电子邮件地址,然后表面上丢弃处理过的消息。效果很好,除了..。
我最近遇到了一条不会死的线索。它有50多个回复,当新的回复以相同的主题行出现时,线程中所有已经处理过的旧消息都会再次被处理。因此,我发送的邮箱呈指数增长,收件人的电子邮件收件箱也是如此。我不确定是否只是简单地没有有效地删除发送的消息,或者是否有其他方法来标识线程中已经处理过的消息,这样当更多消息被添加到线程中时,它们就不会再被处理了。我不知道这是应用程序脚本问题还是gmail问题。
这是我的密码:
function processPMFMail(){
var threads = GmailApp.getInboxThreads();
var message = GmailApp.getMessagesForThreads(threads);
for(var i = 0; i < message.length; i++) {
for(var j = 0; j < message[i].length; j++) {
var from = message[i][j].getFrom();
var to = message[i][j].getTo();
var cc = message[i][j].getCc();
var bcc = message[i][j].getBcc();
var fields = {to, cc, bcc};
//Logger.log(to);
if (
[to,cc,bcc].some(field =>
["EMAIL-1","EMAIL-2"].some(email => field.includes(email))
)
) {
var subject = cleanSubject(message[i][j]);
if (subject == "DoNotPost") {
Logger.log("Email not for posting - " + cleanSubject(message[i][j]));
message[i][j].moveToTrash();
} else{
var from = parseEmailName(message[i][j]);
var body = message[i][j].getPlainBody();
var hBody = message[i][j].getBody();
var attachment = saveAttachments(message[i][j]);
var opening = "<br>From: " + from + "<br> Sent: "+ Utilities.formatDate(message[i][j].getDate(), "US/Eastern", "M/d/yy @ h:mm aaa") + "<br><br>" + attachment;
if (hBody.indexOf("</body>")>-1) {
hBody = removeForwards (hBody);
hBody = hBody.replace("</body>",opening + "</body>").trim();
} else{
hBody = hBody + opening;
}
Logger.log(subject + opening);
//send the message
GmailApp.sendEmail("EMAIL-3", subject , opening + body ,
{htmlBody: hBody,
name: from
})
} // end of processed messages
//move the message to the trash
message[i][j].moveToTrash();
}
else {Logger.log("No Messages to forward")}
}
}
}任何指南针都很感激。
-DH
发布于 2020-03-16 11:30:27
因此,如果我正确理解,您将从一个线程中得到所有的消息。
但是最后,这是预期的,因为您首先获得GmailThread,然后检查线程中的每个GmailMessage。即使您已经检查并删除了它,它也是线程的一部分,在使用getMessagesForThreads()时得到它是正常的。
我建议在每条消息中(在for嵌套循环中)使用isInTrash(),以检查是否已经将该消息移动到垃圾中。
就像这样:
function processPMFMail() {
var threads = GmailApp.getInboxThreads();
var message = GmailApp.getMessagesForThreads(threads);
for (var i = 0; i < message.length; i++) {
for (var j = 0; j < message[i].length; j++) {
if (!message[i][j].isInTrash()) {
var from = message[i][j].getFrom();
var to = message[i][j].getTo();
var cc = message[i][j].getCc();
var bcc = message[i][j].getBcc();
var from = message[i][j].getFrom();
var fields = { to, cc, bcc };
//Logger.log(to);
if (
[to, cc, bcc].some(field =>
["EMAIL-1", "EMAIL-2"].some(email => field.includes(email))
)
) {
var subject = cleanSubject(message[i][j]);
if (subject == "DoNotPost") {
Logger.log("Email not for posting - " + cleanSubject(message[i][j]));
message[i][j].moveToTrash();
} else {
var from = parseEmailName(message[i][j]);
var body = message[i][j].getPlainBody();
var hBody = message[i][j].getBody();
var attachment = saveAttachments(message[i][j]);
var opening = "<br>From: " + from + "<br> Sent: " + Utilities.formatDate(message[i][j].getDate(), "US/Eastern", "M/d/yy @ h:mm aaa") + "<br><br>" + attachment;
if (hBody.indexOf("</body>") > -1) {
hBody = removeForwards(hBody);
hBody = hBody.replace("</body>", opening + "</body>").trim();
} else {
hBody = hBody + opening;
}
Logger.log(subject + opening);
//send the message
GmailApp.sendEmail("EMAIL-3", subject, opening + body,
{
htmlBody: hBody,
name: from
})
} // end of processed messages
//move the message to the trash
message[i][j].moveToTrash();
}
else { Logger.log("No Messages to forward") }
}
}
}
}https://stackoverflow.com/questions/60698062
复制相似问题