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

Google Apps定时循环邮件开发求助:邮件未发送及排班逻辑实现

问题修复与功能实现方案

一、原代码核心问题分析

  1. 函数与变量作用域混乱:sendemail和sendEmail是独立函数,sendEmail无法访问sendemail内的emailcontent;tableHTML函数仅读取单元格样式数据,但未生成有效HTML内容,导致邮件正文为空,触发发送失败。
  2. 邮件参数错误:未指定htmlBody参数,纯文本模式无法解析表格内容,且正文为undefined,导致邮件被拦截或无法发送。

二、修复后完整代码(含所有需求功能)

function sendScheduledEmail() {
  // 1. 打开目标表格
  const spreadsheetId = '1vQIpduKw8qp65oNMJt5XsTNOMQEsNaR8FA64kL1GXi0';
  const spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  const sheet = spreadsheet.getSheetByName("CO Plan Release");
  const range = sheet.getRange("B2:G22");

  // 2. 获取当前时间、星期、班次信息
  const now = new Date();
  const dayIndex = now.getDay(); // 0=周日,1=周一,...,6=周六
  const dayNames = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
  const currentDay = dayNames[dayIndex];
  const hour = now.getHours();
  const shift = hour < 12 ? 'AM' : 'PM';

  // 3. 生成带样式的HTML表格
  const tableContent = generateStyledTable(range);

  // 4. 发送邮件
  const recipients = 'jessica.sartori@gmail.com';
  const subject = `CO Plan Review - ${currentDay} ${shift}班次`;
  const plainTextBody = `CO Plan Review - ${currentDay} ${shift}班次\n表格内容请查看HTML版本邮件`;
  
  MailApp.sendEmail({
    to: recipients,
    subject: subject,
    body: plainTextBody,
    htmlBody: tableContent
  });
}

// 生成带单元格样式的HTML表格
function generateStyledTable(range) {
  const data = range.getDisplayValues();
  const backgrounds = range.getBackgrounds();
  const fontSizes = range.getFontSizes();
  const fontColors = range.getFontColors();
  const fontFamilies = range.getFontFamilies();

  let html = '<table style="border-collapse: collapse; width: 100%;">';
  
  // 遍历每一行
  for (let i = 0; i < data.length; i++) {
    html += '<tr>';
    // 遍历每个单元格
    for (let j = 0; j < data[i].length; j++) {
      const cellStyle = `
        background-color: ${backgrounds[i][j]};
        font-size: ${fontSizes[i][j]}px;
        color: ${fontColors[i][j]};
        font-family: ${fontFamilies[i][j]};
        border: 1px solid #ccc;
        padding: 8px;
        text-align: left;
      `;
      html += `<td style="${cellStyle}">${data[i][j] || ''}</td>`;
    }
    html += '</tr>';
  }
  
  html += '</table>';
  return html;
}

三、关键功能说明

1. 邮件发送修复

  • 整合分散函数为单一主函数sendScheduledEmail,解决变量作用域问题。
  • 新增generateStyledTable函数,完整构建带原表格样式的HTML内容,确保邮件正文有效。
  • 使用MailApp.sendEmail的对象参数形式,同时提供纯文本备用内容和HTML正文,兼容不同邮件客户端。

2. 班次与星期逻辑实现

  • 班次判断:通过当前小时数判断,0-11点为AM班次,12-23点为PM班次。
  • 星期处理:将getDay()返回的数字映射为中文星期名称,自动拼接至邮件标题。

四、后续操作

  1. 测试发送:直接运行sendScheduledEmail函数,检查收件箱确认邮件内容和样式正确。
  2. 定时设置:在脚本编辑器左侧点击「触发器」→「添加触发器」,设置触发时间(如每天AM/PM指定时段),实现定时循环发送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:42:06