使用GmailApp.sendEmail()添加Drive链接时出现意外附件的技术咨询
我们是纯志愿的社区终身学习课程组织,过去5个学期一直用Google表单+表格做学员注册,通过表格的onSpreadsheetSubmit(e)触发脚本,用GmailApp.sendEmail()发送纯文本确认邮件,之前运行稳定。
本学期给学员搭建了Google Drive课程资料文件夹,把文件夹URL加到邮件正文的纯文本内容里后,测试发现邮件能正常发送、正文显示正确,但Gmail桌面端会自动把课程文件夹当成附件显示(每个选的课程对应一个),而Gmail移动端、Yahoo等其他邮件客户端没有这个问题。
相关代码片段:
单个课程的链接拼接逻辑:
if (formValues[11].indexOf('Register') > -1) { wantCourse2 = 1 ; amountDue = amountDue + 35 ; numberOfCourses = numberOfCourses + 1 ; textBodyCourse2 = "\n \nCourse: 'The Life and Major Works of Edith Wharton,' with instructor xxxxx xxxxx. Starts Tuesday, March 7th and meets every subsequent Tuesday until April 11th (6 sessions.) Available in-person and online through Zoom. \n Webinar ID: 865 5101 1111 \n Zoom link: https://us02web.zoom.us/j/86551011111 \n Should the professor at any point choose to make documents available to the class, they will be placed in a Google Drive folder, which can be accessed via this link: \n Documents: https://drive.google.com/drive/folders/1M3ZrLr2WPBSb69UbFZ29J4cTIABCDEFG?usp=sharing " ; }
发送邮件的调用:
GmailApp.sendEmail(email, subject, textBodyStart + textBodyPayment + textBodyCovid + textBodyCourses + textBodyClose, {name:"xxxx Registrar"});
注:textBodyCourse2会和其他课程内容拼接成textBodyCourses,最终作为邮件正文的一部分。
这个问题不是脚本代码的bug,而是Gmail桌面端的内置特性:它会自动识别Google Drive文件夹的URL,将其渲染成类似附件的预览卡片,看起来像是附加了文件夹,但实际上并没有真的添加附件(其他客户端不显示就是证明)。
以下两种方法可以解决这个问题:
方法1:改用HTML格式发送邮件
通过设置htmlBody参数,让Gmail优先渲染HTML内容,避免自动解析Drive链接为预览卡片。同时保留纯文本内容作为 fallback,确保不支持HTML的客户端正常显示。
修改发送邮件的代码:
// 把纯文本的换行替换成HTML的换行标签 const htmlContent = (textBodyStart + textBodyPayment + textBodyCovid + textBodyCourses + textBodyClose).replace(/\n/g, '<br>'); GmailApp.sendEmail(email, subject, textBodyStart + textBodyPayment + textBodyCovid + textBodyCourses + textBodyClose, { name: "xxxx Registrar", htmlBody: htmlContent });
方法2:修改Drive链接的URL结构(纯文本邮件适用)
如果坚持用纯文本邮件,可以给Drive链接添加一个无意义的查询参数,破坏Gmail对标准Drive文件夹链接的识别,从而避免生成预览卡片。
比如把原链接:
https://drive.google.com/drive/folders/1M3ZrLr2WPBSb69UbFZ29J4cTIABCDEFG?usp=sharing
改成:
https://drive.google.com/drive/folders/1M3ZrLr2WPBSb69UbFZ29J4cTIABCDEFG?usp=sharing&dummy=1
这个额外的dummy=1参数不会影响用户访问文件夹,但会让Gmail无法识别为标准的Drive文件夹链接,就不会显示附件样式的预览了。
内容的提问来源于stack exchange,提问作者HILL Courses

