You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:43:14