Google apps script 在我的appscript GUI中包括一个html电子邮件编辑器(类似于gmail发送表单)

Google apps script 在我的appscript GUI中包括一个html电子邮件编辑器(类似于gmail发送表单),google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在创建一个GoogleSheets插件,它可以进行一些数据处理,并允许用户发送和编辑带有最终结果的电子邮件。许多具有电子邮件功能的gsuite附加组件似乎与Gmail的电子邮件草稿表单完全相同,所以我想知道是否有可能包括gmail电子邮件草稿表单,或者让这些附加组件在自己的代码中简单地复制UI?您可以通过使用GmailApp.createDraft[1]函数创建gmail UI撰写草稿窗口来创建空草稿,或者,您可以获取要回复的特定消息或线程,并使用该类的createDraft函数,这些函数在

我正在创建一个GoogleSheets插件,它可以进行一些数据处理,并允许用户发送和编辑带有最终结果的电子邮件。许多具有电子邮件功能的gsuite附加组件似乎与Gmail的电子邮件草稿表单完全相同,所以我想知道是否有可能包括gmail电子邮件草稿表单,或者让这些附加组件在自己的代码中简单地复制UI?

您可以通过使用
GmailApp.createDraft
[1]函数创建gmail UI撰写草稿窗口来创建空草稿,或者,您可以获取要回复的特定消息或线程,并使用该类的
createDraft
函数,这些函数在文档[2]中提到

通过实施Gmail加载项快速启动[3]和撰写草稿指南[2]中的代码和步骤,我得到了以下代码,作为一个加载项使用,单击该按钮将打开对您打开的电子邮件的草稿回复:

function buildAddOn(e) {
  // Activate temporary Gmail add-on scopes.
  var accessToken = e.messageMetadata.accessToken;
  GmailApp.setCurrentMessageAccessToken(accessToken);

  var messageId = e.messageMetadata.messageId;
  var message = GmailApp.getMessageById(messageId);

  // Create a section
  var section = CardService.newCardSection()
  .setHeader("<font color=\"#1257e0\"><b>Create email draft reply</b></font>"); 

  // Action to trigger createReplyDraft funciton
  var composeAction = CardService.newAction()
  .setFunctionName('createReplyDraft');

  // Create button to trigger action when clicked
  var composeButton = CardService.newTextButton()
  .setText('Compose Reply')
  .setComposeAction(composeAction, CardService.ComposedEmailType.STANDALONE_DRAFT);

  // Add the button widget to the section.
  section.addWidget(composeButton);

  // Build the main card after adding the section.
  var card = CardService.newCardBuilder()
  .setHeader(CardService.newCardHeader()
             .setTitle('Create draft response')
             .setImageUrl('https://www.gstatic.com/images/icons/material/system/1x/label_googblue_48dp.png'))
  .addSection(section)
  .build();

  return [card];
}

/**
*  Creates a draft email (with an attachment and inline image)
*  as a reply to an existing message.
*  @param {Object} e data passed by the 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!"
  })
  // 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();
}
函数buildAddOn(e){
//激活临时Gmail附加作用域。
var accessToken=e.messageMetadata.accessToken;
GmailApp.setCurrentMessageAccessToken(accessToken);
var messageId=e.messageMetadata.messageId;
var message=GmailApp.getMessageById(messageId);
//创建一个节
var section=CardService.newCardSection()
.setHeader(“创建电子邮件草稿回复”);
//触发createReplyDraft函数的操作
var composeAction=CardService.newAction()
.setFunctionName('createReplyDraft');
//单击时触发操作的创建按钮
var composeButton=CardService.newTextButton()
.setText('撰写回复')
.setComposeAction(composeAction,CardService.ComposedEmailType.STANDALONE_草稿);
//将按钮小部件添加到部分。
section.addWidget(composeButton);
//添加节后构建主卡。
var card=CardService.newCardBuilder()
.setHeader(CardService.newCardHeader()
.setTitle('创建草稿响应')
.setImageUrl('https://www.gstatic.com/images/icons/material/system/1x/label_googblue_48dp.png'))
.addSection(section)
.build();
返回[卡];
}
/**
*创建草稿电子邮件(带有附件和内联图像)
*作为对现有邮件的答复。
*@param{Object}是操作传递的数据。
*@return{ComposeActionResponse}
*/
函数createReplyDraft(e){
//激活临时Gmail附加作用域,在本例中允许
//待起草的答复。
var accessToken=e.messageMetadata.accessToken;
GmailApp.setCurrentMessageAccessToken(accessToken);
//创建答复草稿。
var messageId=e.messageMetadata.messageId;
var message=GmailApp.getMessageById(messageId);
var draft=message.createDraftReply(“”{
htmlBody:“小猫!”
})
//返回生成的草稿响应。这将导致Gmail呈现
//为用户编写窗口,预先填充指定的内容
//上面。
return CardService.newComposeActionResponseBuilder()
.setGmailDraft(draft.build();
}
确保清单中包含所使用函数的必要作用域

[1]

[2]


[3]

您的问题可能被认为是堆栈溢出的“离题”,因为它询问的是一般信息,而不是特定的代码行。在应用程序脚本社区中询问此类问题可能更好,网址为: