Google Apps Scriptでメールアドレスの生存確認【GAS】
とある自分の所のサービスにスパムがちょいちょい来るので、reCaptchaとか仕掛けたり努力はしてるのだけれども、それでも突破してくるケースがあったりする。そこで、さらにこれらを除外するために「メールアドレス生存チェック」を加えてみることにした。
無償で1000クエリ/月まで使えるサービスがあったので、試しにGoogle Apps Scriptで実装してみることにしました。
今回利用するスプレッドシート等
- メアド生存確認 - Google Spreadsheet
- Bigdatacloud Email Address Verification API
本来はSMTPサーバなどがなければ簡単には出来ないのですが、Webサービスでは以前から生存確認サイトがあって、利用させてもらっていました。
これをプログラマブルに使うにはREST APIが必要なのですがどこも有償のサービスばかり。そんな中Bigdata Cloudというサイトが月間1000クエリまでは無料で使えるとあったので、自分の規模で試すには最適だと思い使ってみました。
reCaptcha Enterpriseで弾けなかったものを、メアドの生存確認でfalseのものも弾くように二段構えにするのが今回のチャレンジです。大抵のスパムはメアドがいい加減なものが設定されているので。
事前準備
APIキーを取得する
APIキーの取得方法ですが、Bigdatacloud.comにてアカウントを作成後に以下の手順で取得します。
- アカウント情報のURLをクリックする
- 左サイドバーのCredentialsをクリックする
- 既に1つdefaultという形でキーが追加済になってる。
- しかし、10分程度待って、ここのStatusがActiveにならないと取得できない。
- 別途、Add New Keyボタンで追加も出来ます。
- StatusがActiveになったら、Show keyをクリックするとキーが取得できる。
図:Activeになるまで待機が必要
図:Show Keyで取得可能
APIキーを格納する
取得したAPIキーはスクリプトプロパティに格納しておきます。スクリプトエディタを開いたら
- スクリプトプロパティを編集ボタンをクリックする。
- スクリプトプロパティにapikeyという値を用意
- 値にAPI Keyの値を入れる
- スクリプトプロパティを保存をクリックする
これをGAS側で毎回取得してURLに組み込んで使っていきます。
図:APIキーをここに格納しておく
ソースコード
ソースコードは至ってシンプル。APIキーと合わせてエンドポイントに対してメールアドレスを送ると、判定結果を返してくれる。なのでサイトのサービス登録時などで、メアドが生きてるかどうかを調べるためにも使えます。この手のサービスが結構REST APIがあるようです。
以下は、emailvalidate関数であり、引数にメアドを取得します。このメアドを元にリクエストを投げて、Trueならば生存し、Falseならば生きていないということを確認可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//endpoint var endpoint = 'https://api.bigdatacloud.net/data/email-verify' //メアド生存確認関数 function emailvalidate(mail) { //apikeyを取得する let prop = PropertiesService.getScriptProperties(); let apikey = prop.getProperty("apikey"); //エンドポイントURLを構築 let url = endpoint + '?emailAddress=' + mail + '&key=' + apikey; //HTTPリクエスト let response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true}); //Validate結果を受け取る let json = response.getContentText(); let ret = JSON.parse(json); //判定結果を返す(Trueなら生きてる) let hantei = ret.isValid; return hantei; } |