Gmailで受け取ったメールから、差出人や件名を条件にして、添付ファイルを自動的にGoogle ドライブに保存したい。G Suiteのことなので、Google Apps Scriptを用いるのがよい。普段いじらないので色々躓きつつ実装メモ。
やりたいこと
冒頭に書いたとおり。Gmailで受け取ったウンザリするほどのメール群から、差出人や件名、未読などいろいろな条件をつけて、条件にマッチしたものの添付ファイルを自動的にGoogle ドライブに保存する。
Google Apps Scriptを用いるのが正道だろう。チュートリアルとリファレンスが充実しているので、基本的には公式サイト「Apps Script | Google Developers」を見ながら作るのが早い。JavaScriptがベースなので、オフィススイート嫌いの自分でもやってもいいかなと思える。
実装
以下のように実装した。コード中のコメントで何をしているのか解説。使われている関数の意味は公式のリファレンスで調べるのが一番早くて正確なので割愛。まぁだいたいわかるはず。
目的:最新20件のスレッドから、match@example.comさんから"マッチでーす"が件名に含まれている未読メールの添付ファイルを、Googleドライブの任意のディレクトリに保存する。保存したメールは既読にする。
function myFunction() {
// 最新20件
var thds = GmailApp.getInboxThreads(0,20);
// 条件に合ったメッセージ群を抽出
msgs = selectMsgs(thds);
// 各メッセージについて処理
for (var i=0; i<msgs.length; i++) {
// 添付ファイルを取り出す
files = msgs[i].getAttachments();
// Google Driveに保存
saveFiles(files);
}
}
function selectMsgs(thds) {
msgs = [];
for (var i=0; i<thds.length; i++) {
// 特定の条件に合うメッセージのみ抽出
// falseが返ってきたら次のメッセージを処理、配列が返ってきたら結合
sp_msgs = selectSpecificMsgs(thds[i].getMessages());
if (!sp_msgs) { continue; }
Array.prototype.push.apply(msgs,sp_msgs);
}
return msgs;
}
function selectSpecificMsgs(msgs) {
var sp_msgs = [];
var count = 0;
// ここから条件にあったものだけを追加するような感じ
for (var j=0; j<msgs.length; j++) {
if (!msgs[j].isUnread()) { continue; }
sender = msgs[j].getFrom();
if (!sender.match(/match@example.com/)) { continue; }
subject = msgs[j].getSubject();
if (!subject.match(/マッチでーす/)) { continue; }
sp_msgs.push(msgs[j]);
// 既読にする
msgs[j].markRead();
// 配列に追加したらcountする
count++;
}
// 一度もcountされていない=条件に合わなかった、のでfalseを返す
if (count == 0) { return false; };
return sp_msgs;
}
function saveFiles(files) {
// IDはブラウザで当該ディレクトリにアクセスしたときのURLの末尾
var folder = DriveApp.getFolderById('hogehoge');
for (var i=0; i < files.length; i++) {
Logger.log(files[i].getName());
folder.createFile(files[i]);
}
}
実行すると、最新20件のスレッドから、条件にあったメールの添付ファイルを、Googleドライブ上の任意のディレクトリに保存できる。ディレクトリはフォルダIDで指定している。GoogleのフォルダIDは、ブラウザでアクセスした時のURLの末尾。
あまりJavaScriptを触ってこなかったので、時間がかかってしまったが勉強になった。JavaScriptはfor〜in文がややこしいことを知らず、そこで随分ハマってしまった。
参考
参考にさせていただきました。ありがとうございます。
コメント