【GAS】Google Driveのファイルを添付してGmail送信を自動化させよう!
8/82022
カテゴリー:プログラミング
GASでファイル添付・メール送信も自動化できる!
Gmailでファイルを添付して何かを送る、ということは多いですよね。
今回は、「Google Driveにあるファイルを添付して、Gmailで送信する」
というGASを作ってみました。
(具体例として、「インボイスの登録番号通知書とWordファイルを
複数の宛先に送る」プログラムを作りました)
※GASはルーティンの味方
ファイル添付・メール送信自動化の手順
①Google Driveに送りたいファイルを保存し、アドレスをコピーする
宛先ごとにGoogle Driveにフォルダを作り、送りたいファイルを保存します。
このとき、Driveのフォルダアドレスをコピーしておきます。
②スプレッドシートにメールの情報を入力する
スプレッドシートにGmailのTo, Cc, Bcc, 件名、本文、Google Driveのフォルダのアドレス(先ほどコピーしたものを貼付)
などメールの情報を入力します。
一番左のステータスは、下書きのままにしたいものは下書き、送信したいものは送信を入力します。
ここから情報をとり、メールを送ることになります。
③Apps Scriptを起動する
拡張機能→Apps Scriptを起動します。
④GASを書く
Apps Scriptが開いたら、いよいよGASを書いていきます!
今回は、以下の流れをイメージして作ります。
なお、全部いきなり送信だと困ることも多いと思うので
- 「ステータスが下書きだったら下書き状態にする」
- 「ステータスが送信だったら送信する」
- 「ステータスが下書き、送信以外だったらなにもしない」
に条件分けします。
こちらで作ったコードは以下のとおりです。
function Gmailsend() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var rows = sheet.getLastRow()-1; //先頭の行を除く
var columns = sheet.getLastColumn();
var range = sheet.getRange(2,1,rows,columns);
var datas = range.getValues();
datas.forEach(function(data){
var status = data[0];
var receipant = data[1];
var cc = data[2];
var bcc = data[3];
var subject = data[4];
var body = data[5];
var DriveUrl = data[6];
var attachments = []; //添付ファイルの空の配列を作る
if(DriveUrl !==""){
var id = DriveUrl.replace("https://drive.google.com/drive/u/0/folders/","");
var folder = DriveApp.getFolderById(id);
var files = folder.getFiles();
while(files.hasNext()) {
var file = files.next();
attachments.push(file);
}
}
var options = {
cc:cc,
bcc:bcc,
attachments:attachments,
}
if(status === "下書き"){
GmailApp.createDraft(receipant, subject, body, options);
}else if(status === "送信"){
GmailApp.sendEmail(receipant, subject, body, options);
}
});
}
解説を加えます!
■スプレッドシートから情報を読み取る
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var rows = sheet.getLastRow()-1; //先頭の行を除く
var columns = sheet.getLastColumn();
var range = sheet.getRange(2,1,rows,columns);
var datas = range.getValues();
datas.forEach(function(data){
var status = data[0];
var receipant = data[1];
var cc = data[2];
var bcc = data[3];
var subject = data[4];
var body = data[5];
var DriveUrl = data[6];
以上の部分は、スプレッドシートから情報を読み取っています。
最初の2行はスプレッドシートを使う時に必ず必要となる部分ですので、
覚えてしまって良いと思います。
4行目の
var rows = sheet.getLastRow()-1; //先頭の行を除く
は、データが入っているセルの最終行を取得しています。
先頭行を除きたいので、-1をしています。
5行目の
はデータが入っているセルの最終列を取得しています。
7行目の
8行目の
var datas = range.getValues();
で、取得した範囲の値を配列「datas」に格納しています。
10行目以下の
datas.forEach(function(data){
var status = data[0];
var receipant = data[1];
var cc = data[2];
var bcc = data[3];
var subject = data[4];
var body = data[5];
var DriveUrl = data[6];
では、forEachメソッドでdatas配列の中身を一つずつ
取り出してそれぞれの変数に格納しています。
(このとき、インデックス番号が0から始まりまるのでややこしいですね。。)
これで、スプレッドシートの情報を取得できました。
■Google DriveのフォルダID・中のファイルを取得する
次に、Google DriveのフォルダIDと保存されているファイルをすべて取得します。
var attachments = []; //添付ファイルの空の配列を作る
if(DriveUrl !==""){
var id = DriveUrl.replace("https://drive.google.com/drive/u/0/folders/","");
var folder = DriveApp.getFolderById(id);
var files = folder.getFiles();
while(files.hasNext()) {
var file = files.next();
attachments.push(file);
}
}
1行目の、
var attachments = [];
は、添付するファイルを配列にして格納する必要があるので、空の配列をひとまず作っています。
4〜5行目の、
if(DriveUrl !==””){
var id = DriveUrl.replace(“https://drive.google.com/drive/u/0/folders/”,””);
の部分は、
添付するファイルがある場合、
Google DriveのID部分(共通部分であるhttps://drive.google.com/drive/u/0/folders/を除いた部分)
を抜き出しています。
共通部分を空白にしてIDだけ抜き出しているんですね。
このIDは、後でファイルを添付する際に利用します。
6行目〜7行目の
var folder = DriveApp.getFolderById(id);
var files = folder.getFiles();
ではDriveのフォルダーをIDで特定し、その中のファイルを抜き出しています。
8行目〜10行目の
while(files.hasNext()) {
var file = files.next();
attachments.push(file);
は、フォルダにファイルがある限り、
先ほど作った配列である「attachments」に格納して、
と命令しています。
結果として、フォルダ内のすべてのファイルがattachmentsに格納されます。
■ファイルを添付してメールを送信する
最後の部分は、オプションを指定して
Gmailを送信しています。
var options = {
cc:cc,
bcc:bcc,
attachments:attachments,
}
if(status === "下書き"){
GmailApp.createDraft(receipant, subject, body, options);
}else if(status === "送信"){
GmailApp.sendEmail(receipant, subject, body, options);
}
});
}
1〜4行目の
var options = {
cc:cc,
bcc:bcc,
attachments:attachments,
}
という部分は、Gmailの送信オプションである
- Ccの宛先
- Bccの宛先
- 添付ファイル
を指定しています。
7行目〜最後の
if(status === “下書き”){
GmailApp.createDraft(receipant, subject, body, options);
}else if(status === “送信”){ GmailApp.sendEmail(receipant, subject, body, options);
}
の部分は、
スプレッドシートのステータスが「下書き」だったら
下書きのみ作成(GmailApp.createDraft)、
「送信」だったら
送信(GmailApp.sendEmail)、
(それ以外だったら何も起こらない)ようにしています。
イメージ動画を作ってみました。
上の2つはステータスが下書きなのでファイル添付の上下書きフォルダに保存され、
最後の1つはステータスが送信なのでファイル添付の上送信されました。
まとめ
Google Driveのファイルを添付してGmail送信を自動化させる
GASを紹介しました。
これらを手作業で行うのはミスにつながりやすいので、
プログラミングの使い所と考えています。
編集後記
週末は、金曜日に撮れなかったYoutubeにリベンジ。
Youtube更新情報
WordPressのオリジナルテーマ(ガタガタですが。。)
を作ってみたのでノンエンジニアなりの感想を
しゃべってみました。
最近のあたらしいこと
元町 カフェラミル