さまざまなファイルを添付してメール送信する場合、Googleドライブを活用すると便利です。Googleドライブから必要なファイルを取り出しメールで送信するスクリプトを作成してみましょう。

Googleドライブでファイルを取り出す

ごく簡単なメッセージをGmailで送信する、というのは結構簡単です。ここまで何度となく連載で行ってきました。が、本格的な文書を作成し送るような場合、Gmailだけでは限界があります。例えば、Googleドライブでドキュメントを作成しメールで配布したり、あるいはGoogleマップの地図をイメージファイルにして添付するようなこともあるでしょう。

このようにさまざまなファイルを添付してメールを送信する場合、Googleドライブを活用できると非常に効率よくファイルを扱うことができます。Google Apps Scriptには、Googleドライブを扱うDriveAppというオブジェクトが用意されています。これを使い、必要なファイルを取り出してメールに添付し送信すればいいのです。

ファイルを添付したメールを送るには、まずGoogleドライブからファイルのオブジェクト(File)を取り出す必要があります。

・IDを指定してファイルを得る
変数 = DriveApp.getFileById( ファイルのID );

・名前を指定してファイルを得る
変数 = DriveApp.getFilesByName( ファイル名 );

getFileByIdは、ファイルのIDを指定してFileオブジェクトを取り出します。Googleドキュメントの場合、ファイルを開くと以下のようなアドレスになっているのがわかります。

https://docs.google.com/document/d/……ID……/edit

この「……ID……」の部分が、ファイルに割り当てられているIDです。これを指定すれば、そのIDのファイルが得られます。

getFilesByNameは、ファイル名を指定してファイルを得るものです。ただし、同名のファイルが複数ある可能性もあるため、戻り値はFileオブジェクトのイテレータ(FileIterator)という値になっています。

ドキュメントを添付して送信する

こうして取得したFileオブジェクトは、そのままGmailAppのsendEmailで添付ファイルに指定して送信することができます。GmailApp.sendEmailは、以下のようにしてメールを添付し送信できます。

GmailApp.sendEmail( アドレス, タイトル, 本文, {attachments:[ファイル]});

 第4引数に用意するattachmentsに、Fileオブジェクトを配列にして指定すれば、それらのファイルを添付して送信できます。では、簡単なサンプルを作成してみましょう。


function sendWithDoc() {
  var id = '……ファイルID……';
  var docfile = DriveApp.getFileById(id);
  GmailApp.sendEmail(
    'your@mail.address', 'ドキュメント添付', 
    docfile.getName() + 'を添付して送信します。', 
    {attachments:[docfile]}
  );
}
  • 送信されたメール。ID指定したファイルが添付されているのがわかる。

適当なGoogleドキュメントを用意し、そのIDを変数idに設定して下さい。your@mail.addressには、送信するメールアドレスを指定しておきます

今日更新したドキュメントをすべて添付する

Googleドライブからファイル名やIDを指定してFileを取り出す方法は、あらかじめファイルの情報がわかっていないといけません。例えば、「今日、修正したGoogleドキュメントのファイルを添付して送る」なんてことをしたい場合はどうすればいいのでしょうか。

このような場合は、DriveAppの「searchFiles」というメソッドを使います。これは以下のように、引数として検索の条件をテキストで指定します。

変数 = DriveApp.searchFiles( 検索条件 );

問題は、この検索条件をどのように指定すればいいか、でしょう。これは、ファイルの情報を比較する式をテキストで作成して記述します。ファイルの情報には、主なものとして以下のようなものがあります。

title――名前
mimeType――Mimeタイプ
createdDate――作成日
modifiedDate――最終更新日
lastViewedByMeDate――最後に自分がアクセスした日

titleやmimeTypeは、テキストの値として比較します。比較演算子としては、contains1, =, !=といったものが使えます。その後の日付関係のものは、<=, <, =, !=, >, >=といった記号が利用できます。またandやorを使うことで複数の式をつなげて記述することもできます。では、実際の検索テキストのサンプルをいくつか挙げておきましょう。

・タイトルが「hello」を含むもの
'title conains "hello"'

・Googleドキュメントのファイル
'mimeType contains "document"'

・2019年4月1日以降に作成したファイル
'createdDate > "2019-04-01"'

・2019年4月1日に編集したファイル
'modifiedDate > "2019-0401" and modifiedDate < "2019-04-02"'

ファイルの種類は、mimeTypeで指定をします。Googleドキュメントの場合、この値は"application/vnd.google-apps.document"となっています。この値をチェックしてもいいのですが、一般的には'mimeType contains "document"'として、mimeTypeに"document"が含まれているかチェックすればいいでしょう。

指定の日以降に編集したドキュメントを添付する

では、searchFilesによる検索とメール送信を組み合わせて、指定した日以降に編集したGoogleドキュメントのファイルをすべて添付して送信するサンプルを作成してみましょう。


function sendWithDocs() {
  var date = "2019-03-21" // チェックする日付
  var files = DriveApp.searchFiles('modifiedDate > "' + date + '" and mimeType contains "document"');

  var arr = [];
  while (files.hasNext()) {
    var file = files.next();
    arr.push(file);
  }

  GmailApp.sendEmail(
    'your@mail.address', 
    'ドキュメント添付', 
    '今日修正したファイルを添付して送信します。', 
    {attachments:arr}
  ); 
}
  • 送信されたメール。複数のGoogleドキュメントが添付されている。

実行すると、「ドキュメント添付」というメールアドレスに、Googleドキュメントを添付してメールを送信します。今回も、sendEmailの'your@mail.address'は、それぞれのメールアドレスに書き換えて下さい。

このサンプルでは、変数dateに指定した日付以降に編集されているGoogleドキュメントをすべて添付します。dateの日付を今日の日付にしておけば、今日編集したファイルをすべて添付したメール送信できます。

searchFilesによるGoogleドライブのファイル検索は非常に強力です。これを使いこなすことで、必要なファイルをすべて取り出すことができます。これはメール送信だけでなく、様々に応用できるテクニックですから、ぜひ基本的な使い方を覚えておきましょう。