Google Apps ScriptとGmailのシステムを開発する コメントする / Google Apps Script / By Keita Yagi Gmail(Gメール)はGoogleのフリーメールサービスです。パソコン・スマートフォン問わず様々なデバイスのブラウザで利用することができ、オフラインでも利用することができます。なんと現在では毎日10億人以上のユーザーが利用しているようです。セキュリティやプライバシー保護の面では、送受信のされる全てのメールに業界最高水準の暗号化技術が適用され、最先端のフィッシング対策機能も利用可能です。生産性向上という意味でも、Gmail自体の優れた検索性等に加えて、他のGoogle Workspaceアプリやツールとの連携が上げられるでしょう。Google Workspaceユーザーであれば、Business Starter, Standard, Plus, Enterpriseいずれのプランでも「Gmail ビジネス用メール」「ビジネス用のカスタムメール」「99.9% 以上の攻撃をブロックするフィッシングおよび迷惑メール保護機能」「広告なしのメール機能」という主要な機能の利用が可能です。今回のブログでは基本的なGmailの使い方ではなく、公式リファレンスを確認しつつGmailとGoogle Apps Script(グーグルアップススクリプト、GAS)を使ってどんなことができるのかをまとめていきたいと思います。本エントリーの想定読者は、開発者ではなく、GASを使うと具体的にどんな事ができるのかイメージを膨らませたいという読者向です。そのため、以下の説明ではソースコードについては省略し、実際の実行結果の画面とGoogle Apps Scriptのスクリプトエディタに表示されるログの結果を元に説明を進めたいと思います。もし本エントリーのファイルやソースコードについて確認したいという方がいらっしゃいましたら、お問い合わせフォームよりご連絡いただければ幸いです。Google Apps Scriptを使ってGmailを操作する前提知識GASを使ってGmailを操作していくためにはGmailの重要な概念を把握しておく必要があります。それは、スレッドととメッセージです。1通ずつ送る(受信する)いわゆるメールに該当するのがメッセージ、メールへの返信などのやりとりをひとまとめにしたものがメッセージとなります。実際の画面イメージで考えると以下のようになります。赤枠部分がGmail全体を指すGmailAppというクラス、紫がスレッドを指すGmailThreadというクラス、青色がメッセージを指すGmailMessageというクラスになります。 開発者向けの話になりますが、操作の対象がスレッドなのかメッセージなのかで、できることが異なりますし処理方法も変わってきます。以下が一覧になります。 操作 GmailApp スレッド メッセージ 新規メールを送信する ○ 返信する ○ 転送する ○ 受信トレイに移動する ○ アーカイブに移動する ○ 迷惑メールに移動する ○ ゴミ箱に移動する ○ ○ 重要にする/重要を外す ○ 既読にする/未読にする ○ ○ スターを付与する/スターを外す ○ Google Apps Scriptを使ってGmailを送信するGoogle Apps Scriptを使ってシンプル(プレーンな)Gmailの送信を行うまずは手始めに、非常にシンプルな件名、宛先(To)、本文を指定しただけのメールを送ってみます。 Google Apps Scriptを使ってGmailでHTMLメールを送信するGmailではHTMLメールを送ることができます。GASを使ってカスタマイズしたHTMLメールを送ることができます。GASでHTMLメールを作成する場合、gsファイルまたはHTMLファイルを用いてスクリプトエディタ内で定義したりGoogleドキュメントを使う(後述)といった方法があります。まずはシンプルにgsファイル内で定義して送信してみます。 上記はスクリプト内で<h1>Hello World</h1>を記載してHTMLメールとして送信したものになります。Google Apps Scriptを使ってGmailで添付ファイルを送信する 通常のメール送信と同様、GASを使ってファイルの添付も可能です。Google Workspaceのアプリ(GoogleドキュメントやGoogleスプレッドシート)およびGoogleドライブに格納したPDFファイル等にはIDが付与されますので、そのIDを使ってファイル添付することができます。今回は先ほどのHTMLメールを拡張して、GoogleドライブにあるPDFファイルを添付して送信してみます。 なお、今回はnoreplyもonにすることで返信不要のメールアドレスを生成もしています。noreplayについてはGoogle Workspaceアカウントであれば設定可能です(Gmailアカウントでは不可)。noreplay以外にもreplayToなどの設定もできます。さて、今後、さきほどのメールを拡張するようなイメージでGASを使ってGmail送信をするスクリプトを作っていくのですが、その前に注意点があります。それはGASの制約です。Google Apps ScriptのGmailの制約(割当と制限)について以前に「Google Apps Scriptの制約 〜GASを使う上での注意点〜」というエントリーを掲載しました。この中にあるように、GASを使ってメール送信する場合、1日あたりの割当と制限があります(最新の情報についてはQuotas for Google Servicesに掲載されています)Gmailに限ると、メールの受信数が無料のGmailアカウントや旧Gsuiteは100回、Google Workspaceアカウントの場合は1,500回までといった制限がります。さらに、Google Workspaceアカウントであっても、課金累計額が100ドルを超えておりかつ課金して60日以上が経過していないと無料のGmailアカウントと同じ扱いになるようです。思ったより送信できる回数は少ないので、どの程度メール配信の残りがあるのかは確認していきたいところです。残りのメール送信回数を確認するためのメソッドが用意されており、getRemainingDailyQuota()を使うことになります。例えば、下記はスクリプトエディタでログ出力をした結果になります。残り65回送信できるということになりますね。 Google Apps ScriptのGmailの上限回数の問題を回避する 実際のところ、GASを使って顧客向けに有益な情報を配信するためにメール一斉送信したいといった場合、100件や1500件はあっという間に消費してしまうかと思います。 これを回避するために裏技(?)的に一度下書き状態にしてから送信を行うといったことをすると、割当を消費することなく送信することができます(参考サイト)。ただし、スクリプトの実行時間だったりその他の制約や割当に対しては、別途配慮をした処理を付け加える必要があります。また、この裏技的な方法がGoogle側の仕様変更により使えなくなるという可能性もあります。 Google Apps Scriptを使ってGmailの下書きを作成する メールをいきなり送信してしまうのではなく、一度下書き状態にして、確認してから送信したいといったニーズもあるかと思います。そのような場合もGASでは対応できます。 下記の例では、「メール下書きサンプル」というメールをGASを使って下書き作成しました。そして、GASを使って下書きにあるものの中から、件名が「メール下書きサンプル」に一致するものを送信するといったことをしてみます。 スクリプトを実行すると、「メール下書きサンプル」のメールが送信され送信先に届き、「送信しないメール」の方は下書きにそのまま残っていることが確認できます。 Google Apps Scriptを使ってGmailの未読のスレッドやメッセージに返信をする先ほどまでGASを使ったGmailの送信をやってきました。次は返信をやってみたいと思います。どのようなメッセージに対してどのように返信するのか、といった条件は様々に考えられますが、今回は未読のメール(スレッド)があった場合に、スレッドおよびメッセージ毎に返信をする、といったことをしてみたいと思います。まずはスレッド全体に対して返信をする場合です。先ほどの「メール下書きサンプル」を一度未読状態にして、GASで未読のスレッドを探してきて返信を実行した結果が下記になります。 次に、このスレッドに対しての返信および、メッセージ毎にも返信をするということをやってみます。少し入り組んだ形になっていますが、先ほどの2通のメールの塊がスレッドとして認識されているので、2つ目の「メールを受領しまた。確認しました。※スレッドへの返信です」のメールが、スレッドへの返信メールになります。一方で、「1個目のメールへの返信です」「2個目のメールへの返信です」はそれぞれ、下記青枠の「メッセージ①」「メッセージ②」に対する返信となっています。 このようにGmailがスレッド・メッセージで管理されている特徴を活かして、返信方法の条件分けをカスタマイズすることが可能になります。Google Apps Scriptでテンプレートを使ってGmail送信を行うメルマガ配信などで件名や本文の宛名や中身を個別に変更したいといった場合に、メールのテンプレート化対応をしておくと良さそうです。以下ではHTMLファイルを使って定義する場合と、Googleドキュメントを使って定義する場合の2つを紹介します。Google Apps ScriptでHTMLファイルでメールテンプレートを定義してGmail送信を行うこちらはGoogle Apps Script内でテンプレート用のHTMLファイルを用意し、GASの実行ファイル側でHTMLを呼び出して、変更用に定義したテキストを置換するというやり方になります。HTMLファイル側で以下のようなテンプレートを作成します。赤枠下線の部分を置換するようにGAS側で定義してあげます。 GAS実行ファイル(gsファイル)側で任意のテキストを置換するようにし、メール送信のスクリプトを実行すると以下のようにメール送信されます。赤枠の部分が、それぞれ指定したテキストに置き換わっている、という仕組みになります。 上記の例では一人分のメール送信のみでしたが、置換するテキストをスプレッドシート等にまとめておき、メール配信の際にそれらのデータを読み出して置換するといった形にすれば複数のメール配信に対応することができます。Google Apps ScriptでGoogleドキュメントでメールテンプレートを定義してGmail送信を行うHTMLファイルの編集が不慣れだったりする場合に便利なのがGoogleドキュメントを利用した方法です。Googleドキュメントで指定したフォントサイズ・カラーの変更がそのままHTMLメールとして配信されるため、直感的に利用しやすい利点があります。中身の仕組みとしては、テンプレートとするGoogleドキュメントをID指定で引っ張ってきて、内部的にHTMLファイルとして読み込ませ、先ほどのHTMLファイルでメールテンプレートを定義した場合と同様に指定したテキストを置換するといったやり方になります。まず、以下がテンプレートとするGoogleドキュメントです。#USERと#MYNAMEを置換するテキストとしています。フォントサイズやフォントカラーはGoogleドキュメントで指定をするだけです。 上記指定の後、メール送信のスクリプトを実行すると下記のようにメールが送信されます。 Google Apps Scriptを使ってGmailの一斉送信を行うこれまで一通のメールを送信する内容の紹介ばかりをしてきましたが、一斉配信こそGASを使ったGmail送信の醍醐味だと個人的には感じています。実際のところ、正直な話をすると世の中にはMailchimpなどメール配信用の素晴らしいSaaSがありますので、本格的にメルマガ配信をしたいといった場合は、そうしたサービスを使う方が結果的に良いとは思います。ただ、そうしたサービスの導入が難しかったり登録プランの関係でそれらのサービスの利用が難しいといったネガティブな理由や、コストを抑えつつサクッと他のGoogle Workspaceアプリと連携してメール配信をしてしまいたいといったポジティブな理由の場合は、やはりGASを使う方がよいといった選択になるかもしれません。そこで、今回はGoogleスプレッドシートで配信リストを用意し、その対象者に対してメール送信するといったことをやってみます。まずはGoogleスプレッドシートで配信リストを用意します。下記の青枠部分が配信用のデータリストになります。 上記の画像内の赤枠に記載している#FIRST, #LAST, #TITLE, #MESSAGEの部分を、下記画像の赤線部分で置換してHTMLメールとして送信します。#MYNAME部分はGAS実行ファイル内で任意のテキストで置き換える指定にしています。 実際にメール送信のスクリプトを実行すると、下記のようなメールが送信されます。画像では一つだけ掲載していますが、スプレッドシートにあるデータの分だけ送信されます。 メール送信の実行後は、スプレッドシート側で送信されたことがわかるように、G列のstatus項目に送信済みであることを示す「sent」の文字を挿入するようにしています。 Google Apps Scriptを使ってGmailでメールにスターをつけるGASを使って任意のメールにスターをつけることができます。先ほどスプレッドシートを用いて送信したメール(を受信したと想定して)にスター(★)をつけてみましょう。下記の左側がスターを付ける前で、右側が付けたあとになります。スターがあればスターを取り除くといったことももちろん可能です。 Google Apps Scriptを使ってGmailでラベルの操作をするここではラベルの操作についていくつか見ていきたいと思います。Google Apps Scriptを使ってGmailでラベルを作成するまず新しいラベルを作成してみます。ここでは「NewLabelTester」というラベルを作ってみることにします。左側が作成前のラベル一覧(一部)で、右側が作成後になります。 Google Apps Scriptを使ってGmailでラベルを適用する次に、受信トレイの中から件名に「Googleスプレッドシートからメール送信」を含むメールのみに対して、上記で作成したラベルを適用してみます。左側が適用前、右側が適用後になります。 Google Apps Scriptを使ってGmailのメールを検索するGoogle Apps Scriptを使ってGmailのPDF添付ファイルをGoogleドライブに保存(複製)するGmailで使用できる検索演算子は、GASを使ったGmailの検索にも利用できます。例えば、以下のように受信ボックスにあるPDFファイルが添付されたメールがあるとします。このメールに添付されたPDFファイルをGoogleドライブへ保存(複製)するといったことをやってみます。 赤枠部分のメールを件名で検索し、PDFファイルがあった場合は、Googleドライブに保存するという処理を実行してみました。左側が実行前のGoogleドライブで、右側が実行後のGoogleドライブです。前述の見出しでは保存といっていますが、実際は添付されたPDFファイルを別に作り直しています。 いかがでしょうか?この他にもできることは様々にあります。今後も定期的にこのブログでGASでできる様々なことをアップデートしていきます。また、こんなことはできないの?といった疑問やご質問、ご意見などあればコメント欄かお問い合わせ頂けますようお願いいたします。なお、冒頭でもご説明しましたように、上記で紹介したGoogle Apps Scriptをご利用になれたい方は、お問い合わせフォームよりご連絡いただければ、ファイルをシェアいたします。お気軽にご連絡ください!参考詳解! Google Apps Script完全入門 [第3版]