見出し画像

【GAS】Gmailを操作しよう!

おはようございます!MARIEです(`・ω・´)ゞ

宿題の答え合わせ

前回の宿題は無事に完了しましたでしょうか。

宿題は以下でした。

朝礼のファシリを通知してくれるプログラムについて、毎日10時~11時の間に通知されるように設定をしてみてください。
ヒント:「GAS トリガー 時間設定」でググると良さそう(゜-゜)

①まずトリガーを開く

画像1

②トリガーを追加する

画像2

③各設定を行う、そして保存

画像3

これでトリガーが設定され、毎日特定の時間に通知がされる。

しかし、きっと皆様もお気づきかと思うのですが、
特定の時間といっても10時ちょうどに!などの設定が残念ながらトリガーだけだとできません。例えば今回の場合は「10時~11時の間」という少し曖昧な感じになってしまうのです(._.)

いや、私はどうしても10時ちょうどの時間を指定したいんだ!!
そんな時は、これまたスクリプトにプログラムを書かなければいけないのです。

この記事がめちゃめちゃわかりやすく説明をしてくれていました。
是非参考にしてみてください!

Gmailの構造について

では本日はGmailとGASの連携について学んでいきましょう!

まずは構造から。
①一通の「メール」をGmailサービスでは「Message」と呼びます。
②メッセージのやり取り(返信)をまとめたものを「Thread」と呼びます。

GmailApp
 └Thread //Thread を検索する
   └ Message //Thread の中から Message を取り出す
      └ Attachment

【そもそもGmailの検索窓って皆さん使いこなせてますか?】

画像4

これ、GAS以外のところでも全然役に立つので一度目を通しておいてくださいm(_ _)m

Gメールを操作するプログラムを書いてみよう

例えば、件名に「サンプル」というキーワードが入ったものを扱いたい場合。Gメールの中には、複数の「Message」やThread」が入っていると思います。

例①:件名「商品サンプルについて」
例②:件名「サンプルを送りします」

画像5

※一旦以下コピペでいいです。

function searchMessage() {
 const query = 'subject: サンプル newer_than:10d';
 const threads = GmailApp.search(query); //queryの条件でメール検索
 const messages = GmailApp.getMessagesForThreads(threads); //HITした thread の中からメッセージだけを取り出す(二次元配列になってる)


 for (let i = 0; i < messages.length; i++) {
   for (let j = 0; j < messages[i].length; j++) {
     console.log('----------');
     console.log(messages[i][j].getSubject());
     console.log(messages[i][j].getFrom());
     console.log(messages[i][j].getPlainBody());
   }
 }
}

コード解説をしていきます。

function searchMessage() {
 const query = 'subject: サンプル newer_than:10d';
 const threads = GmailApp.search(query);
 const messages = GmailApp.getMessagesForThreads(threads);

threadsの中はこんな感じ。
一つ注意をしなければいけないのが、並び順です。
スレッドは新しいものが上に来ますし、スレッドの中では古いメッセージが先です( `ー´)ノ

画像6

messsagesの中はこんな感じ。
messagesはmessageが入った二次元配列。

画像7

これで検索にヒットしたmessageを配列で取得することができました。
しかし、これだと、返信を含めた全てのメールを取り出すことになります。

それでももちろん問題は無いのですが、実務では最初の1通のみを取得したいことも発生してくるかと思います。

最初の1通のみ取得したい場合のプログラムはこうです。
ぜひ参考にしてみてください。

function searchMessage2() {
 const query    = 'subject: サンプル newer_than:10d';
 const threads  = GmailApp.search(query);
 const messages = GmailApp.getMessagesForThreads(threads);

 for (let i=0; i<messages.length; i++){
	const firstMessage = messages[i][0]; //ここで最初のメッセージとしています
	console.log('----------');
	console.log(firstMessage.getSubject());
	console.log(firstMessage.getFrom());
	console.log(firstMessage.getPlainBody());
 }
}

これでも行けます。

function searchMessage3() {
 const query    = 'subject: サンプル newer_than:10d';
 const threads  = GmailApp.search(query);
 
 for (const thread of threads){
	const firstMessage = thread.getMessages()[0]; //threadの中にあるmessages。messages の 最初([0])がfirstMessage になる

	console.log(firstMessage.getPlainBody());
 }
}

もちろんGmailではもっといろんなことができます。
例えば、「GASの「トリガー」を使って、定期的に(1日1回とか)メールチェックする」とか「メールの件名に特定の文字列が入っていたらslack通知をする」とか!

結構ググったら出てくるので実際に業務に使う際に、調べながらやってみると良いかと思います( `ー´)ノ

では宿題です!

Gmailで、ある特定のキーワード(自由に決めていいです)が入っているメールの送受信日時、宛先、件名、本文をスプレットシートに出力してください(゜-゜)

今までの知識でできる方はもう本当素晴らしいですが、もちろんググって良いです!

宿題は以上です!
ではまた次回、よろしくお願いいたします(`・ω・´)ゞ


いいなと思ったら応援しよう!