今日はGASでGmailの新着メールを取得するスクリプトについて学んでいきます。GASならとても簡単なスクリプトを実行するだけでGmailの情報にアクセスすることができます。では早速やっていきましょう。
※ この記事は「【初心者向け】初めてのGASコーディング【ログを出力してみる】」の知識がある前提で進行しています。
どんなことに応用できるのか?
まずはGmailの新着メールを取得するスクリプトを学ぶことでどんなことに応用可能か見ていきましょう。
- 問い合わせ通知などのメール通知を取得して、内容をスプレッドシートに自動保存する
- 請求書付きのメールを取得して、添付の請求書をGoogleドライブに保存する
- 重要顧客からのメールを取得してSlackなどのアプリに通知をする
などメール受信をトリガーにしてやっている仕事は数多くあります。定型的なものは自動化していくことが可能なので、学ぶ価値が高いです。
Gmailの新着メール取得スクリプト
まずは完成版のスクリプトを見ていきましょう。「gmail.gs」とスクリプトファイルを作って下記スクリプトをコピペしてもらえば動作するかと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
function getNewMail() { // 未読のスレッドを検索対象にする var searchCondition = 'is:unread'; var threads = GmailApp.search(searchCondition, 0, 50); for (var i = 0 ; i < threads.length; i++) { var msgs = GmailApp.getMessagesForThread(threads[i]); for (var j = 0; j < msgs.length; j++) { Logger.log(msgs[j].getSubject()); } // スレッドを既読にする threads[i].markRead(); } } |
こんな感じになります。まずは手動実行をしてみましょう。
すると、このプロジェクトに対してGmailへのアクセス権を承認するしてくれと表示されるので下の手順のようにしてください。
「許可を確認」をクリック。その後使用するGoogleアカウントを聞かれるので、使うGoogleアカウントを選択してください。
すると上のような画面に遷移します。開発中のアプリなので、警告が出ますが問題ないので「詳細」をクリックしてください。
上のテキストリンクをクリック。
最後に「許可」を押してください。そうするとGmailへのアクセス権が承認されてスクリプトエディタに戻ってきます。そしたらもう一度スクリプトを手動実行してみてください。エラーなく実行できましたでしょうか?
実行できたら「ログ」をチェックしてみてください。取得できたメールの件名が表示されているかと思います。
スクリプト解説
正しく実行できたらスクリプトの中身を理解していきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
function getNewMail() { // 未読のスレッドを検索対象にする var searchCondition = 'is:unread'; var threads = GmailApp.search(searchCondition, 0, 50); for (var i = 0 ; i < threads.length; i++) { var msgs = GmailApp.getMessagesForThread(threads[i]); for (var j = 0; j < msgs.length; j++) { Logger.log(msgs[j].getSubject()); } // スレッドを既読にする threads[i].markRead(); } } |
変数を定義する
まず変数を定義するところから見ていきます。「var 変数名 = 変数の中身;」という形で変数を定義することができます。変数を使うと繰り返し使用したい値や定義するのが複雑なものを扱いやすくすることができます。
今回のスクリプトでは「searchCondition」の中にGmailの検索ルールを代入しています。変数は利用することがとても多いので必ず覚えておきましょう。
Gmailからスレッドを検索
今日の記事のメインとなる部分です。
「GmailApp.search(検索条件, インデックス, 取得件数上限)」
がGmailからスレッドを取得する公式です。インデックスというはちょっとわかりにくいので一旦いつも「0」としておいてください。
「GmailApp.search(searchCondition, 0, 50);」
今回は最大取得件数を50件(最大で500件)としています。これを実行するとスレッドが取得できます。スレッドというのはメッセージのやり取りなどの一連のまとまりを意味していてメッセージ1件1件のことではないので注意が必要です。
スレッドをメッセージに分解
スレッドの中にはメッセージのやり取りや同じ件名のメッセージなど複数のメッセージがまとまって入っています。なのでスレッドをメッセージに分解していく必要があります。
それが7行目以降の「for」文内です。forは繰り返し処理を意味しています。今「threads」の中には複数のスレッドが入っているのでスレッドを1つずつ処理をしていきます。そんなときにfor文を使います。
「for (var i = 0 ; i < threads.length; i++) {」 これは「threads」の個数(length)だけ{}の中身を実行してくれという命令になります。 「GmailApp.getMessagesForThread(threads[i])」 そうして、上記の命令を実行すると、i番目のthreadsのメッセージを取得できます。この結果もまた複数のメッセージが取得されうるので、for文で1件ずつチェックをしてメッセージを取得していくという流れになります。
メッセージの件名を取得する
メッセージが取得できたら今回はその件名を取得してみます。
それは「getSubject()」というメソッドを使います。
スレッドを既読にする
最後にスレッドを既読にしていきます。今回のスクリプトは未読スレッドを対象にしているので、重複して処理がされないように最後にスレッドを既読する処理を追加しています。
スレッドに対して「markRead()」を実行すると既読になります。
以上で解説は終了です。スレッドとメッセージの概念が複雑でそれに対応するためにfor文を駆使したりするなどとややこしい部分がありましたが、Gmailからメールを取得をするときは代替このやり方でOKなのでバクっと理解しておきましょう。どんどん次の知識を重ねていっていけば自然と理解力は高まっていきます。
Googleアプリを仕事で使うなら「G Suite」がおすすめ
ポイント
- 「@gmail.com」ではなく独自のドメインを使用できる
- Googleドライブ内のファイルをチーム内で共有するのが簡単
- カレンダーでのスケジュール共有が簡単
- 30GBの保存領域が利用可能
- ユーザー管理やセキュリティー対策も簡単に設定可能
など大切な情報を管理するためのサービスが充実しています。これだけの機能が月680円で利用が可能。14日間の無料トライアルもあって安心してトライできます。さらに今なら12ヵ月間ずっと20% OFFのクーポンを利用可能です。ぜひご活用ください。
G Suite Basic プラン用クーポン【637M3P6GYFACVQL】
G Suite Business プラン用クーポン【M6RFUAM9R7NQWYH】