概要
メインフォルダ下の各フォルダに追加されたファイルを各setting.txtの内容に従ってファイルをメールに添付して送信するものです。
google謹製の同期ソフトを使用してローカルでファイルを特定のフォルダに追加 → クラウドに同期 → settiing.txtに従い添付してメール送信みたいな動作を想定しています。
構成
フォルダ構成例
フォルダ
メインフォルダ/
┝ hoge部長/
| └ setting.txt
└ fuga先生/
┝ setting.txt
┝ 添付送信されるファイル1
└ 添付送信されるファイル2
setting.txtには上から順にメールアドレス、タイトル、本文テンプレートが書かれてあります。
setting.txt
example@hoge.com
メールのタイトル
メール本文。<br>で改行。
フォルダとsetting.txtを追加すれば増やせます。添付ファイルは複数okです。
結果
コード
autoMail.gs
function autoMail() {
var folderId = 'メインフォルダid';
folders2Arr(DriveApp.getFolderById(folderId).getFolders()) //メインフォルダ下のフォルダをすべて取得
.filter(function (folder) {
return files2Arr(folder.getFiles()).length >= 2; //setting.txtしかないものはフィルタ
})
.map(function(folder) {
return folder.getFilesByName('setting.txt').next() //setting.txtの取得
.getBlob().getDataAsString("sjis").split(/[\s]+/) //shiftjisで読み込み、改行部分で分けて配列に
.concat([files2Arr(folder.getFiles()) //添付ファイルの配列を末尾に追加
.filter(function(file) {
return file.getName() != 'setting.txt';
})]
)
.concat(folder);
})
.map(function([to, sub, body, files, folder]) {
MailApp.sendEmail({ //メールの送信
to: to,
subject: sub,
htmlBody: body,
attachments: files
});
files.map(function(x){ //送信したファイルを削除
folder.removeFile(x);
})
});
}
function files2Arr(files) { //配列に変換
var arr = [];
while(files.hasNext()) {
arr.push(files.next());
}
return arr;
}
function folders2Arr(folder) {
return files2Arr(folder);
}