3

私は Google Script を使用して電子メールを送信し、それに対する応答を探しています (応答は 1 つだけである必要がありますが、ここではあまり関係ありません)。理論的には、検索、ラベル、およびReplyTo:オプションを使用GmailApp.sendEmailして物事を追跡できます。ただし、次の理由により、重複する問題/懸念がいくつかあります。

  • 毎週同じメールを送っているので検索が面倒
  • Scripts/Gmail は、送信したばかりの電子メールを見つけるのに十分な速さで更新されていないようです

Gmail がすべてのメールに与える一意の ID を使用したいのですが、メソッドがオブジェクトではなくオブジェクトGmailApp.sendEmailを返すため、これは不可能のようです。GmailAppGmailMessage

では、プログラムで送信した電子メールをプログラムで追跡するにはどうすればよいでしょうか?

以下は私が使用しているコードです。ワークフローと方法論の変更を受け入れますが、これを Google Apps Script に保持することを希望します。

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