Google Apps定时循环邮件开发求助:邮件未发送及排班逻辑实现
问题修复与功能实现方案
一、原代码核心问题分析
- 函数与变量作用域混乱:
sendemail和sendEmail是独立函数,sendEmail无法访问sendemail内的emailcontent;tableHTML函数仅读取单元格样式数据,但未生成有效HTML内容,导致邮件正文为空,触发发送失败。 - 邮件参数错误:未指定
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()返回的数字映射为中文星期名称,自动拼接至邮件标题。
四、后续操作
- 测试发送:直接运行
sendScheduledEmail函数,检查收件箱确认邮件内容和样式正确。 - 定时设置:在脚本编辑器左侧点击「触发器」→「添加触发器」,设置触发时间(如每天AM/PM指定时段),实现定时循环发送。
内容的提问来源于stack exchange,提问作者user11418211
相关产品推荐
相关产品推荐

