如何用Google Apps Script自动向日历邀请嘉宾发送含邀请的邮件?
嘿,我之前也碰到过这个问题——Google Apps Script的CalendarApp确实没有直接对应手动「邮件嘉宾」的内置函数,但咱们可以绕个弯实现完全一致的效果,核心思路是获取日历事件的ICS格式邀请文件,再通过Gmail发送给嘉宾。下面是具体的实现步骤和代码:
核心逻辑
手动点击「邮件嘉宾」本质是给嘉宾发送了一个ICS格式的日历邀请文件,所以我们只需要获取这个ICS内容,再作为附件通过Gmail发送即可。
步骤1:启用高级日历服务
因为CalendarApp没有提供导出ICS的方法,我们需要用到Advanced Calendar Service,启用步骤如下:
- 打开你的Google Apps Script编辑器
- 点击左侧菜单的「服务」(Services)
- 找到「Calendar API」,点击「启用」
步骤2:完整代码实现
下面是可直接运行的代码,你只需要替换对应的参数即可:
// 获取日历事件的ICS格式内容 function getEventICS(calendarId, eventId) { // 使用高级日历服务获取ICS格式的事件数据 const eventICS = Calendar.Events.get(calendarId, eventId, { alt: 'ics' }); return eventICS; } // 将ICS文本转换为可作为附件的Blob对象 function createICSAttachment(icsContent, eventTitle) { return Utilities.newBlob(icsContent, 'text/calendar', `${eventTitle}.ics`); } // 主函数:给事件嘉宾发送带ICS附件的邮件 function sendInviteToEventGuests() { // 配置参数:替换成你的实际信息 const calendarId = 'primary'; // 主日历用'primary',其他日历填对应ID const targetEventId = 'abc123xyz...'; // 目标事件的ID(从事件链接中获取) // 1. 获取目标事件的基础信息 const calendar = CalendarApp.getCalendarById(calendarId); const event = calendar.getEventById(targetEventId); const eventTitle = event.getTitle(); const guestList = event.getGuestList(); const guestEmails = guestList.map(guest => guest.getEmail()); // 提取所有嘉宾邮箱 // 2. 获取事件ICS内容并转换为附件 const icsContent = getEventICS(calendarId, targetEventId); const icsAttachment = createICSAttachment(icsContent, eventTitle); // 3. 构建邮件内容(可自定义,模仿手动发送的格式) const startTime = event.getStartTime().toLocaleString(); const endTime = event.getEndTime().toLocaleString(); const location = event.getLocation() || '无指定地点'; const eventDesc = event.getDescription() || '无额外说明'; const emailSubject = `日历邀请:${eventTitle}`; const emailBody = `您好,这是「${eventTitle}」的日历邀请详情: 📅 时间:${startTime} 至 ${endTime} 📍 地点:${location} 📝 说明:${eventDesc} 请将附件中的ICS文件添加到你的日历中,以便及时收到提醒。如有问题请随时联系!`; // 4. 发送邮件给所有嘉宾 GmailApp.sendEmail( guestEmails.join(','), emailSubject, emailBody, { attachments: [icsAttachment], name: '你的名字/团队名称' // 可选:设置发件人显示名称 } ); Logger.log(`成功发送邀请邮件给 ${guestEmails.length} 位嘉宾!`); }
关键细节提示
- 事件ID获取:打开目标日历事件,查看浏览器地址栏,格式类似
https://calendar.google.com/calendar/u/0/r/eventedit/abc123xyz...,最后那段abc123xyz...就是事件ID。 - 权限授权:第一次运行
sendInviteToEventGuests时,会提示授权访问你的日历和Gmail,按照引导完成授权即可。 - 自定义邮件内容:你可以完全照搬手动发送的邮件格式,比如添加参会链接、参会须知等,用
event.getDescription()就能获取事件里的描述文本。
这样实现的效果和手动点击「邮件嘉宾」几乎完全一致,嘉宾收到邮件后,附件的ICS文件可以直接导入到他们的日历中,体验和手动发送的邀请完全相同。
内容的提问来源于stack exchange,提问作者Sunil Jindal
相关产品推荐
相关产品推荐

