使用AppsScript创建带ICS附件的Gmail草稿时附件丢失求助
解决Gmail网页端丢失ICS附件的邮件草稿问题
我用AppsScript创建带ICS附件的邮件草稿,Outlook里能正常显示两个附件(ICS会议邀请+文本文件),发送后收件方也能收到完整的两个附件;但在Gmail网页端查看草稿时,ICS附件直接消失,只剩文本附件。需要实现:用代码创建带ICS附件的草稿,在Gmail网页端编辑个性化内容后发送,确保ICS附件全程完整。
原代码如下:
function ICStest(){ var mytitle="hi", myUUID = Utilities.getUuid(), myShortDesc=mytitle; var myICS=` BEGIN:VCALENDAR PRODID:-//Google Inc//Google Calendar 70.9054//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT SUMMARY:${mytitle} DTSTART:20240104T093000Z DTEND:20240104T133000Z DTSTAMP:20240121T164157Z UID:${myUUID} DESCRIPTION:${myShortDesc} STATUS:CONFIRMED PRIORITY:0 END:VEVENT END:VCALENDAR `; var myoptions = {attachments:[{fileName:"test.ics", content:myICS,mimeType:'text/calendar'},{fileName:"test2.txt", content:"Stuff",mimeType:'text/plain'}]}; GmailApp.createDraft("me@gmail.com","Test","Hi",myoptions); }
问题原因
Gmail会自动识别text/calendar类型的附件,将其解析为内嵌的会议邀请条目,而不是以普通附件形式展示在界面上。虽然附件实际存在于邮件数据中,但网页端不会显示。
解决方案
要让ICS在Gmail网页端作为可见附件保留,最简单的方法是修改ICS附件的MIME类型,让Gmail不自动解析它:
修改后的代码:
function ICStest(){ var mytitle="hi", myUUID = Utilities.getUuid(), myShortDesc=mytitle; var myICS=` BEGIN:VCALENDAR PRODID:-//Google Inc//Google Calendar 70.9054//EN VERSION:2.0 CALSCALE:GREGORIAN BEGIN:VEVENT SUMMARY:${mytitle} DTSTART:20240104T093000Z DTEND:20240104T133000Z DTSTAMP:20240121T164157Z UID:${myUUID} DESCRIPTION:${myShortDesc} STATUS:CONFIRMED PRIORITY:0 END:VEVENT END:VCALENDAR `; var myoptions = { attachments:[ {fileName:"test.ics", content:myICS, mimeType:'application/octet-stream'}, {fileName:"test2.txt", content:"Stuff", mimeType:'text/plain'} ] }; GmailApp.createDraft("me@gmail.com","Test","Hi",myoptions); }
只需把ICS附件的mimeType从text/calendar改成application/octet-stream,Gmail就会把它当作普通文件附件处理,网页端查看草稿时能正常显示,编辑发送后收件方也能收到完整的两个附件。
如果需要同时让Gmail识别出会议邀请,又保留可见的ICS附件,可以添加两个ICS条目:一个用text/calendar类型(用于生成内嵌邀请),另一个用application/octet-stream类型(作为附件显示),不过这种情况收件方会收到两个ICS文件,按需选择即可。
内容的提问来源于stack exchange,提问作者Tony Broadbent
相关产品推荐
相关产品推荐

