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

Google Apps Script邮件脚本IF语句失效:消息框变量赋值异常

问题分析与解决方案

你遇到的问题核心在于**Browser.msgBox的返回值类型判断错误**,导致你的条件逻辑完全失效,进而出现了不管点击「是」还是「否」都会发送邮件的问题。

为什么会出错?

Browser.msgBox返回的不是你以为的字符串'yes'或'no',而是枚举常量:

  • 用户点击「YES」时,返回Browser.Buttons.YES(对应数值1)
  • 用户点击「NO」时,返回Browser.Buttons.NO(对应数值2)

你用字符串'yes'去和返回值做比较,这个条件永远不会成立——但你说邮件无论如何都会发送,大概率是之前的代码逻辑写错了(比如误写为if(confirm),而任何非0数值都会被JS视为true)。不过只要修正判断条件,就能让逻辑回到正轨。

修正后的可用代码

我已经帮你调整了判断逻辑,同时优化了几处容易踩坑的细节:

function sendEmails1() { 
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  ss.setActiveSheet(ss.getSheetByName("Send-Emails 1")); 
  var sheet = SpreadsheetApp.getActiveSheet(); 
  var dataRange = sheet.getRange("A2:D10"); 
  var data = dataRange.getValues(); 
  var sender = Browser.inputBox('Sender Name', 'Please enter your first and last name', Browser.Buttons.OK_CANCEL); 
  
  // 修正:点击Cancel时返回的是null,不是字符串'cancel'
  if(sender !== null){ 
    // 推荐用for...of遍历数组,比for...in更安全(不会遍历到原型链属性)
    for (const rowData of data) { 
      var emailAddress = rowData[1]; 
      var recipient = rowData[2]; 
      var text1 = 'text'; 
      var text2 = 'text'; 
      var text3 = 'text'; 
      var text4 = 'text'; 
      var text5 = 'text'; 
      var signoff = 'Kind Regards,'; 
      var sendername = sender ; 
      var org = 'text'; 
      var message = recipient + ',\n\n' + text1 + ' ' + text2 + ' ' + text3 + '\n\n' + text4 + '\n\n' + text5 + '\n\n' + signoff + '\n\n' + sendername + '\n\n' + org; 
      var subject = 'text'; 
      
      // 弹出邮件预览确认框
      var confirm = Browser.msgBox('Send the following email?', 'To: ' + emailAddress + '\\n\\n' + recipient + ',\\n\\n' + message, Browser.Buttons.YES_NO); 
      
      // 修正:用枚举常量判断,而非字符串
      if(confirm === Browser.Buttons.YES){ 
        MailApp.sendEmail(emailAddress, subject, message); 
      } 
    } 
  } 
}

额外优化说明

  1. 取消输入的判断修正:Browser.inputBox点击Cancel时返回的是null,不是字符串'cancel',原来的判断会导致用户取消后仍进入循环,现在已经修正。
  2. 数组遍历优化:for (i in data)可能会意外遍历到数组原型链上的属性,换成for...of更安全可靠。

修改后脚本就会完全符合你的预期:点击「YES」发送邮件,点击「NO」则跳过当前邮件的发送流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:15:05