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)

ドキュメントによると、クラスの2つの方法は、MailAppメールを送信して1日の割り当てを確認することだけです。つまり、有効なメールアドレスを確認することは何もありません。そのため、クラスがリクエストを受け入れるために満たす必要のある基準がわかりません。したがって、検証ルーチンを作成することはできません。

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

一方、スクリプトで電子メールをチェックすることは避け、割り当ての喪失やtry-catchなどを取り除きます。ユーザーが電子メールを送信しようとしたときに有効な電子メールを取得するために、ユーザーに電子メールで署名してその電子メールを取得しました。

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 に答える