回复Gmail线程会向我发送电子邮件

时间:2017-10-23 18:46:35

标签: javascript google-apps-script

文档:https://developers.google.com/apps-script/reference/gmail/gmail-message#replybody-options

跟进给出的电子邮件在初始电子邮件后没有回复时,reply()会自动发送给我,因为我是发送最后一封电子邮件的人。

因此,例如,客户端A向客户端B发送电子邮件。客户端A运行下面的脚本并回复客户端A,但它应该转到客户端B,因为它只跟进,因为没有来自B的初始回复。这就是Gmail界面的方式。我想发送跟进

我可以运行一个单独的sendmail,但是除非你specify the in-reply-to header或者用户已经响应了现有的线程,否则它将启动一个新的线程,而在我的情况下它们没有。

示例代码:

 message.reply("incapable of HTML", {
   htmlBody: "<b>some HTML body text</b>",
   replyTo: theirEmailAddress,
 });

然而,replyTo实际上只是指定了正在发送的电子邮件的回复部分,因此我们收到的回复。它与实际的to字段aka收件人无关。

如果我replyAll,则电子邮件的标题为:

from: me@me.com
to: them@them.com
cc: me@me.com

因此,我收到了一堆来自我自己的电子邮件。我尝试将cc指定为none,但未更改cc字段。

threads[0].replyAll("Just wanted to follow up and see if you got my last email.", {
htmlBody: followUpText,
cc: null,
});

如何跟进电子邮件,并将其发送给上一封电子邮件的原始收件人?

2 个答案:

答案 0 :(得分:0)

<强>更新 如果您已发起消息&amp;没有收到回复,您可能必须使用GmailApp.search()在已发送的项目中找到它。收到消息后,您可以使用message.forward()模仿Gmail用户界面的行为。请注意,您无法使用message.forward()修改电子邮件的文本正文,但您可以在选项对象中设置htmlBody

e.g。

  var unanswered = GmailApp.search('subject:"unanswered" in:sent');
  var messages = unanswered[0].getMessages();
  var lastMsg = messages[messages.length - 1]; // get the last message in the thread, just in case you have sent multiple reminders with different conent
  // set your followup text. 
  // + Note that message.forward() doesn't append the thread to the reply, so you'll have to do this yourself
  var followupHTML = '<p>Your followup message.</p><div class="gmail_quote">' + lastMsg.getBody() + '</div>';
  lastMsg.forward(lastMsg.getTo(), {subject: lastMsg.getSubject(), htmlBody: "<p><b>forwarded</b></p>" + followupHTML});

否则,对于收件箱中存在的线程,您可以使用以下内容: 查看最新的&amp;使用message.forward()如上所述,您是发件人,否则,只需回复即可。

  var firstThread = GmailApp.getInboxThreads(0,1)[0];
  var messages = firstThread.getMessages();
  var lastMsg = messages[messages.length - 1]; // get the last message in the thread
  // set your followup text. 
  // + Note that message.reply() & message.forward()` don't append the thread to the reply, so you'll have to do this yourself -- both text & HTML
  var followupText = "Your followup text.\n" + (lastMsg.getPlainBody()).replace(/^/gm, "> ");
  var followupHTML = '<p>Your followup message.</p><div class="gmail_quote">' + (lastMsg.getBody()) + '</div>'
  var email_re = new RegExp(Session.getActiveUser().getEmail(), "i");
  if(email_re.test(lastMsg.getFrom())){ 
    lastMsg.forward(lastMsg.getTo(), {lastMsg.getSubject(), htmlBody: followupHTML});
  }
  else{
    lastMsg.reply(followupText, {htmlBody: followupHTML});
  }

或者,遍历线程&amp;找到不是你的最新发件人&amp;回复那封电子邮件。

  var firstThread = GmailApp.getInboxThreads(0,1)[0];
  var messages = firstThread.getMessages();
  var followupText = "Your followup text.";
  var email_re = new RegExp(Session.getActiveUser().getEmail(), "i");
  var mIdx = messages.length - 1; // last message index
  // walk backward through the thread & return the array index of the most recent sender that's not you
  while(email_re.test(messages[mIdx].getFrom())){ --mIdx;  }
  // now, just reply
  messages[mIdx].reply(followupText);

我在测试中遇到的一件事是回复电子邮件大小的quota limit,因此在回复文本中包含邮件正文时需要进行一些谨慎。

希望这有帮助。

答案 1 :(得分:0)

这有点晚了,但我一直在寻找答案,并补充,以防其他任何人搜索并遇到此问题。我不知道这是一个新选项还是一直存在,但这是我找到的解决此收件人身份问题的能力,或者可以在回复线程中更改收件人的问题:

问题:我先向收件人发送一封电子邮件,然后再发送一封,但希望将其保留在同一线程中,所以唯一的方法是通过“回复”,但是“回复”将回复发件人(正确地如此)。在这种情况下,我是发件人,但未收到任何答复,那么该答复将被视为对我的电子邮件的答复,这导致我的电子邮件(原始发件人)被使用,这是不正确的。我希望将其发送给原始收件人。奇怪的是,使用gmail UI,它足够聪明,可以知道,当您在UI中单击“答复”时,它将自动答复原始人。但是使用脚本应用程序并不是那么聪明,它会回复发件人,在这种情况下,发件人是原始发布者,而不是原始接收者。这有点像发送一封电子邮件,然后在您没有收到回复时向同一个人发送另一封“凹凸”电子邮件。或仅发送另一封后续电子邮件,而无需等待回复。

无论如何,我发现您可以创建草稿答复以发送,更新草稿然后发送。 所以像这样(在这种情况下,线程中只有1条消息):

var thread = GmailApp.search("in:sent subject:" + subject, 0, 1);
var msgs = thread[i].getMessages();
var thedraft = msgs[0].createDraftReply("Doesnt matter what goes here",
  {
     htmlBody:"the email message for the body",
  }
);
       
thedraft.update(<recipientEmail>, <subject>, <message>); 
thedraft.send(); // if want to auto send. leave out to manually send

您可以从最初创建的草稿中获取主题和消息以重复使用,只需在第一个参数中更改收件人电子邮件即可。我对此进行了测试,现在当它盲目地抓住发件人电子邮件时,可以覆盖它以使用实际的原始电子邮件收件人。

我希望这可以帮助在这种特定情况下遇到同样问题的任何人。