我正在使用内置的api针对Google Spreadsheets编写脚本来发送一些预订确认,而且如果有人填写了无效的电子邮件,我的脚本会中断。我希望将一些数据保存到尚未通知的客人列表中,然后继续循环预订。
这是我目前的代码(简化):
// 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)
根据documentation,MailApp
课程中只有两种方法是发送电子邮件并检查每日配额 - 没有检查有效的电子邮件地址 - 所以我真的不知道什么标准必须满足类才能接受请求,因此无法编写验证例程。
答案 0 :(得分:3)
如果您需要事先验证电子邮件地址,请在驱动器中创建一个空白电子表格。然后,运行下面的函数,更改 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;
}
}
的正则表达式
答案 1 :(得分:2)
保持冷静,抓住并记录异常并继续:
try {
// do stuff, including send email
MailApp.sendEmail(email, subject, msg)
} catch(e) {
Logger.log("Error with email (" + email + "). " + e);
}
答案 2 :(得分: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());
}
}