ファイル添付したメールを自動で送るには?実はGoogle Apps Scriptで簡単にできるんです!



こんにちは!
タダケン(@tadaken3)です。

あなたは仕事をしていて、こんな風に思ったことはありませんか?

「毎月、送っているこのアクセスレポート、自動で送信できればいいのにな~」

実はこれ、Google Apps SrciptでGmailとGoogle Driveを操作することで自動化できるんです。今回はGmailとGoogle Driveを組み合わせて、Google Apps Scriptで添付ファイルを送る方法をお伝えします。

sendEmailでHTMLメールを送信する

メールを送信する場合は、GmailAppサービスのsendEmailメソッドを使います。

書き方は

GmailApp.sendEmail(送信先アドレス, 件名, 本文, オプション)

となります。

このオプションの部分に連想配列の形式で、様々なオプションを設定できます。

オプション名 機能
attachments 添付ファイル
bcc bccアドレス
cc ccアドレス
from fromアドレス
name 送信者名

などが挙げられます。今回は添付ファイルの部分にGoogle Driveから取得するファイルを添付して行きます。

//GMailAppにsendEmailメソッドを実行してメールを送信する
GmailApp.sendEmail(
      'tadaken3@hogehoge.com', //宛先
      '今月のアクセスレポートです',  //件名
      '添付ファイルに詳細をまとめました。ご確認ください。' //本文
      );
}

メール送信について、詳しく知りたい場合は以下の記事も参考にしてみてください。

初心者でも簡単!Google Apps ScriptでGmailを操作してメールを送る方法
Google Apps Scriptでメールマガジンを送るシステムを作りたいと思います。シリーズ初回の今回は、Google Apps ScriptでGmailを操作してメールを送る方法です。

Google Driveからファイル名を指定してファイルを取得する

ではGoogle Driveにアップしてあるファイルを取得してきます。Google Driveを操作するにはDriveAppを使います。DriveAppに対してgetFilesByNameメソッドでファイル名を指定し、nextメソッドで実際のファイルを取得します。

書き方は

DriveApp.getFilesByName(ファイル名).next()

です。

実際のコードはこのようになります。

//Google Driveからファイル名で、ファイルを取得する
var report = DriveApp.getFilesByName('report.pdf').next()

//GMailAppにsendEmailメソッドを実行してメールを送信する
GmailApp.sendEmail(
      'tadaken3@hogehoge.com', //宛先
      '今月のアクセスレポートです',  //件名
      '添付ファイルに詳細をまとめました。ご確認ください。', //本文
      {attachments: [report]}
      );
}

実行するとこのような形でPDFファイル付きのメールが送信されます。

もちろんGoogle Driveにアップしてあれば、エクセルやパワーポイントのファイルも添付できます。

フォルダを指定してその中のファイルを取得する

ファイル名を指定する方法ですと、Google Drive上に同じ名前のファイルが複数存在している場合、意図したファイルを添付することができません。そこでフォルダを指定してからファイル名を指定していきます。

フォルダを指定するにはフォルダIDが分かると便利です。

フォルダのIDはGoogleドライブで目的のフォルダに移動した際のURLの

https://drive.google.com/drive/folders/{フォルダID}

{フォルダID}の部分です。

以下画像もご参考ください。

フォルダIDがわかったら、ファルダを指定するスクリプトを書いていきましよう。
フォルダを指定するには、DriveAppに対してgetFolderByIdメソッドを実行します。

書き方は

var folder = DriveApp.getFolderById(ID);
folder.getFileByName(ファイル名).next();

です。

フォルダにたいしてgetFileByNameメソッドを実行するときは、メソッド名が単数のFileになっている点にご注意ください。

実際のコードはこのようになります。

//Google Driveからファイル名で、ファイルを取得する
var folder = DriveApp.getFolderById('XXXXXXXXXX'); //フォルダIDを入力
var report = folder.getFileByName('report.pdf').next(); //file単体になっている点に注意

//GMailAppにsendEmailメソッドを実行してメールを送信する
GmailApp.sendEmail(
      'tadaken3@hogehoge.com', //宛先
      '今月のアクセスレポートです',  //件名
      '添付ファイルに詳細をまとめました。ご確認ください。', //本文
      {attachments: [report]}
      );
}

今回、詳細は省略しましたが、フォルダ・ファイルIDについては、理解できるとGoogle Apps Scriptでファイル操作が自由にできるようになります。以下の記事で詳しく説明しているので、こちらも参考にしてみてください。

基本中の基本!GASでGoogleドライブのファイル・フォルダをIDで取得する
Google Apps ScriptでGoogleドライブ内のファイルを目的のフォルダに移動したいということはよくあります。今回はそのための準備としてフォルダやファイルをIDで操作する方法です。

ファイルIDからファイルを取得する

フォルダ内にも同じ名前のファイルが存在する場合は、ファイルIDを指定してファイルを取得します。
ファイルIDを指定する場合は、DriveAppにgetFileByIdメソッドを実行します。

書き方は

DriveApp.getFileById(ID);

です。

ファイルIDを直接指定する場合は、nextメソッドが不要な点にご注意ください。

//ファイルIDを指定して、ファイルを取得する
var report = DriveApp.getFileById(XXXXXX);//ファイルIDを入力

//GMailAppにsendEmailメソッドを実行してメールを送信する
GmailApp.sendEmail(
      'tadaken3@hogehoge.com', //宛先
      '今月のアクセスレポートです',  //件名
      '添付ファイルに詳細をまとめました。ご確認ください。', //本文
      {attachments: [report]}
      );
}

まとめ

Google Apps Scriptで添付ファイル付きのメールを送信する方法についてお伝えしました。Google Driveのファイルを添付することで月次でおこなっているレポート業務などを効率化することができます。

使える場面の多いテクニックなので、ぜひ活用してみてください。

最後まで記事を読んでいただきありがとうございます。これからもあなたの仕事を効率化するためのテクニックをご紹介していきます。

どうぞ、お楽しみに!

よろしければ、こちらからTwitterアカウントのフォローをお願い致します。

  投稿者プロフィール

tadaken3
『プランノーツ』ではGoogle Apps Script、Pythonを使ってのツールの開発をしています。本業はとある会社のデータアナリストです。

ブログ『タダケンのEnjoy Tech』の管理人もやっています。「ラクして成果を上げる仕組みを考える」をモットーにPython、Google Apps Scriptを使って、「実務で使える具体的なテクニック」を公開しています。あわせて読んでいただければうれしいです。

タイトルとURLをコピーしました