我可以通过自动电子邮件从 Google 表单/Google 表格发送多个上传的附件吗?
Posted
技术标签:
【中文标题】我可以通过自动电子邮件从 Google 表单/Google 表格发送多个上传的附件吗?【英文标题】:Can I send multiple uploaded attachments from a Google Form/Google Sheet in an automated email? 【发布时间】:2021-08-19 18:30:35 【问题描述】:我正在尝试使用一些 Google App 脚本创建一个链接到 Google 表格的 Google 表单,该脚本将从调查中获取一些答案,附加上传的文件,并向特定人员发送电子邮件.我已经能够弄清楚我在谷歌表格中收集数据并发送电子邮件的部分,但是我将上传的文件作为电子邮件附件的部分让我感到难过。
目前,我发送电子邮件的代码如下所示:
GmailApp.sendEmail(Recipient,subject,'',htmlBody: htmlText,);
但是看看the documentation on sendEmail,我似乎想在选项部分添加更多内容,对吧?所以如果我为此定义一个变量,我需要使用getFileById,但每次上传的文件ID都会不同。此外,我可能需要附加多个文件。
我创建了一个测试Google Form here,并将它附加到a Google Sheet here。你可以看到the Google App Script here。您可以通过查看代码中指定的 formtesting4@mailinator.com 来检查正在发送/接收的电子邮件是否成功。
这可能与我正在尝试做的事情有关吗?
【问题讨论】:
您好,我注意到您正在尝试创建一个 html 表。你打算做什么样的依恋?在您的 html 正文中的 Attachment 块下包含上传的文件链接?还是将文件附加在电子邮件本身而不是 html 正文中(使用附件选项)? HTML 表格位于电子邮件正文中。我可以通过引用适当的单元格来包含上传文件的链接,但我想将文件附加到电子邮件本身。我应该更清楚地说明这一点,但我想构建功能以便它可以在必要时处理多个文件。 【参考方案1】:您可以参考这个示例脚本:
function emailMe()
const ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const info = ss.getDataRange().getValues();
info.forEach((entry,a) =>
// Identify whether notification has been sent
if (entry[4] === '')
// Collect entries
var Recipient = "your@email.com"
var subject = 'Roster Scheduler Update';
Timestamp = entry[0];
Name = entry[1];
Roster = entry[2];
attachment = "TEST";
var attachmentBlobs = [];
//Get the blob of all attachments available
if(entry[3])
var attachments = entry[3].split(', ');
attachments.forEach(url =>
var fileId = url.replace('https://drive.google.com/open?id=','');
Logger.log(fileId);
var file = DriveApp.getFileById(fileId);
attachmentBlobs.push(file.getBlob());
);
let body = '';
// Generate email
var html = HtmlService.createTemplateFromFile("email.html");
var htmlText = html.evaluate().getContent();
// Send email
GmailApp.sendEmail(Recipient, subject, body, htmlBody: htmlText, attachments: attachmentBlobs);
// Email confidence
const check = 'Sent';
ss.getRange(a + 1,5).setValue(check);
);
所做的更改:
使用File.getBlob()获取所有上传附件的blob文件。您可以从附件的 url 链接获取文件 ID 并使用 DriveApp.getFileById(id) 在GmailApp.sendEmail()
中包含body
以修复电子邮件内容问题
在GmailApp.sendEmail(recipient, subject, body, options) 中包含attachments
作为选项
输出:
示例 1:3 个附件
示例 2:1 个附件
【讨论】:
所以它看起来有效,除非有人不上传附件。我可能应该澄清一下,但并不总是需要将附件上传到 Google 表单。我假设将其包含在附件变量的某种 IF 语句中就足够了? 是的,只要一个 if 条件就足够了。我更新了答案。如果还有问题请告诉我 完美。这涵盖了一切。非常感谢你一直陪着我。我将阅读有关这些类和方法的一些文档,以了解更多关于它们的信息。我唯一添加的是一个额外的else attachment = "No attachment submitted"
来说明一个空提交。以上是关于我可以通过自动电子邮件从 Google 表单/Google 表格发送多个上传的附件吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Google 电子表格中的 Google Apps 脚本自动更新“站点地图”功能?