我参考的是官方指南 这里
创建回复草稿。
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()
(草稿)我→我
如何创建包含正确收件人的回复草稿?
在创建回复草稿之前,请检查收件人地址是否为 self。 如果 TO 是自己,则创建回复所有草稿而不是回复草稿 否则创建回复草稿。
if(message.getTo() === Session.getEffectiveUser().getEmail())
这是您可以检查的方式。
或
还有一种方法,你可以遍历所有的邮件,从局外人那里挑选最新的邮件,并为它创建一个回复草稿。
var mssgs = message.getThread().getMessages();
正在用这个来敲我的头,最终找到了解决方法。 这个想法是创建一个 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();