谷歌脚本 GmailApp.createDraft cc:

Posted

技术标签:

【中文标题】谷歌脚本 GmailApp.createDraft cc:【英文标题】:google-script GmailApp.createDraft cc:谷歌脚本 GmailApp.createDraft cc: 【发布时间】:2021-07-28 23:24:04 【问题描述】:

我无法在从 google 表格脚本生成的提醒电子邮件中添加抄送。

代码如下:

    //seleziono il file
var file_ID = SpreadsheetApp.getActiveSpreadsheet().getId();
var file = DriveApp.getFileById(file_ID);

//creo una matrice di editors
var editors = file.getEditors();
var File_Editors = [];
for (var e = 0; e < editors.length; e++) 
File_Editors[e] = [editors[e].getEmail()];


//creo una matrice di visualizzatori
var viewers = file.getViewers();
var File_Viewers = [];
for (var e = 0; e < viewers.length; e++) 
File_Viewers[e] = [viewers[e].getEmail()];


var FileUrl = SpreadsheetApp.getActiveSpreadsheet().getUrl();
var FileName = SpreadsheetApp.getActiveSpreadsheet().getName();

var Today = Utilities.formatDate(new Date(), "UTC", "dd/MM/YYYY"); 

var EmailAddressTo = File_Editors;
var EmailAddressCC = File_Viewers;

var Subject = FileName +" UPDATE @ " + Today;
var htmlMessage = "Hi All";

GmailApp.createDraft(EmailAddressTo, Subject,'',htmlBody:HtmlMessage, cc:EmailAddressCC);

这是我最后一行的回报:

异常:参数 (String,String,String,(class),(class)) 与 GmailApp.createDraft 的方法签名不匹配。 提醒每周邮件@KPI_File_Scripts.gs:278

谢谢

【问题讨论】:

GmailApp.createDraft(EmailAddressTo, Subject,'',htmlBody:HtmlMessage, cc:EmailAddressCC); 替换为 GmailApp.createDraft(EmailAddressTo,主题,'',htmlBody:HtmlMessage, cc:EmailAddressCC); [Class GmailApp] (developers.google.com/apps-script/reference/gmail/…) 我做到了。同样的错误结果:无效的电子邮件。似乎问题出在变量 EmailAddreseCc 中。错误是无效的电子邮件。 【参考方案1】:

试试这个:GmailApp.createDraft(EmailAddressTo, Subject,'',htmlBody:HtmlMessage,cc:EmailAddressCC);

reference

试试

if (EmailAddressCC && HtmlMessage && EmailAddressTo && Subject) 
  GmailApp.createDraft(EmailAddressTo, Subject, '',  htmlBody: HtmlMessage , cc: EmailAddressCC );
 else 
  throw 'Email Draft not created'

【讨论】:

我做到了。同样的错误结果:无效的电子邮件。似乎问题出在变量 EmailAddreseCc 中。错误是无效的电子邮件。 如果更改不起作用,则单步执行程序以确定缺少的内容和原因。 您好,我尝试在 htmlBody 的 中包含 cc。我也尝试过使用 IF 陈述。错误如下异常:无效电子邮件:[Ljava.lang.Object;@5ab0825areminderWeeklyMail@KPI_File_Scripts.gs:279。我也尝试将 EmailAddressCC 放在 TO 部分,它可以工作(所以我推断数组没有错)。 一个问题:如果您自己运行脚本,它是否有效? 最后,我尝试写一个简单的电子邮件'abc@gmail.com',而不是变量EmailAddressCC(电子邮件数组)并且它有效。所以问题在于数组有一些问题的 cc 选项。此时我看到了 2 个解决方案:不是在 CC 中而是在 TO 中添加 EmailAddressCC,或者创建一个已部署的数组字符串。【参考方案2】:

我用一个技巧解决了。我做了几个测试。 我的发现是 GmailApp 中的 CC 选项不适用于电子邮件数组。 为了跳过这个问题,我从数组中创建了一串电子邮件并将其设置为变量(字符串而不是数组),现在它完成了这项工作。 这里是更新部分的代码:

    //creo una matrice di visualizzatori
var viewers = file.getViewers();
var File_Viewers = [];
var EmailAddressCC = '';
for (var e = 0; e < viewers.length; e++) 
File_Viewers[e] = [viewers[e].getEmail()];
EmailAddressCC = EmailAddressCC + File_Viewers[e] + ',';

现在使用相同的 createDraft 指令工作。

我认为这是一个需要在 Google Script 方面解决的错误。

【讨论】:

这里真正的诀窍是去文档并阅读它所说的 here 和它所说的关于 cc 的内容是 a comma-separated list of email addresses to CC 所以我会考虑做这样的事情 var EmailAddressCC = File_Viewers.join(','); which turn's它变成一个逗号分隔的字符串,这是它想要的。这对收件人来说是正确的。但在此过程的早期,您应该检查以确保 File_Viewer.length &gt;0 否则您只是在浪费时间。

以上是关于谷歌脚本 GmailApp.createDraft cc:的主要内容,如果未能解决你的问题,请参考以下文章

潜在的安全漏洞——打开谷歌脚本?

谷歌此网页包含的脚本来自于身份未验证怎么取消

我需要在我的谷歌驱动器中显示一个 pdf 作为缩略图,在谷歌表中..如何使用谷歌脚本?

如何通过用户脚本/同步加载谷歌地图 api?

使用谷歌脚本获取谷歌幻灯片评论的功能

谷歌脚本:JDBC prepareStatement 失败