Gmail 插件 createdraftreply() 回复自己

问题描述 投票:0回答:2

我参考的是官方指南 这里

创建回复草稿。

  var composeAction = CardService.newAction()
      .setFunctionName('createReplyDraft');
  var composeButton = CardService.newTextButton()
      .setText('Compose Reply')
      .setComposeAction(composeAction, CardService.ComposedEmailType.REPLY_AS_DRAFT);

  // ...

  /**
   *  Creates a draft email (with an attachment and inline image)
   *  as a reply to an existing message.
   *  @param {Object} e data passed by the compose action.
   *  @return {ComposeActionResponse}
   */
  function createReplyDraft(e) {
    // Activate temporary Gmail add-on scopes, in this case to allow
    // a reply to be drafted.
    var accessToken = e.messageMetadata.accessToken;
    GmailApp.setCurrentMessageAccessToken(accessToken);

    // Creates a draft reply.
    var messageId = e.messageMetadata.messageId;
    var message = GmailApp.getMessageById(messageId);
    var draft = message.createDraftReply('',
        {
            htmlBody: "Kitten! <img src='cid:kitten'/>",
            attachments: [
              UrlFetchApp.fetch('https://example.com/images/myDog.jpg')
                  .getBlob()
            ],
            inlineImages: {
              "kitten": UrlFetchApp.fetch('https://example.com/images/myKitten.jpg')
                           .getBlob()
            }
        }
    );

    // Return a built draft response. This causes Gmail to present a
    // compose window to the user, pre-filled with the content specified
    // above.
    return CardService.newComposeActionResponseBuilder()
        .setGmailDraft(draft).build();
  }

当线程中的最后一条消息来自其他人时,它工作正常, 但当最后一条消息来自你自己时, 新草稿的收件人地址是您的地址,而不是其他人。

1.

(最后一条消息)其他人→我

createDraftReply()

(草稿)我→其他人

2.

(最后一条消息)我→其他人

createDraftReply()

(草稿)我→我

如何创建包含正确收件人的回复草稿?

gmail-addons
2个回答
0
投票

在创建回复草稿之前,请检查收件人地址是否为 self。 如果 TO 是自己,则创建回复所有草稿而不是回复草稿 否则创建回复草稿。

if(message.getTo() === Session.getEffectiveUser().getEmail())

这是您可以检查的方式。

还有一种方法,你可以遍历所有的邮件,从局外人那里挑选最新的邮件,并为它创建一个回复草稿。

var mssgs = message.getThread().getMessages();

0
投票

正在用这个来敲我的头,最终找到了解决方法。 这个想法是创建一个 empty createDraftReplyAll 然后使用 GMAILDraft 中的 .update() 来设置新的收件人。

下面是一个丑陋的代码,但希望能有所帮助。在我的例子中,我在同一个 gmail 帐户下有多个电子邮件地址,所以我也循环使用“ME_ALIAS”。

var accessToken = e.gmail.accessToken;
GmailApp.setCurrentMessageAccessToken(accessToken);

var htmlEmailBody = "All good?";
var messageId = e.gmail.messageId;
var message = GmailApp.getMessageById(messageId);
var lastMessage = message.getThread().getMessages().pop();

// Get all recipients (To and Cc) from the last message as a string.
var lastRecipientsString = lastMessage.getTo() + "," + lastMessage.getFrom();
if(lastMessage.getCc()) {
  lastRecipientsString += ","+lastMessage.getCc();
}

//create empty draft reply
var draft = message.createDraftReplyAll('');

// Parse the recipients string into an array of email addresses.
var lastRecipients = lastRecipientsString.split(',');

// Create an array of email addresses to add to the "To" field.
var toRecipients = [];
for (var i = 0; i < lastRecipients.length; i++) {
  var isMe = false;
  for (var j = 0; j < ME_ALIAS.length; j++) {
    if (lastRecipients[i].indexOf(ME_ALIAS[j]) !== -1) {
      isMe = true;
      break;
    }
  }
  if (!isMe) {
    toRecipients.push(lastRecipients[i]);
  }
}


// Get the current draft message body, subject, and recipient.
var currentMessage = draft.getMessage();
var currentSubject = currentMessage.getSubject();

// Modify the draft email to set the other person's email as the "To" field.
draft.update(toRecipients.join(','), currentSubject, null, {
    cc: '',
    bcc: '',
    htmlBody: htmlEmailBody
});

CardService.newComposeActionResponseBuilder().setGmailDraft(draft).build();
© www.soinside.com 2019 - 2024. All rights reserved.