今回は、Google Apps Script(GAS)を利用してGmailの情報をスプレッドシートに転記する方法をご紹介。
この記事を読めばGmailに送られてくるメールを効率的にスプレッドシートへ格納し整理・分析を行うことができます。
初心者の方でも理解しやすいように手順をステップごとに画像をたくさん使ってご説明します。
また、すぐに使えるようにサンプルコードも配布します。
日常の業務やタスク管理をより効果的に行いたい方々は、是非本記事を参考にしてください。
この記事でできるようになること・目的
本記事を読めば、Gmailの情報をスプレッドシートへ転記する作業を自動的に行えます。
Gmailは、多くのユーザーを持つメールプラットフォーム。
日常的に使用する方も多いと思います。
スプレッドシートは、情報の整理・可視化において非常に効果的なツール。
この2つを組み合わせてアンケートメール、問い合わせメールの集計、整理に活用されている方もいらっしゃると思います。
メールを1件つづ開いて手作業でコピーしていくことも可能ですが時間が掛かりますし漏れやコピーミスなど発生してしまいます。
ミスを防ぐためにも自動化が必要。
日々届く大量のメールからの情報を自動的に抽出し、整理して業務の効率化を図りましょう!
GASでGmail本文を抽出の実装の流れ
今回は以下の流れで実装していきます。
- STEP1転記用スプレッドシートの作成
最初に、メール情報を記録するスプレッドシートを作成します。
Googleドライブにアクセスし、新規ボタンからスプレッドシートを開き、必要な列名(受信日時、宛先、送信元、件名、本文)を入力します。
スプレッドシートは「転記用スプレッドシート」と命名します。 - STEP2転記済判定用ラベルの作成
Gmailにログインし、「転記済」という新しいラベルを作成します。
これは、メールがスプレッドシートに転記された後に、同じメールが再度転記されないように識別するために使用します。 - STEP3GASスクリプトの作成
Google Apps Scriptを使用してスクリプトを作成します。
スクリプトはGmailからメール情報を取得し、スプレッドシートに転記する処理を自動化します。
主なステップは以下の通りです- Gmailから「転記済」ラベルがないメールを検索。
- 各メールの受信日時、宛先、送信元、件名、本文を取得。
- 取得した情報をスプレッドシートに記録。
- 処理が完了したメールに「転記済」ラベルを追加。
メール情報抽出スクリプトを作ってみよう!
ここからは具体的なスクリプトを作成して、Gmailの本文情報をスプレッドシートにすぐに整理する方法を説明します。
今回の手順は、以下のとおり。
- 転記用スプレッドシートの作成
- Gmailにて転記済を判定できるようにラベルを作成
- GASスクリプトの作成
つぎの項目から解説していきます。
転記用スプレッドシートの作成
まずは、メール情報を転記するスプレッドシートを作成します。
Googleドライブにアクセス。
WebブラウザからGoogleドライブ(https://www.google.com/intl/ja_jp/drive/)にアクセス。
「ドライブを開く」を押します。
ログインしていない方は、先にGoogleアカウントでログインをしておきましょう。
「ドライブを開く」と画像のような画面になります。
スプレッドシート新規作成
新規ボタンをクリックしてスプレッドシートを選択します。
転記するメール情報を入力
入力しなくてもスクリプトは動きますが見やすいように列名を入力します。
Gmailから抜き出す以下の情報を列名として1行目に入力しておきます。
列名
- 受信日時
- 宛先
- 送信元
- 件名
- 本文
コピペ用
受信日時 | 宛先 | 送信元 | 件名 | 本文 |
そのままスプレッドシートに貼り付け可能です。
ファイル名は、「転記用スプレッドシート」としておきましょう。
転記済判定用ラベルの作成
続いて、Gmailに転記済みかを判断するためのラベルを追加します。
Gmailでは、メールにラベルを設定できラベルによってメールを分類できます。
今回作成するスクリプトでスプレッドシートへの転記が1度されたメールは、2回目にスクリプトが実行された際に二重で取り込まれないように
「転記済」というラベルをスクリプト実行時に設定します。
ラベルの設定手順は、以下のとおり。
Gmailにアクセス
WebブラウザからGmail(https://www.google.co.jp/mail/)にアクセスします。
ラベルの新規作成 ラベルの横の+ボタンをクリックします。
ラベルを設定 新しいラベルとして「転記済」を設定します。
ラベル一覧に転記済が追加されていれば成功です。
GASスクリプトの作成
いよいよGoogle Apps Scriptを記述します。
作成した転記先スプレッドシートにて拡張機能-AppsScriptをクリックします。
AppScript画面に切り替わります。
AppsScript画面についてご説明します。
1.プロジェクト名
クリックすると変更できます。
2.スクリプトファイル
プロジェクトに配置されているスクリプトファイルを確認できます。
各項目横の+ボタンを押すことでファイルを新規で作成できます。
3.ツールバー
スクリプト作成時に必要な操作ボタンがまとめられています。
保存やデバッグ、実行ログ表示、操作を1つ戻るなど
4.エディターエリア
スクリプトファイルの編集を行うエリア。
こちらにプログラムを記述します。
手始めにプロジェクト名を変更してみましょう。
今回は、メール送信スクリプトなので「MailCopy」に変更しましょう。
続いてプログラムを記述します。
画面右側にプログラムを記述していきましょう。
今回作成するプログラムの完成形は以下になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
function MailCopy() { //******************************** // 処理に必要な設定情報 //******************************** // 検索条件に該当するスレッド一覧を取得 var SearchWord = '-label:転記済' // 転記済のメールに設定するラベル名 var Label = GmailApp.getUserLabelByName('転記済'); // 転記するシート名 var SheetName = 'シート1' //******************************** // メール情報取得処理 //******************************** var threads = GmailApp.search(SearchWord); // スレッドを一つずつ取りだす threads.forEach(function(thread) { // スレッド内のメール一覧を取得 var messages = thread.getMessages(); // メールを一つずつ取りだす messages.forEach(function(message) { // 送信時間 var SendDate = message.getDate(); // 宛先 var SendTo = message.getTo(); // 送信者 var SendFrom = message.getFrom(); // 件名 var Subject = message.getSubject(); // 本文 var Body = message.getPlainBody(); //******************************** // スプレッドシートへ転記 //******************************** // 書き込むシートを取得 var sheet = SpreadsheetApp.getActive().getSheetByName(SheetName); // 最終行を取得 var lastRow = sheet.getLastRow() + 1; // セルを取得して値を転記 // 送信時間 sheet.getRange(lastRow, 1).setValue(SendDate); // 宛先 sheet.getRange(lastRow, 2).setValue(SendTo); // 送信者 sheet.getRange(lastRow, 3).setValue(SendFrom); // 件名 sheet.getRange(lastRow, 4).setValue(Subject); // 本文 sheet.getRange(lastRow, 5).setValue(Body); }); // スレッドに処理済みラベルを付ける thread.addLabel(Label); }); } |
ではスクリプトの作成の手順を説明します。
メイン関数を作成
最初に関数を作成します。
関数とは、1つの目的のために複数の処理を1つにまとめて記述したもの。
GASではこの関数を呼び出して処理を実行します。
今回は、MailCopyという名前のファンクションを作成します。
エディタエリアに以下のように記述します。
1 2 3 4 |
function MailCopy() { } |
設定情報を記述
転記先のスプレッドシートの情報など設定情報を記述します。
今回必要な設定情報は、Gmailでの検索文字列、転記済みのメールに設定するラベル名、転記先のスプレッドシートのシート名になります。
転記するメールを絞り込みたい場合は、”SearchWord”の情報を書き換えてください。
例えば、「テスト」という文字列にヒットするメールを転記した場合は、’テスト -label:転記済’と記述してください。
以下のように記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//******************************** // 処理に必要な設定情報 //******************************** // 検索条件 var SearchWord = '-label:転記済' // 転記済のメールに設定するラベル名 var Label = GmailApp.getUserLabelByName('転記済'); // 転記するシート名 var SheetName = 'シート1' |
メール情報取得処理を記述
設定情報の記述ができましたらメール情報取得処理の部分を記述します。
メール情報取得処理は、以下のように記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
//******************************** // メール情報取得処理 //******************************** var threads = GmailApp.search(SearchWord); // スレッドを一つずつ取りだす threads.forEach(function(thread) { // スレッド内のメール一覧を取得 var messages = thread.getMessages(); // メールを一つずつ取りだす messages.forEach(function(message) { // 送信時間 var SendDate = message.getDate(); // 宛先 var SendTo = message.getTo(); // 送信者 var SendFrom = message.getFrom(); // 件名 var Subject = message.getSubject(); // 本文 var Body = message.getPlainBody(); // スレッドに処理済みラベルを付ける thread.addLabel(Label); }); |
GmailApp.search関数は、メール情報の取得処理です。
引数(括弧の箇所)に検索条件を配置します。
Gmailは、スレッド単位でメールを格納しているのでスレッドを分解してメールを1件ずつ処理します。
message.get~関数は、それぞれメール内の情報を取得する関数になります。
最後のthread.addLabel関数は、メールにラベルを設定する関数です。
転記が終わったメールに先ほどの設定エリアで設定したLabel変数に格納されている「転記済」のラベルを設定しています。
スプレッドシートへ転記処理を記述
最後に取得したメール情報をスプレッドシートへ転記する処理を記述します。
スプレッドシートの転記は、先ほどのメール情報取得処理の途中に記述する必要があります。
thread.addLabel関数の上行に処理を追加します。
以下のように記述してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
//******************************** // メール情報取得処理 //******************************** var threads = GmailApp.search(SearchWord); // スレッドを一つずつ取りだす threads.forEach(function(thread) { // スレッド内のメール一覧を取得 var messages = thread.getMessages(); // メールを一つずつ取りだす messages.forEach(function(message) { // 送信時間 var SendDate = message.getDate(); // 宛先 var SendTo = message.getTo(); // 送信者 var SendFrom = message.getFrom(); // 件名 var Subject = message.getSubject(); // 本文 var Body = message.getPlainBody(); //******************************** // スプレッドシートへ転記 //******************************** // 書き込むシートを取得 var sheet = SpreadsheetApp.getActive().getSheetByName(SheetName); // 最終行を取得 var lastRow = sheet.getLastRow() + 1; // セルを取得して値を転記 // 送信時間 sheet.getRange(lastRow, 1).setValue(SendDate); // 宛先 sheet.getRange(lastRow, 2).setValue(SendTo); // 送信者 sheet.getRange(lastRow, 3).setValue(SendFrom); // 件名 sheet.getRange(lastRow, 4).setValue(Subject); // 本文 sheet.getRange(lastRow, 5).setValue(Body); }); // スレッドに処理済みラベルを付ける thread.addLabel(Label); }); |
スプレッドシート転記処理では、メール情報取得処理で変数に格納した各種メールの情報をセルに入力しています。
セルへの値入力処理には、sheet.getRange.setValue関数を用います。
記述方法は、以下。
sheet.getRange(行番号、列番号).setValue(入力文字列)
スプレッドシート作成時に入力した列名と情報がずれないように列を指定します。
ここまで記述できればスクリプトの作成は完了です。
動作確認
スクリプトが完成したので実際に動かして見ましょう。
対象のGoogleアカウントに対して、テストメールを送りましょう。
↓こちらのリンクをクリックするとサンプルと同じタイトル・本文が入ったメールが送れます。
メールの宛先を設定して送信してください
Gmailの受信ボックスにメールが配置されていることを確認。
AppScriptにてスクリプト実行ボタンをクリック。
転記用スプレッドシートにメール情報が格納されていれば成功です。
もし「承認が必要です」と出てきたら権限を確認してください。
詳しくはこちらを参照。
応用編:自動更新を実装してみよう
今回は、応用編として定期的にGmailを確認して未転記のメールがあればスプレッドシートに転記してくれる自動更新機能の実装をしてみましょう。
自動更新は、5分ごとにスクリプトを実行して新着メールを転記するようにします。
自動更新の方法は、GASのトリガー機能を利用します。
トリガー設定
AppScript画面にて以下の操作を行います。
トリガーボタンをクリック。
「+トリガーを追加」ボタンを押します。
以下の設定でトリガーを設定して保存を押します。
実行する関数を選択:MailCopy
実行するデプロイを選択:Head
イベントのソースを選択:時間主導型
時間ベースのトリガーのタイプを選択:分ベースのタイマー
時間の間隔を選択(分):5分
自作したスクリプトにトリガーを設定する場合は、セキュリティ警告がされるので許可しましょう。
一覧に設定したトリガーが表示されればトリガー設定完了です。
新着メールを受信して5分後に自動的にスプレッドシートに転記されていれば成功です。
ただし数が多すぎるとタイムアウトでエラーとなります。
まとめ
今回は、GmailとGoogleスプレッドシートを連携してメールをGoogleスプレッドシートに転記するスクリプトを作成しました。
本記事の内容をまとめると以下。
GASを活用すればメールの情報をスプレッドシートへの格納・整理が簡単に行えます。
ぜひ本記事を参考にGASを利用して業務の効率化を測ってみてください。