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

如何在收到新邮件时触发Google Apps Script自动运行

为Google Apps Script添加新邮件触发的自动运行触发器

问题与原代码

我写了一个Google Apps Script,用来检查邮件主题,匹配后提取正文并转发到指定邮箱。手动运行完全正常,但想加个触发器,让它收到主题匹配的新邮件时自动运行。原代码如下:

function getInbox(){
  const q = GmailApp.search('subject:SendEmailInboundReport', 0,1 );
  var qmsg = q[0].getMessages();
  var msg = qmsg[0].getPlainBody(); 
  var attachments = qmsg[0].getAttachments();

  title = qmsg[0].getPlainBody().match(/w\d{4}.+?c\d{4}/);
  var tite1 = (title && title[0]) ? title[0] : 'No title';
  tmp = msg.replace(tite1, '').replace(/\s/g, '');

  GmailApp.sendEmail('',tite1,'',{
      attachments: [attachments[0]],
      bcc: tmp
    })
}

解决方案

1. 添加自动触发器的步骤

  • 打开Google Apps Script编辑器,点击左侧工具栏的闹钟图标(触发器)
  • 点击右下角添加触发器按钮
  • 在配置面板中设置以下选项:
    • 选择要运行的函数:getInbox
    • 部署类型:
      • 若要实时触发:选基于事件的触发器,事件源选「Gmail」,事件类型选「收到新邮件时」
      • 若要避免频繁触发:选时间驱动,比如设置每5分钟运行一次(可根据需求调整间隔)
    • 点击「保存」,完成权限授权即可

2. 优化代码避免重复处理

原代码存在只处理单封邮件、可能重复处理的问题,建议添加标签标记已处理邮件,优化后的代码如下:

function getInbox(){
  // 搜索未处理的目标邮件,排除已标记的线程
  const threads = GmailApp.search('subject:SendEmailInboundReport -label:ProcessedReport', 0, 50 );
  
  // 遍历所有匹配的邮件线程
  threads.forEach(thread => {
    const messages = thread.getMessages();
    // 取线程内最新收到的邮件
    const latestMsg = messages[messages.length - 1];
    const attachments = latestMsg.getAttachments();

    // 提取标题,修复变量声明与拼写错误
    const titleMatch = latestMsg.getPlainBody().match(/w\d{4}.+?c\d{4}/);
    const title1 = titleMatch ? titleMatch[0] : 'No title';
    let recipientBcc = latestMsg.getPlainBody().replace(title1, '').replace(/\s/g, '');

    // 注意:替换为实际的收件人邮箱地址
    GmailApp.sendEmail('your-target-email@example.com', title1, '', {
        attachments: attachments,
        bcc: recipientBcc
      });
    
    // 创建或获取标签,标记已处理邮件
    const processedLabel = GmailApp.getUserLabelByName('ProcessedReport') || GmailApp.createLabel('ProcessedReport');
    thread.addLabel(processedLabel);
  });
}

优化点说明

  • 新增-label:ProcessedReport搜索条件,避免重复处理同一封邮件
  • 遍历所有匹配的邮件线程,不再局限于单封
  • 修复了变量未声明、拼写错误(tite1→title1)的问题
  • 改为处理线程内最新邮件,确保对应刚收到的消息
  • 支持转发所有附件,而非仅第一个
  • 明确提示填写收件人邮箱(原代码中该参数为空)

内容的提问来源于stack exchange,提问作者Bipu Shrestha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:53:27