Google Apps Script(GAS)を使って、Gmailで何かできないかとお探しのようですね。
わかりました。その願い叶えましょう。
当記事ではGASとGmailを使って業務効率化をしたい人向けに、
- GASを使ってGmailでできること
- Gmailからメールを自動送信する方法
- Gmailからメールデータを抽出する方法
について解説します。
GASを使ってGmailでできることは?
GASを使ってGmailを操作する具体的な方法を解説する前に、まずはGmailまわりでGASを使って何ができるのかについて解説します。
GmailまわりでGASを使ってできることは、大きく以下の2つです。
- Gmailからメールを自動送信する
- Gmailからメールデータを抽出する
要は、GASから命令してGmail経由でメールを送信したり、Gmailに届いたメールをGASから命令して取得できるということですね。
たしかに同じような内容のメールをいちいちGmailを起動して送信したり確認しなくて済むのは、業務効率化に役立ちそうです。
Gmailからメールを自動送信する方法
ここからはGASを使ってGmailのメールを送信する方法について解説します。
sendEmailメソッドを使う
GASでGmailを送る方法ですが、たった1つのメソッドを使うだけメールを送信できます。
そのメソッドがGmailAppクラスのsendEmailメソッドです。sendEmailメソッドは以下の構文で動作します。
GmailApp.sendEmail(
To[宛先],
Subject[件名],
Body[本文],
{Option[オプション]}
);
sendEmailメソッドでは{}内にカンマ区切りでオプションを設定することができ、オプションには以下のような種類があります。
cc・bccはもちろん、送信者名や添付ファイルなどもオプションから設定できます。
プロパティ | 内容 |
---|---|
cc | CCに含めるメールアドレス[カンマ区切り] |
bcc | BCCに含めるメールアドレス[カンマ区切り] |
name | 送信者名[デフォルト:ユーザー名] |
noReply | 返信不可フラグ |
replyTo | 返信時に返信先となるメールアドレス |
attachments | 添付ファイル |
sendEmailメソッドのサンプルコード
参考までに、sendEmailメソッドを使ってメールを送信するサンプルコードを載せておきます。
下記のコードを貼り付けて、toアドレスを自分用に変えたらすぐ動くので、良かったら試してみてください。
function send_Gmail() {
//送信先のメールアドレス
var to = 'test@example.com';
//件名・タイトル
var subject = 'test title';
//本文
var body = 'テスト';
//オプション
var options = {name: "mono"};
//送信メソッド
GmailApp.sendEmail(to, subject, body, options);
}
Gmailからメールデータを抽出する方法
ここからはGASを使ってGmailのメールを抽出する方法について解説します。
前提として送信よりも抽出の方がコードもデータ構造も複雑で難しくなるので、気合入れていきましょう。
Gmailのデータ構造
まずはじめにGmailのデータ構造について解説します。
Gmailデータは、以下のような入れ子構造になって存在しています。
→②スレッド(各メールのスレッド)
→→③メッセージ(各メール)
したがって、特定のメールの件名や本文を抽出するにはメールの検索・抽出条件を設定したり、スレッドをさかのぼってどのメッセージから抽出するのか特定したりなど、色々と前処理をしないとデータを取ることができません。
初見ではforループやif条件などやや複雑な印象を受けると思いますが、慣れてきたら合理的によく考えられた構造だと理解できるかと思います。
Gmailの抽出条件
①の受信ボックスの段階で必要最小限のメールデータに絞り込むために、Gmailの抽出条件について解説します。
Gmailの抽出条件はGoogleの検索演算子と似ており、下記がその一覧表です。
検索演算子 | 説明 |
---|---|
to: | 受信者を指定します |
cc: bcc: |
Cc や Bcc の受信者を指定します |
subject: | 件名に含まれる単語を指定します |
OR または { } | 複数の条件に一致するメールを検索します |
- | 検索結果から除外するキーワードを指定します |
AROUND | 2 つのキーワードが近くにあるメールを検索します。2 つの単語間に許容可能な単語数を指定します 引用符を追加すると、入力した単語の順序と一致するメールを検索します |
label: | 指定したラベルのメールを検索します |
has:attachment | 添付ファイルのあるメールを検索します |
has:drive has:document has:spreadsheet has:presentation |
Google ドライブへのリンク、Google ドライブに保存された Google ドキュメント、スプレッドシート、スライドへのリンク、または Google ドキュメント、スプレッドシート、スライドの添付ファイルが含まれるメールを検索します |
has:youtube | YouTube 動画が含まれるメールを検索します |
list: | メーリング リストのメールを検索します |
filename: | 指定した名前やファイル形式の添付ファイルがあるメールを検索します |
指定したキーワードまたはフレーズに完全一致するメールを検索します | |
( ) | 複数のキーワードをグループ化します |
in:anywhere | すべてのメール(迷惑メールやゴミ箱にあるメールを含む)を検索します |
is:important label:important |
重要マークが付いたメールを検索します |
is:starred is:snoozed is:unread is:read |
スター付き、スヌーズ中、未読、既読のメールを検索します |
has:yellow-star has:blue-info |
指定した色のアイコンが付いたメールを検索します |
cc: bcc: |
[Cc] か [Bcc] 欄の受信者を指定します |
after: before: older: newer: |
指定した期間に送信されたメールを検索します |
older_than: newer_than: |
日(d)、月(m)、年(y)で期間を指定して、それより古いメールか新しいメールを検索します |
is:chat | チャット メッセージを検索します |
deliveredto: | 指定したメールアドレスに配信されたメールを検索します |
category:primary category:social category:promotions category:updates category:forums category:reservations category:purchases |
指定したカテゴリのメールを検索します |
size: | 指定したサイズより大きいメールを検索します(バイト単位) |
larger: smaller: |
指定したサイズより大きいまたは小さいメールを検索します(バイト単位) |
+ | 検索キーワードと完全に一致するメールを検索します |
Rfc822msgid: | 指定した Message-ID ヘッダーのメールを検索します |
has:userlabels has:nouserlabels |
ラベルが付いているメールまたは付いていないメールを検索します |
searchメソッドで検索条件を指定
いよいよGmailからデータを取得しましょう。
Gmailからデータを取得するには、GmailAppクラスのsearchメソッドを利用します。
myThreads = GmailApp.search(
検索条件,
開始インデックス,
最大取得数
);
検索条件には先ほどの検索演算子を文字列で指定し、取得したいデータに応じて開始インデックスと最大取得数を指定すればOKです。
getMessagesForThreadsメソッドでスレッド配列を取得
検索条件に合致したスレッドを取得するには、GmailAppクラスのgetMessagesForThreadsメソッドを利用します。
myMsg = GmailApp.getMessagesForThreads(myThreads);
変数myMsgには配列形式で検索条件に合致したスレッドデータが返されます。この状態ではまだメッセージデータは配列に格納されていません。
getPlainBodyメソッドでGmailの本文を抽出
スレッド配列からメッセージ本文を取得するには、GmailAppクラスのgetPlainBodyメソッドを利用します。
myBody = GmailApp.getPlainBody(myMsg[i][j]);
変数myMsgには検索条件に合致したスレッド配列[i]と、そのスレッド内のメール配列[j]で構成されているので、二重for文でメールごとにメール本文を取り出します。
myBodyには各メールの本文がテキストデータで格納されるので、後は好きなように本文データを利用することが可能です。
メールデータ抽出のサンプルコード
参考までに、searchメソッド、getMessagesForThreadsメソッド、getPlainBodyメソッドを使ってメールデータを抽出するサンプルコードを載せておきます。
下記のコードを貼り付けて、検索演算子を自分用に変えたらすぐ動くので、良かったら試してみてください。
function send_Gmail() {
//検索演算子の指定(ラベル「example」のメールを抽出)
var query = 'label:example'
//ラベル「example」のメールを最大10件取得
var myThreads = GmailApp.search(query, 0, 10);
//検索条件に合致するスレッド配列データを取得
var myMsg = GmailApp.getMessagesForThreads(myThreads);
//本文をログに出力
for(var i=0; i < myMsg.length; i++) {
for(var j=0; j < myMsg[i].length; j++) {
var body = myMsg[i][j].getPlainBody();
Logger.log(body);
}
}
}
まとめ
今回は「GASを使ってGmailでできること」「Gmailからメールを自動送信する方法」「Gmailからメールデータを抽出する方法」について解説しました。
GASでGmailを操作できるようになると、メールの自動送信や、条件に合致するメールが届いたときにスプレッドシートへ貼り付けしたり、Slackに通知したりなど、いろいろ便利な使い方ができるようになります。
GASの勉強におすすめの本も載せておくので、今回の内容を復習しつつ、さらにGASを仕事に活かせてもらえたら幸いです。
では、また。