Google Apps Script - ⑨GMailの操作(メール削除)

Gmailを長く使っていると、メールマガジンや広告メールなど削除対象でしかないメールがたくさん溜まっていきます。

今回はGASを使って、不要なメールを削除してみます。

メールの削除

メールを削除するにはmoveToTrash関数(7行目)を使います。

削除対象のメールはsearch関数(3行目)を使って検索を行い、検索対象となったメールだけを削除します。

[Google Apps Script]

1
2
3
4
5
6
7
8
9
// メイン関数
function main() {
var deleteThreads = GmailApp.search("検索ワード");

//検索条件に合致するメールをゴミ箱に移動
for (var i = 0; i < deleteThreads.length; i++) {
deleteThreads[i].moveToTrash();
}
}

トリガー機能を使って、このスクリプトを定期的に実行するようにすれば、いちいち手動でメールを削除することなく受信メールボックスがすっきりしますのでおススメです😊

Google Apps Script - ⑨GMailの操作(受信ボックスの検索)

GASを使って、Gmailの検索を行います。

受信ボックスの検索

受信ボックスの検索にはGmailApp.search()関数を使います。

“検索ワード”が含まれるメールのの送信元、送信先、日付、件名、本文を表示するスクリプトは次のようになります。

[Google Apps Script]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function main() {
var thds = GmailApp.search("検索ワード");
for (var i = 0; i < thds.length; i++) {
var thd = thds[i];
var msgs = thd.getMessages();
for (var j = 0; j < msgs.length; j++) {
var msg = msgs[j];
var from = msg.getFrom(); // 送信元
var to = msg.getTo(); // 送信先
var date = msg.getDate(); // 日付
var subject = msg.getSubject(); // 件名
var body = msg.getBody(); // 本文
Logger.log(from + " : " + to + " : " + date+ " : " + subject);
}
}

検索クエリー

検索に使用可能なクエリーは下記の通りです。

検索内容検索演算子
送信者で検索from:from: 太郎
受信者で検索to:to: 次郎
件名で検索subject:subject: 〇〇につきまして

上記以外の検索オプションは下記をご参照ください。

Gmail で使用できる検索演算子 - https://support.google.com/mail/answer/7190?hl=ja

Google Apps Script - ⑧GMailの操作(受信ボックスの取得)

GASを使って、Gmailの操作を行ってみます。

Gmailの管理要素

Gmailでは受信および送信ボックスを、ThreadMessageという要素で管理しています。

  • Thread
    返信等でつながった一連のメール。
  • Message
    Thread内にあるメール。

受信ボックスの取得

受信ボックスの取得を行います。

全てのメールの送信元、送信先、日付、件名、本文を表示するスクリプトは次のようになります。

[Google Apps Script]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function main() {
var thds = GmailApp.getInboxThreads();
for (var i = 0; i < thds.length; i++) {
var thd = thds[i];
var msgs = thd.getMessages();
for (var j = 0; j < msgs.length; j++) {
var msg = msgs[j];
var from = msg.getFrom(); // 送信元
var to = msg.getTo(); // 送信先
var date = msg.getDate(); // 日付
var subject = msg.getSubject(); // 件名
var body = msg.getBody(); // 本文
Logger.log(from + " : " + to + " : " + date+ " : " + subject);
}
}
  • 2行目
    全てのThreadを取得します。
  • 5行目
    Threadごとのメールを取得します。
  • 8~12行目
    各メールの送信元、送信先、日付、件名、本文を取得します。

Google Apps Script - ⑦GoogleSpreadSheetのデータ参照

GASを使って、GoogleSpreadSheetのデータ参照を行ってみます。

スプレッドシートのデータ構造

GoogleSpreadSheetは、3つのデータ構造に分けることができます。

  • SpreadSheet
    1つのスプレッドシート・ファイルのこと。
    複数のシートを持ちます。
  • Sheet
    SpreadSheet内にあるシートのこと。
  • Range
    Sheet内にあるマス目の集合のこと。

一般的な表形式と同じ概念なので理解しやすいかと思います。

データ参照

データ参照を行うソースは以下の通りです。

[Google Apps Script]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function main() {
var id="********************************************"; // スプレッドシートID
var spreadsheet = SpreadsheetApp.openById(id) // スプレッドシートを取得
var sheet = spreadsheet.getSheetByName("シート1") // シートを取得

// 1セルのデータ取得(上から2つ、左から2つめのデータ取得)
Logger.log(sheet.getRange(2,2).getValue());

// 複数セルのデータ取得(3行3列のデータ取得)
var data = sheet.getRange(1,1,3,3).getValues();
for (var i=0; i < 3; i++) { // 横ループ
for (var j=0; j < 3; j++) { // 縦ループ
Logger.log(i + " " + j + " " + data[i][j]);
}
}
}
  • 2行目
    操作するスプレッドシートのIDを設定します。
    スプレッドシートIDは、ブラウザでスプレッドシートを開いたときのURLの“spreadsheets/d/“の後ろから“/edit”の前の文字列です。
  • 7行目
    1つのセルのデータを取得します。
    getRange関数でセル位置を指定し、getValue()関数をデータを取得しています。
  • 10行目
    複数のセルデータを取得します。
    1行目から3行目、1列目から3列目のデータをgetValues()関数を使ってまとめて取得し、配列に格納しています。
    複数のデータを参照したい場合は、まとめて取得したほうが処理が高速になります。

Google Apps Script - ⑥WebAPIとして公開

GAEで書いたスクリプトをWebAPIとして公開してみます。

WebAPI用のスクリプト作成

メールの未読件数を返すスクリプトを作成します。

ポイントは以下の通りです。

  • 1行目
    GETアクセスがきたらdoGet()関数がコールされます。
  • 3行目
    Gmailの未読件数を取得します。
  • 8行目
    JavaScriptオブジェクトをJSONに変換する関数になります。

[Google Apps Script]

1
2
3
4
5
6
7
8
9
10
11
12
13
function doGet(e){
// 未読件数を取得
var cnt = GmailApp.getInboxUnreadCount();
return createJson({count: cnt});
}

// JavaScriptオブジェクトをJSONに変換
function createJson(data){
var json_str = JSON.stringify(data);
var mime_type = ContentService.MimeType.JSON;
var json = ContentService.createTextOutput(json_str).setMimeType(mime_type);
return json;
}

デプロイ

WebAPIとして公開するためには、作成したスクリプトをデプロイする必要があります。

①画面右上の[デプロイ]⇒[新しいデプロイ]を選択します。

②[歯車マーク]⇒[ウェブアプリ]を選択します。

③[説明][次のユーザとして実行][アクセスできるユーザ]を設定し、[デプロイ]ボタンを押します。

今回はテスト用なので、[説明]なし、[次のユーザとして実行]自分(開発ユーザ)、[アクセスできるユーザ]自分のみ としました。

④デプロイが正常に完了するとアクセス用のURLが表示されます。

動作確認

デプロイ時④に表示されたURLをブラウザで表示します。

[実行結果]

json形式でメールの未読件数が表示されました。

サーバを準備することなくこんなに簡単にWebAPIを開発できるのは少し感動します。

ただ無料枠での利用ですと回数制限や突然のサービス停止などのリスクはあると思いますが。。。

Google Apps Script - ⑤JSONデータ取得

気象庁の天気予報WebAPI

気象庁の天気予報WebAPIを使うと、json形式の天気予報データが取得できます。

JSONデータのフォーマットは下記の通りです。

  • publishingOffice
    データ配信元。 基本的に「気象庁」となっています。
  • reportDatetime
    報告日時。「+09:00」という部分はタイムゾーン。
  • targetArea
    対象の地域。130000.jsonは基本的に「東京都」。
    13が東京なのは、都道府県コードがそうなっているためです。
  • headlineText
    ヘッドラインです。
  • text
    詳細な概要情報です。
    改行は「\n\n」なので、ブラウザなどに表示するときはbrタグに変更する必要があります。

エリアコードは下記のjsonで確認できます。

エリアコード一覧 - https://www.jma.go.jp/bosai/common/const/area.json

JSONデータ取得

気象庁から東京(エリアコード:130000)の天気予報JSONデータを取得するソースコードは次の通りです。

[Google Apps Script]

1
2
3
4
5
6
7
8
// メイン関数
function main() {
var response = UrlFetchApp.fetch("https://www.jma.go.jp/bosai/forecast/data/overview_forecast/130000.json");
var json = JSON.parse(response.getContentText())
Logger.log(json) // jsonデータ全体。
Logger.log("targetArea:" + json.targetArea) // jsonデータ内の一部(trgetArea)を参照。
Logger.log("ヘッドライン:" + json.headlineText) // jsonデータ内の一部(headlineText)を参照。
}

[実行結果]

正常に、東京の天気予報データを取得することができました。

Google Apps Script - ④外部サイトにアクセス

GASで外部サイトにアクセスします。

外部サイトにアクセス

外部サイトにアクセスするソースは以下のようになります。

[Google Apps Script]

1
2
3
4
5
6
// メイン関数
function main() {
// 外部サイトにアクセス
var response = UrlFetchApp.fetch("https://ailog.site/2021/10/30/2021/1030/");
Logger.log(response.getContentText());
}

初回実行時に、Googleアカウントの認証が必要になります。

正常に実行されるとサイトのソースがログに表示されます。

[実行結果]

外部サイトにアクセスできるということは、いろいろな情報にアクセスできるということです。

取得した情報を定期的にまとめたり、その情報に応じてメールを送ったりといろいろなサービスを構築することができるようになります。

Google Apps Script - ③カレンダーに予定追加

GASでGoogleカレンダーに予定を追加します。

カレンダーに予定追加

GASでカレンダーに予定を追加するソースは以下のようになります。

[Google Apps Script]

1
2
3
4
5
6
7
8
9
10
11
12
// メイン関数
function main() {
createSchedule("予定(テスト)", 2021, 10, 31)
}

// スケジュールを追加する関数
function createSchedule(title, year, month, day) {
// カレンダーIDからカレンダーを取得
var calendar = CalendarApp.getCalendarById("xxxxxxxx@gmail.com");
// カレンダーに終日のスケジュールを追加
calendar.createAllDayEvent(title, new Date(year, month - 1, day))
}

初回実行時に、Googleアカウントの認証が必要になります。

9行目に、予定を追加するGoogleアカウントを設定します。

GASでは、Googleカレンダーに対して下記のような操作を行うこともできます。

  • 時間指定した予定を作る
  • 予定を調べる(読み込む)
  • 予定の削除

他の機能に関しては、下記の公式リファレンスをご参照下さい。

CalendarAppのリファレンス - https://developers.google.com/apps-script/reference/calendar/calendar-app

Google Apps Script - ②メール送信

GASでメール送信を行ってみます。

メール送信

GASでメールを送信するソースは以下のようになります。

1行で簡単に書けます。

[Google Apps Script]

1
2
3
function test() {
GmailApp.sendEmail("xxxxxxxxx@ailog.site", "タイトル", "本文");
}

初回実行時に、Googleアカウントの認証が必要になります。

他のプログラミング言語でメールの送信を行う場合、smtpやポート番号や認証情報などいろいろと設定が必要で面倒ですが、GASであればGoogleアカウントを使って簡単に送信できるのでとても楽ちんです。

Google Apps Script - ①ログ出力

Google Apps Scriptを使うと、日常的な作業を自動化することができます。

またパソコンを起動していなくても、自動起動することができるのでとても便利です。

今回からはGASのサンプルをいろいろ実行してみてその可能性を探っていきたいと思います。

ログ出力

まずは最も基本的な処理としてログの出力を行ってみます。

[Google Apps Script]

1
2
3
function test() {
Logger.log("Hello World");
}

ログの出力は、処理内容の確認やデバッグでよく使用しますのでとても大切な処理になります。


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×