使用来自 Google Sheet 的 GmailApp.sendEmail 时如何包含用户 Gmail 签名

How to include the users Gmail signature when using GmailApp.sendEmail from Google Sheet

我创建了一个报告模板,它具有通过 PDF 导出 Google Sheet 的功能,然后使用 GmailApp.sendEmail 功能通过电子邮件发送创建的 PDF。我已经完美地完成了这项工作,只是我注意到发出的电子邮件不包含发件人的 gmail 签名。

注意我说的是“发件人”电子邮件 ;)

我阅读了很多关于 Gmail 签名 API、默认签名甚至使用电子邮件草稿的帖子,但 none 据我所知对我有帮助。这是我的问题:

1 - 由于这是一个模板 sheet,任何人都可以使用它,因此发送的电子邮件需要使用该特定用户的 gmail 签名。大多数帖子仅提供在脚本中手动输入的“默认”签名。

2 - 我看到的其他解决方案使用“草稿”消息从我的电子邮件中提取此签名,只是在我的脚本中标记错误或根本不发送电子邮件。

所以,为了让这个问题简单化...

有什么方法可以在使用 GmailApp.sendEmail 功能时包含“当前用户”Gmail 签名?如果可能的话,我该如何将其添加到下面的脚本中?

适用的脚本最后一段如下:

function sendSpreadsheetToPdf(sheetNumber, pdfName, email,subject, htmlbody) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var spreadsheetId = spreadsheet.getId()
var sheetId = sheetNumber ? spreadsheet.getSheets()[sheetNumber].getSheetId() : null;
var url_base = spreadsheet.getUrl().replace(/edit$/,'');

var url_ext = 'export?exportFormat=pdf&format=pdf'   //export as pdf
+ (sheetId ? ('&gid=' + sheetId) : ('&id=' + spreadsheetId))
// following parameters are optional...
+ '&size=A4'      // paper size
+ '&portrait=true'    // orientation, false for landscape
+ '&fitw=true'        // fit to width, false for actual size
+ '&sheetnames=true&printtitle=false&pagenumbers=true'  //hide optional headers and footers
+ '&gridlines=false'  // hide gridlines
+ '&fzr=false';       // do not repeat row headers (frozen rows) on each page

var options = {
headers: {
'Authorization': 'Bearer ' +  ScriptApp.getOAuthToken(),
}
}

var response = UrlFetchApp.fetch(url_base + url_ext, options);
var blob = response.getBlob().setName(pdfName + '.pdf');
if (email) {
var mailOptions = {
attachments:blob, htmlBody:htmlbody
}

GmailApp.sendEmail(
email,
subject+" " + pdfName +"",
"html content only",
mailOptions);
}

这是经过试验和测试的,很高兴通过 PDF 发送我的活动 sheet,但没有签名!

有什么想法吗?

添加签名是 Gmail Web 客户端的一项设置 UI,无法通过 API

使用

您需要使用 Gmail Users.settings.sendAs: get 方法手动获取您的签名 API 并手动将其附加到电子邮件正文的末尾

Apps 脚本中的示例代码片段:

  var signature = Gmail.Users.Settings.SendAs.get("me", "your email or alias").signature; 
  htmlbody += "<br>" + signature;

更新

完整代码:

function sendSpreadsheetToPdf(sheetNumber, pdfName, email,subject, htmlbody) {
  var signature = Gmail.Users.Settings.SendAs.get("me", "your email or alias").signature; 
  htmlbody += "<br>" + signature;
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var spreadsheetId = spreadsheet.getId()
  var sheetId = sheetNumber ? spreadsheet.getSheets()[sheetNumber].getSheetId() : null;
  var url_base = spreadsheet.getUrl().replace(/edit$/,'');
  
  var url_ext = 'export?exportFormat=pdf&format=pdf'   //export as pdf
  + (sheetId ? ('&gid=' + sheetId) : ('&id=' + spreadsheetId))
  // following parameters are optional...
  + '&size=A4'      // paper size
  + '&portrait=true'    // orientation, false for landscape
  + '&fitw=true'        // fit to width, false for actual size
  + '&sheetnames=true&printtitle=false&pagenumbers=true'  //hide optional headers and footers
  + '&gridlines=false'  // hide gridlines
  + '&fzr=false';       // do not repeat row headers (frozen rows) on each page
  
  var options = {
    headers: {
      'Authorization': 'Bearer ' +  ScriptApp.getOAuthToken(),
    }
  }
  
  var response = UrlFetchApp.fetch(url_base + url_ext, options);
  if (email) {
    var mailOptions = {
      attachments:blob, htmlBody:htmlbody
    }
    
    GmailApp.sendEmail(
      email,
      subject+" " + pdfName +"",
      "html content only",
      mailOptions);
  }