6

我正在使用内置 api 针对 Google 电子表格编写脚本以发送一些预订确认,目前如果有人填写了无效的电子邮件,我的脚本就会中断。我希望它只是将一些数据保存到尚未通知的客人列表中,然后继续循环预订。

这是我当前的代码(简化):

// The variables email, subject and msg are populated.
// I've tested that using Browser.msgBox(), and the correct column values are
// found and used

// The script breaks here, if an incorrect email address has been filled in
MailApp.sendEmail(email, subject, msg)

根据文档,课堂上仅有的两种方法MailApp是发送电子邮件并检查每日配额——与检查有效电子邮件地址无关——所以我真的不知道课堂必须满足什么标准才能接受请求,并且因此无法编写验证例程。

4

3 回答 3

12

如果您需要事先验证电子邮件地址,请在您的驱动器中创建一个空白电子表格。然后,运行下面的函数,将testSheet变量更改为指向您创建的电子表格。该函数将执行一个简单的正则表达式测试来捕获格式错误的地址,然后通过尝试将其临时添加为电子表格上的查看器来检查地址是否实际有效。如果可以添加地址,则必须有效。

function validateEmail(email) {
  var re = /\S+@\S+\.\S+/;
  if (!re.test(email)) {
    return false;
  } else {
    var testSheet = SpreadsheetApp.openById(arbitrarySpreadsheetInYourDrive);
    try {
      testSheet.addViewer(email);
    } catch(e) {
      return false;
    }
    testSheet.removeViewer(email);
    return true;
  }
}

来自如何在 JavaScript 中验证电子邮件地址的正则表达式?

于 2017-10-05T15:37:51.947 回答
6

保持冷静,捕捉并记录异常并继续:

try {
  // do stuff, including send email
  MailApp.sendEmail(email, subject, msg)
} catch(e) {
  Logger.log("Error with email (" + email + "). " + e);
}
于 2012-05-18T02:05:36.667 回答
0

另一方面,避免在脚本中检查电子邮件并摆脱丢失配额或尝试捕获等。我曾经在用户尝试发送电子邮件时收到一封有效的电子邮件,方法是让他在电子邮件中签名并收到该电子邮件:

private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
    try {
        GoogleSignInAccount account = completedTask.getResult(ApiException.class);

       String s = account.getEmail(); // here is the valid email.
                       
    } catch (ApiException e) {
        // The ApiException status code indicates the detailed failure reason.
        // Please refer to the GoogleSignInStatusCodes class reference for more information.
        Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
       
    }
}

完整程序在这里。

于 2020-12-18T19:11:13.640 回答