3

我正在使用 Google Script 发送电子邮件并查找对它的任何回复(应该只有一个回复,但这在这里并不真正相关)。理论上,我可以使用搜索、标签和ReplyTo:选项GmailApp.sendEmail来跟踪事物。但是,我遇到了几个重叠的问题/担忧,因为:

  • 我每周都发送相同的电子邮件,所以搜索很挑剔
  • Scripts/Gmail 的更新速度似乎不够快,无法找到它刚刚发送的电子邮件

我想使用 Gmail 为每封电子邮件提供的唯一 ID,但由于该GmailApp.sendEmail方法返回一个GmailApp对象而不是一个GmailMessage对象,这似乎是不可能的。

那么,如何以编程方式跟踪我以编程方式发送的电子邮件?

下面是我正在使用的代码。对工作流程和方法的更改持开放态度,但希望将其保留在 Google Apps 脚本中。

function trigger(minutes){
ScriptApp.newTrigger("checkForEmail")
.timeBased()
.after(100*60*minutes)
.create()
};

function sendEmail(){
//send the email
    GmailApp.sendEmail("name@gmail.com","Subject","Body",{replyTo: "myname+modifier@gmail.com"});
    //get the Id of the email that was just sent
    var emailId GmailApp.search("replyTo:name+modifier@gmail.com",0,1)[0].getMessages()[0];
    ScriptProperties.setProperty("emailId", emailId);
    //set a trigger to check later
    trigger(45)
    };

function checkForEmail(){
var emailId = ScriptProperties.getProperty("emailId");
var email = GmailApp.getMessageById(emailId);
var count = email.getThread().getMessageCount();
var command = "checkForEmail"
if (count == 1){
//set trigger to check again
ScriptApp.deleteTrigger(command)
trigger(5)
}
if (count == 2){
//do stuff with the new email: alert me, download attachments, etc.
var attachments = email.getThread().getAttachments()
ScriptApp.deleteTrigger(command);
}
else {
//something is weird, let me know
var body = "there was an error with checking an email ("+emailId+")."
GmailApp.sendEmail("myname@gmail.com","Error",body);
ScriptApp.deleteTrigger(command);
};
};
4

2 回答 2

2

尝试制作草稿,然后发送。

var message = GmailApp.createDraft("name@gmail.com","Subject","Body",{replyTo: "myname+modifier@gmail.com"}).send();
于 2017-10-04T21:55:46.747 回答
1

对于搜索Gmail的问题,有以下Gmail搜索运营商,运营商after: before:可以帮到你。

要获取发送的电子邮件的ID,我不知道如何轻松获取它。想到并且您可以适应和测试的概念证明是这样的:

   ...
   GmailApp.sendEmail("name@gmail.com","Subject","Body",{replyTo: "myname+modifier@gmail.com"});
   do {
     /* The search should be as accurate as you can */
     threads = GmailApp.search('replyTo:name+modifier@gmail.com is:sent before:2013/08/27 after:2013/08/27 subject:"Subject"', 0, 1);
   } while(!threads.length);
   ...

除了进行所有必要的验证(例如设置超时以避免无限循环)之外,还必须检查这不会产生问题,例如Script invoked too many times for this user per second等。

另一种选择可能是设置另一个触发器来查找已发送邮件的 ID。这些只是一些想法。

于 2013-08-27T18:47:33.193 回答