やりたいこと
- メールに添付されたファイルを取得して、自動的にGoogle Driveに格納したい。
- その際、送り主の名前と取得日時で、フォルダが作成されるようにしたい。
イメージ:以下の通り、送り主と同一のタイトルでのやり取りで添付されたファイルが同一のフォルダに格納されるようにしたい。
背景
WordPressサイトを通じて、顧客からきたお問い合わせメールがくるが、そこに見積もり添付がある。
最初のメールには顧客の名前があり、それを取得している。以下のコードで言えば「var customerName = content[3];」の部分。
問題点
実行の結果、ファイルごとにフォルダが作成されており、「同一の送り主、かつ 取得日付(これはまだ取得していない状況。後ほど行う予定)」でファイルがまとまっていない結果になっており、解決に時間がかかっています。
つまり、一つのフォルダに一つのファイルしか格納されておらず(逆に言えば、一つのファイルごとに一つのフォルダが作成さっれている状況)、実現したい一つのフォルダに複数のファイルが格納されている状態ではありません。どうしたら求める結果を実現できますか?
以下のように、一つのファイルと一つのフォルダが作成されている。
問題となるコード(全体像)
function saveAttachments(){ //日付計算 var now = new Date(); var today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); var yesterday = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 1); var strYesterday = Utilities.formatDate(yesterday, "JST", "yyyy/MM/dd"); let condition; condition = "subject:(【添付ファイルあり】)"; //未読 condition += " has:attachment"; //添付あり condition += " after:" + strYesterday; //今日(昨日より後) var search_mail = GmailApp.search(condition, 0, 10); var messeges = GmailApp.getMessagesForThreads(search_mail); var targetFolder = DriveApp.getFolderById('1DtKNZmd9SfELY-6UDiYcvD_48k-AGEz3'); for(var i = 0; i < messeges.length; i++) { //検索結果を一つずつ取り出す var body = messeges[i][0].getPlainBody(); var content = body.split("\n"); // body内の情報を取得 var customerName = content[3]; var newFolder = targetFolder.createFolder(customerName); for(var j = 0; j < messeges[i].length; j++) { //スレッドの場合ここを複数回実行 //添付ファイルを取得 var attach = messeges[i][j].getAttachments(); //添付ファイル取得の日付 var day = messeges[i][j].getDate(); //取り出したメールの日付を取得 var strDay = Utilities.formatDate(day , "JST", "yyyy_MM_dd"); //★★メールが今日以降か再度チェック if (day > yesterday){ //添付ファイルは複数あることが前提 for(var k = 0; k < attach.length; k++){ newFolder.createFile(attach[k]); var file = newFolder.getFilesByName(attach[k].getName()) var filename = strDay + '_' + attach[k].getName(); file.next().setName(filename); } } } } }
試したこと
やりたいことのイメージは、newFolderにpushメソッドを使って、fileを追加していくイメージです。
このイメージをもとに、pushメソッドを使って、色々試したのですが、結果できていない状況です。
アドバイスをお願いいたします。
参考URL
https://note.com/bets_inc/n/n222ac80b9cc6
https://blog.hikozaru.com/2019/01/GAS-Tips1.html
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/28 11:45