Google apps script 从我的gmail插件撰写草稿电子邮件

Google apps script 从我的gmail插件撰写草稿电子邮件,google-apps-script,gmail-addons,Google Apps Script,Gmail Addons,我用这个例子来指导我编写代码,使用gmail插件中的用户输入值撰写独立的草稿电子邮件 下面是创建草稿的按钮小部件: var submitButton = CardService.newTextButton() .setTextButtonStyle(CardService.TextButtonStyle.FILLED) .setText('Create Draft') .setComposeAction( CardService.newAction().s

我用这个例子来指导我编写代码,使用gmail插件中的用户输入值撰写独立的草稿电子邮件

下面是创建草稿的按钮小部件:

var submitButton = CardService.newTextButton()
    .setTextButtonStyle(CardService.TextButtonStyle.FILLED)
    .setText('Create Draft')
    .setComposeAction(
        CardService.newAction().setFunctionName("createEmailDraft"),
        CardService.ComposedEmailType.STANDALONE_DRAFT
    );
下面是回调:

function createEmailDraft(e) {
    var recipient = e.formInput.recipient;
    var subject = e.formInput.subject;
    var body = e.formInput.body;

    var draft = GmailApp.createDraft(recipient, subject, body);
    return CardService.newComposeActionResponseBuilder()
        .setGmailDraft(draft).build();
}
我不断遇到以下错误:

Access denied: : Missing access token for authorization. Request: MailboxService.CreateDraft.
我的范围似乎还可以(如果有的话,过于宽松):

我将非常感谢任何帮助克服这个错误

这个有点小,但您必须使用中的访问令牌来授权草稿创建:

function createEmailDraft(e) {
    var accessToken = e.messageMetadata.accessToken;
    GmailApp.setCurrentMessageAccessToken(accessToken);

    var recipient = e.formInput.recipient;
    var subject = e.formInput.subject;
    var body = e.formInput.body;

    var draft = GmailApp.createDraft(recipient, subject, body);
    return CardService.newComposeActionResponseBuilder()
        .setGmailDraft(draft).build();
}

谢谢你的建议,克里斯。我刚刚尝试添加这两行,但现在遇到了这样的错误:“TypeError:无法从undefined中读取属性“accessToken”。“我将”“添加到范围列表中,因为文档说它应该允许我访问messageMetadata。”。这也不起作用-e.messageMetadata仍然未定义。这是一篇旧文章,可能早就解决或忘记了,但使用以下方法对我来说很有效:
var accessToken=e.gmail.accessTokenfunction createEmailDraft(e) {
    var accessToken = e.messageMetadata.accessToken;
    GmailApp.setCurrentMessageAccessToken(accessToken);

    var recipient = e.formInput.recipient;
    var subject = e.formInput.subject;
    var body = e.formInput.body;

    var draft = GmailApp.createDraft(recipient, subject, body);
    return CardService.newComposeActionResponseBuilder()
        .setGmailDraft(draft).build();
}