【问题标题】:Accessing sent email in Google Apps Script在 Google Apps 脚本中访问已发送的电子邮件
【发布时间】:2013-08-30 12:09:40
【问题描述】:

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

  • 我每周都发送相同的电子邮件,所以搜索很挑剔
  • 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);
};
};

【问题讨论】:

    标签: email google-apps-script gmail


    【解决方案1】:

    关于搜索Gmail的问题,有以下Gmail search运营商,运营商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。这些只是一些想法。

    【讨论】:

      【解决方案2】:

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

      var message = GmailApp.createDraft("name@gmail.com","Subject","Body",{replyTo: "myname+modifier@gmail.com"}).send();
      

      【讨论】:

        猜你喜欢
        • 2021-11-21
        • 1970-01-01
        • 1970-01-01
        • 2020-05-10
        • 2013-08-15
        • 2020-12-15
        • 2016-05-05
        • 2023-02-07
        相关资源
        最近更新 更多