שיתוף | קבצים מצורפים במייל לדרייב
-
@מנצפכ עשיתי ככה
const sheet = SpreadsheetApp.getActive(); const ss = SpreadsheetApp.getActiveSpreadsheet(); const ScriptProperties = PropertiesService.getScriptProperties(); const MainSheet = sheet.getSheetByName('מייל לדרייב'); const SettingsSheet = sheet.getSheetByName('הגדרות'); const IdSheetSentEvenDay = sheet.getSheetByName('כתובות id שנשלחו ביום זוגי'); const IdSheetSentOddDay = sheet.getSheetByName('כתובות id שנשלחו ביום אי זוגי'); const SettingsValues = SettingsSheet.getRange('B:B').getValues(); const DeleteSheets = SettingsValues[1][0]; const SearchWords = SettingsValues[3][0]; const WordsExclude = SettingsValues[4][0]; const SearchByGmail = `${SearchWords} newer_than:1h -{in:draft ${WordsExclude}}` const HourAgo = new Date(Date.now()); function mailToDrive() { const EvenOrOdd = new Date().getDay() % 2; const SheetToday = EvenOrOdd === 1 ? IdSheetSentEvenDay : IdSheetSentOddDay; const LastRowEvenDay = IdSheetSentEvenDay.getLastRow(); const LastRowOddDay = IdSheetSentOddDay.getLastRow(); const SourceValuesEvenDay = IdSheetSentEvenDay.getRange(`A2:A${LastRowEvenDay}`).getValues(); const SourceValuesOddDay = IdSheetSentOddDay.getRange(`A2:A${LastRowOddDay}`).getValues(); console.log(SearchWords); // const Threads = GmailApp.search(SearchByGmail); const Threads = GmailApp.search(SearchWords); Logger.log(Threads.length) for (const thread of Threads) { const Messages = thread.getMessages(); for (const message of Messages) { if ( SourceValuesEvenDay.findIndex(e => e[0] === message.getId()) !== -1 || SourceValuesOddDay.findIndex(e => e[0] === message.getId()) !== -1) { continue; } sendToDrive(message); message.markRead(); SheetToday.getRange(SheetToday.getLastRow() + 1, 1).setNumberFormat("@").setValue(message.getId()); SpreadsheetApp.flush(); } } } function sendToDrive(message) { const attachments = message.getAttachments(); if (attachments.length === 0) { return; } let mainFolder = DriveApp.getFoldersByName("דרייב"); if (mainFolder.hasNext()) { mainFolder = mainFolder.next() } else { mainFolder = DriveApp.createFolder("דרייב"); } attachments.forEach(attachment => { if (attachment.getContentType() == "video/mp4") { mainFolder.createFile(attachment.copyBlob()); } }); }
(הכל נכנס בתיקייה אחת עם השם המקורי - והקוד מבוצע גם על הקבצים הישנים - ורק ע קבצי וידאו)
אבל מאוד הרבה קבצים נהיים לי כפול - בהפעלה אחת
למה? -
@שמואל-ש כתב בשיתוף | קבצים מצורפים במייל לדרייב:
@מנצפכ 1.אפשר רק קבצים מסויימים - למשל רק וידאו?
2.אפשר שייכנס לתיקייה הראשית של "מייל לדרייב" ולא יתחלק לתת תיקיות לכל מייל?אין לי עניין לפתח את זה יותר ממה שהוא
פתחתי את זה עבור מישהו שהיה לו צורך בזה איך שהוא עכשיו@שמואל-ש כתב בשיתוף | קבצים מצורפים במייל לדרייב:
@מנצפכ עשיתי ככה
const sheet = SpreadsheetApp.getActive(); const ss = SpreadsheetApp.getActiveSpreadsheet(); const ScriptProperties = PropertiesService.getScriptProperties(); const MainSheet = sheet.getSheetByName('מייל לדרייב'); const SettingsSheet = sheet.getSheetByName('הגדרות'); const IdSheetSentEvenDay = sheet.getSheetByName('כתובות id שנשלחו ביום זוגי'); const IdSheetSentOddDay = sheet.getSheetByName('כתובות id שנשלחו ביום אי זוגי'); const SettingsValues = SettingsSheet.getRange('B:B').getValues(); const DeleteSheets = SettingsValues[1][0]; const SearchWords = SettingsValues[3][0]; const WordsExclude = SettingsValues[4][0]; const SearchByGmail = `${SearchWords} newer_than:1h -{in:draft ${WordsExclude}}` const HourAgo = new Date(Date.now()); function mailToDrive() { const EvenOrOdd = new Date().getDay() % 2; const SheetToday = EvenOrOdd === 1 ? IdSheetSentEvenDay : IdSheetSentOddDay; const LastRowEvenDay = IdSheetSentEvenDay.getLastRow(); const LastRowOddDay = IdSheetSentOddDay.getLastRow(); const SourceValuesEvenDay = IdSheetSentEvenDay.getRange(`A2:A${LastRowEvenDay}`).getValues(); const SourceValuesOddDay = IdSheetSentOddDay.getRange(`A2:A${LastRowOddDay}`).getValues(); console.log(SearchWords); // const Threads = GmailApp.search(SearchByGmail); const Threads = GmailApp.search(SearchWords); Logger.log(Threads.length) for (const thread of Threads) { const Messages = thread.getMessages(); for (const message of Messages) { if ( SourceValuesEvenDay.findIndex(e => e[0] === message.getId()) !== -1 || SourceValuesOddDay.findIndex(e => e[0] === message.getId()) !== -1) { continue; } sendToDrive(message); message.markRead(); SheetToday.getRange(SheetToday.getLastRow() + 1, 1).setNumberFormat("@").setValue(message.getId()); SpreadsheetApp.flush(); } } } function sendToDrive(message) { const attachments = message.getAttachments(); if (attachments.length === 0) { return; } let mainFolder = DriveApp.getFoldersByName("דרייב"); if (mainFolder.hasNext()) { mainFolder = mainFolder.next() } else { mainFolder = DriveApp.createFolder("דרייב"); } attachments.forEach(attachment => { if (attachment.getContentType() == "video/mp4") { mainFolder.createFile(attachment.copyBlob()); } }); }
(הכל נכנס בתיקייה אחת עם השם המקורי - והקוד מבוצע גם על הקבצים הישנים - ורק ע קבצי וידאו)
אבל מאוד הרבה קבצים נהיים לי כפול - בהפעלה אחת
למה?אני לא יודע
לא עברתי על הקוד שלך -
@שמואל-ש כתב בשיתוף | קבצים מצורפים במייל לדרייב:
@מנצפכ 1.אפשר רק קבצים מסויימים - למשל רק וידאו?
תעקוב אחרי החיפוש בממשק של המייל ותוכל לחקות אותו
לדוגמה החיפוש הזה:
הוא בעצם:has:attachment has:video
אפשר כמובן לפלטר את ההודעות עצמן עם קוד אבל זה יותר מהיר, גם לפיתוח וגם במשאבי זמן ריצה