Advertisement
Namokonov

mailoshnaya

Oct 7th, 2021 (edited)
874
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. let sheetSettingsName = 'Настройки';
  2. let sheetOrderName = 'Отчет по выгрузке';
  3. let folder;
  4. let folderId;
  5.  
  6. function getMails(today = 0) {
  7.   let SS = SpreadsheetApp.getActiveSpreadsheet();
  8.   let optionsSheet = SS.getSheetByName(sheetSettingsName);
  9.   let config = optionsSheet.getRange("B1:D3").getValues();
  10.   let [motherFolderName, from, subject, before, after] = [config[0][0], config[1][0], config[2][0],
  11.   today ? new Date() : config[0][2],
  12.   today ? new Date(new Date().getTime()+1000*60*60*24) :config[1][2]];
  13.  
  14.   let query = q(before, after, from, subject);
  15.   Logger.log(query);
  16.   let threads = GmailApp.search(query);
  17.   Logger.log(threads);
  18.  
  19.   threads.map(t => t.getMessages()
  20.     .forEach(mail => {
  21.       let label = t.getFirstMessageSubject();
  22.       let date = mail.getDate();
  23.       let fromWho = mail.getFrom();
  24.       let files = mail.getAttachments();
  25.       let text = mail.getPlainBody().replace(/\n/g, ' ');
  26.  
  27.       if (files.length) {
  28.         if (!folder) {
  29.           folder = getFolder(before, after, motherFolderName, from, subject);
  30.           folderId = folder.getId();
  31.         }
  32.  
  33.         files.forEach(file => copyFileToFolder(date, file, folder, folderId, label, fromWho, text));
  34.       } else {
  35.         saveDataToSheet(date, label, '', fromWho, text, '')
  36.       }
  37.     })
  38.   );
  39. }
  40.  
  41. function getMailsToday() {
  42.   getMails(1);
  43. }
  44.  
  45. function q(after, before, from, subj) {
  46.   from = from ? `from:{${from}}` : '';
  47.   subj = subj ? `subject:${subj}` : '';
  48.   after = after ? `after:${d2s(after)}` : '';
  49.   before = before ? `before:${d2s(before)}` : '';
  50.  
  51.   return `in:inbox ${[after, before, subj, from].join(' ')}`;
  52. }
  53.  
  54. function d2s(date, f = 'yyyy/MM/dd') {
  55.   return date ? Utilities.formatDate(date, Session.getScriptTimeZone(), f) : ' . ';
  56. }
  57.  
  58.  
  59. function getFolder(before, after, motherFolderName, from, subj) {
  60.   let motherFolder = DriveApp.getFoldersByName(motherFolderName);
  61.   motherFolder = motherFolder.hasNext() ? motherFolder.next() : DriveApp.createFolder(motherFolderName);
  62.   let folderName =
  63.   `${before ? d2s(before , 'dd.MM') : 'all'} – ${after ? d2s(after, 'dd.MM') : 'all'}${from ? ', from: ' + from : ''}${subj ? ', subj: ' + subj: ''}`;
  64.   let workFolder = motherFolder.getFoldersByName(folderName);
  65.   return workFolder.hasNext() ? workFolder.next() : motherFolder.createFolder(folderName);
  66. }
  67.  
  68. function copyFileToFolder(date, file, folder, folderId, label, fromWho, text) {
  69.   let fileName = file.getName();
  70.   let id = folder.createFile(file).getId();
  71.   saveDataToSheet(date, label, fileName, fromWho, text, folderId, id);
  72. }
  73.  
  74. function saveDataToSheet(date, label, fileName, fromWho, text, folderId, id) {
  75.   data = [
  76.     date,
  77.     label,
  78.     fromWho,
  79.     text,
  80.     fileName ? fileName : '',
  81.     id ? 'https://drive.google.com/file/d/' + id : '',
  82.     folderId ? 'https://drive.google.com/drive/folders/' + folderId : ''
  83.   ]
  84.   let sheetOrder = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetOrderName);
  85.   sheetOrder.appendRow(data);
  86. }
  87.  
  88.  
  89.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement