Apps 脚本 Gmail createDraftReplyAll 错误的收件人:将我作为收件人而不是其他方
Apps Script Gmail createDraftReplyAll wrong recipient: Puts me as recipient instead of other party
我有一个用于创建新 Gmail 草稿的工作脚本,但是当我在现有线程中使用 createDraftReplyAll
时,它会将线程最后一封电子邮件的发件人作为草稿的收件人。
所以如果我发了最后一封邮件,我就成了回复的收件人,对方是抄送的。如果其他人写了最后一封电子邮件,他们就是收件人,但我会被抄送。与在 Gmail 中手动创建草稿(即通过单击“全部回复”)相比,这是不正常的行为,在这种情况下,收件人将始终是另一方。
此处显示(运行 下面脚本的结果):
在 Gmail 中单击“全部回复”的正常行为:
这是我用来创建草稿的功能。已通过主题和原始消息日期找到该主题:
function createDraftReplyInThread(emailThread, htmlTemplateFileName) {
Logger.log(">> IN createDraftReplyInThread");
Logger.log("htmlTemplateFileName: " + htmlTemplateFileName);
if (emailThread) {
let emailTo = emailThread.to;
Logger.log('Thread TO: ' + emailTo);
let threadMessages = emailThread.getMessages();
let messageCount = threadMessages.length;
let lastMessage = threadMessages[messageCount - 1];
let htmlTemplate = HtmlService.createTemplateFromFile(htmlTemplateFileName);
let htmlBodyContent = htmlTemplate.evaluate().getContent();
var myReplyID = lastMessage.createDraftReplyAll(
"Plain text for draft reply (not used)",
{
'htmlBody': htmlBodyContent
}).getId();
Logger.log(`Draft created in thread; myReplyID: ${myReplyID}`); // just to show it's executed okay
return;
}
return null;
}
最好忽略这一点,但我确实尝试使用有限的现有更新方法来复制内容、更改收件人并在新草稿中恢复内容(纯属猜测)。请注意, draft.update() 确实可以更改收件人,但它还需要一个 Message 参数,但我未能开始工作。可能吗?
// based off Whosebug:
function _sandbox_draftModify() {
var draft = GmailApp.getDrafts()[0];
var draftAsMessage = draft.getMessage();
var recipients = draftAsMessage.getTo();
var subject = draftAsMessage.getSubject();
var origRaw = draftAsMessage.getRawContent();
var newRaw = origRaw.replace("new draft", "old draft");
var newRawB64 = Utilities.base64EncodeWebSafe(newRaw, Utilities.Charset.UTF_8);
var emailTo = 'recipientsemail@gmail.com';
Logger.log(`recipients: ${recipients}`);
Logger.log(`subject: ${subject}`);
Logger.log(`newRaw: ${newRaw}`);
draft.update(emailTo, subject, { message: { raw: newRawB64 } });
var draftNew = GmailApp.getDrafts()[0];
userId = 'me';
Gmail.Users.Drafts.update({ message: { raw: newRawB64 } }, userId, draftNew.getId());
Logger.log("Done");
}
最后,我需要的是能够为现有线程创建电子邮件草稿(我已经可以做到),但具有正确的收件人,然而,这可能会实现。
这似乎是 createDraftReplyAll
方法的预期行为。
如果您在此处查看文档页面:
createDraftReplyAll(body)
Creates a draft message replying to the sender of the last message in this thread, using the reply-to address and all recipients of this message. The size of the email (including headers) is quota limited.
但是,如果您想要复制 UI 行为的功能,可以在问题跟踪器上提交功能请求。可以在此 link 找到该表格,并确保填写所有必要信息。
参考
我有一个用于创建新 Gmail 草稿的工作脚本,但是当我在现有线程中使用 createDraftReplyAll
时,它会将线程最后一封电子邮件的发件人作为草稿的收件人。
所以如果我发了最后一封邮件,我就成了回复的收件人,对方是抄送的。如果其他人写了最后一封电子邮件,他们就是收件人,但我会被抄送。与在 Gmail 中手动创建草稿(即通过单击“全部回复”)相比,这是不正常的行为,在这种情况下,收件人将始终是另一方。
此处显示(运行 下面脚本的结果):
在 Gmail 中单击“全部回复”的正常行为:
这是我用来创建草稿的功能。已通过主题和原始消息日期找到该主题:
function createDraftReplyInThread(emailThread, htmlTemplateFileName) {
Logger.log(">> IN createDraftReplyInThread");
Logger.log("htmlTemplateFileName: " + htmlTemplateFileName);
if (emailThread) {
let emailTo = emailThread.to;
Logger.log('Thread TO: ' + emailTo);
let threadMessages = emailThread.getMessages();
let messageCount = threadMessages.length;
let lastMessage = threadMessages[messageCount - 1];
let htmlTemplate = HtmlService.createTemplateFromFile(htmlTemplateFileName);
let htmlBodyContent = htmlTemplate.evaluate().getContent();
var myReplyID = lastMessage.createDraftReplyAll(
"Plain text for draft reply (not used)",
{
'htmlBody': htmlBodyContent
}).getId();
Logger.log(`Draft created in thread; myReplyID: ${myReplyID}`); // just to show it's executed okay
return;
}
return null;
}
最好忽略这一点,但我确实尝试使用有限的现有更新方法来复制内容、更改收件人并在新草稿中恢复内容(纯属猜测)。请注意, draft.update() 确实可以更改收件人,但它还需要一个 Message 参数,但我未能开始工作。可能吗?
// based off Whosebug:
function _sandbox_draftModify() {
var draft = GmailApp.getDrafts()[0];
var draftAsMessage = draft.getMessage();
var recipients = draftAsMessage.getTo();
var subject = draftAsMessage.getSubject();
var origRaw = draftAsMessage.getRawContent();
var newRaw = origRaw.replace("new draft", "old draft");
var newRawB64 = Utilities.base64EncodeWebSafe(newRaw, Utilities.Charset.UTF_8);
var emailTo = 'recipientsemail@gmail.com';
Logger.log(`recipients: ${recipients}`);
Logger.log(`subject: ${subject}`);
Logger.log(`newRaw: ${newRaw}`);
draft.update(emailTo, subject, { message: { raw: newRawB64 } });
var draftNew = GmailApp.getDrafts()[0];
userId = 'me';
Gmail.Users.Drafts.update({ message: { raw: newRawB64 } }, userId, draftNew.getId());
Logger.log("Done");
}
最后,我需要的是能够为现有线程创建电子邮件草稿(我已经可以做到),但具有正确的收件人,然而,这可能会实现。
这似乎是 createDraftReplyAll
方法的预期行为。
如果您在此处查看文档页面:
createDraftReplyAll(body)
Creates a draft message replying to the sender of the last message in this thread, using the reply-to address and all recipients of this message. The size of the email (including headers) is quota limited.
但是,如果您想要复制 UI 行为的功能,可以在问题跟踪器上提交功能请求。可以在此 link 找到该表格,并确保填写所有必要信息。