【GAS】Gmailを操作しよう!
おはようございます!MARIEです(`・ω・´)ゞ
宿題の答え合わせ
前回の宿題は無事に完了しましたでしょうか。
宿題は以下でした。
朝礼のファシリを通知してくれるプログラムについて、毎日10時~11時の間に通知されるように設定をしてみてください。
ヒント:「GAS トリガー 時間設定」でググると良さそう(゜-゜)
①まずトリガーを開く
②トリガーを追加する
③各設定を行う、そして保存
これでトリガーが設定され、毎日特定の時間に通知がされる。
しかし、きっと皆様もお気づきかと思うのですが、
特定の時間といっても10時ちょうどに!などの設定が残念ながらトリガーだけだとできません。例えば今回の場合は「10時~11時の間」という少し曖昧な感じになってしまうのです(._.)
いや、私はどうしても10時ちょうどの時間を指定したいんだ!!
そんな時は、これまたスクリプトにプログラムを書かなければいけないのです。
この記事がめちゃめちゃわかりやすく説明をしてくれていました。
是非参考にしてみてください!
Gmailの構造について
では本日はGmailとGASの連携について学んでいきましょう!
まずは構造から。
①一通の「メール」をGmailサービスでは「Message」と呼びます。
②メッセージのやり取り(返信)をまとめたものを「Thread」と呼びます。
GmailApp
└Thread //Thread を検索する
└ Message //Thread の中から Message を取り出す
└ Attachment
【そもそもGmailの検索窓って皆さん使いこなせてますか?】
これ、GAS以外のところでも全然役に立つので一度目を通しておいてくださいm(_ _)m
Gメールを操作するプログラムを書いてみよう
例えば、件名に「サンプル」というキーワードが入ったものを扱いたい場合。Gメールの中には、複数の「Message」や「Thread」が入っていると思います。
例①:件名「商品サンプルについて」
例②:件名「サンプルを送りします」
※一旦以下コピペでいいです。
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の中はこんな感じ。
一つ注意をしなければいけないのが、並び順です。
スレッドは新しいものが上に来ますし、スレッドの中では古いメッセージが先です( `ー´)ノ
messsagesの中はこんな感じ。
messagesはmessageが入った二次元配列。
これで検索にヒットした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で、ある特定のキーワード(自由に決めていいです)が入っているメールの送受信日時、宛先、件名、本文をスプレットシートに出力してください(゜-゜)
今までの知識でできる方はもう本当素晴らしいですが、もちろんググって良いです!
宿題は以上です!
ではまた次回、よろしくお願いいたします(`・ω・´)ゞ