-
אני רוצה שבכל פעם שמגיע לי מייל לתווית "א" תהיה גלישה לקישור מסוים שבעצם גורם לרישום כלשהו באיזה מקום.
אז התחלתי עם זה:
א. יצרתי תווית עם מסנן במייל בשם A.
ב. סימנתי לסקריפט איך למצוא את המיילים הללו...function linka() { var label = GmailApp.getUserLabelByName('a'); var messages = label.getThreads();
עשיתי נכון?
אם כן, איך אני מתקדם? (ללמד אותי, לא לגלות )
.
עריכה: כעת אני חושב שאולי לא חשבתי על זה בצורה הנכונה, אולי יותר נכון להגדיר את זה כסקריפט שייכמס לקישור אינטרנט מסויים רק בתנאי שיש הודעת מייל בתווית A, ובסיום הריצה מסיר את התווית מההודעות.
-
@מוטי-מן אכן לכאורה הדרך הנכונה היא להגדיר מסנן שמוסיף תוויות, ואז כל פעם לקבל את כל המיילים עם התווית, לבצע את הפרוצדורה ולבסוף להסיר מהם את התווית.
בנוגע לאיך לעשות שיהיה 'גלישה לקישור מסוים' (או בעברית - שליחת בקשה לכתובת HTTP) - יש לזה מחלקה שלמה שמתפקדת בדומה (לא דומה לגמרי) ל-FETCH הקלאסי מ-JS:
https://developers.google.com/apps-script/reference/url-fetchדוגמא לשליחת fetch + הגדרות - כגון method - POST וכו'
https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetchurl,-params -
@chv עשיתי את זה ככה, והוא טוען שיש שגיאת תחביר בשורה 6, מה זה יכול להיות?
שגיאת תחביר: SyntaxError: Unexpected token ';' שורה: 6 קובץ: קוד.gs
function linka() { var label = GmailApp.getUserLabelByName('a'); var messages = label.getThreads(); for (var response = UrlFetchApp.fetch('http://www.google.com/'); Logger.log(response.getContentText()); messages[i].removeLabel(label); } }
תכלס חסר לי כאן גם את ההתניה שייכנס לקישור רק עם יש מייל חדש, ולא בכל הרצה, זה עדיין לא הבנתי איך להוסיף.
-
@מוטי-מן עכשיו הנושא הוא כבר קוד.
אבל לא לגמרי ברור מהקוד שכתבת מה אתה רוצה - שייכנס לקישור מסוים על כל אחד מהמיילים עם התווית - או שפשוט אם יש מיילים עם התווית - שייכנס לקישור פעם אחת ואז ימחק מכולם את התוויתעשיתי לך קוד לדוגמא למקרה שאתה רוצה שעל כל מייל ייכנס לקישור (ככה נראה שרצית כי ניסת לעשות איזה לופ שם):
function linka() { var label = GmailApp.getUserLabelByName('a') var messages = label.getThreads() if (messages.lenght > 0) { for (var message of messages) { var request = UrlFetchApp.fetch('http://www.google.com/') Logger.log(request.getContentText()) message.removeLabel(label) } }
זה כולל תנאי אם יש מיילים בתווית
עריכה - היה טעות בקוד (בשורה 4 הבדיקה הייתה על האורך של האובייקט label במקום על האורך של המערך messages)
-
@chv שכחת בסוף { אחד
למעשה, זה נכון? איפה כתוב לשלוח על כל הודעה, ואיך זה לשלוח אחד על הכל?
function linka() { // בחירת התווית var label = GmailApp.getUserLabelByName('a') // בחירת השיחות בתווית שצוינה לעיל var messages = label.getThreads() // התנאי if (messages.lenght > 0) { //בהינתן ואין הודעות for (var message of messages) { // בהינתן ויש הודעות var request = UrlFetchApp.fetch('http://www.google.com/') // רישום בלוג Logger.log(request.getContentText()) // מחיקת התווית מההודעות message.removeLabel(label) } } }
תודה!
-
@מוטי-מן קצת יותר מדויק:
function linka() { // יצירת משתנה שמכיל את התווית var label = GmailApp.getUserLabelByName("a") // בחירת השיחות שמכילות את התווית שצוינה לעיל var messages = label.getThreads() // התנאי - אם המערך שאמור להכיל את השיחות גדול מ-0 if (messages.length > 0) { // בהינתן ויש הודעות במערך, הרצה של לולאה שתבצע פרוצדורה על כל הודעה for (var message of messages) { // יצירת בקשה לרשת ואחסון שלה במשתנה var request = UrlFetchApp.fetch("http://www.google.com/") // רישום של התשובה לבקשה ללוג Logger.log(request.getContentText()) // מחיקת התווית מההודעה message.removeLabel(label) } } }
וזה שולח בקשה אחת (כלומר לא מתעסק עם לולאה על כל ההודעות):
function linka() { // יצירת משתנה שמכיל את התווית var label = GmailApp.getUserLabelByName("a") // בחירת השיחות שמכילות את התווית שצוינה לעיל var messages = label.getThreads() // התנאי - אם המערך שאמור להכיל את השיחות גדול מ-0 if (messages.length > 0) { // בהינתן ויש הודעות במערך, הרצה של פרוצדורה דלהלן // יצירת בקשה לרשת ואחסון שלה במשתנה var request = UrlFetchApp.fetch("https://hookb.in/G9OYJqLZQpIWGGeQq182") // רישום של התשובה לבקשה ללוג Logger.log(request.getContentText()) // מחיקת התווית ממערך ההודעות messages.forEach(function (entry) { entry.removeLabel(label) }) } }
-
ואגב היה לי עוד טעות. חשבתי שגוגל יצרו שיוך של אובייקטי ההודעות שבתוך מערך הודעות. כלומר חשבתי שאפשר להריץ שורה כזו על מערך הודעות:
messages.removelabel(label)
מתברר שלא.. אז צריך לעבור בלופ על כל אחת מההודעות במערך ולהסיר את התווית מאובייקט ההודעה עצמו.
אפשר לעשות את זה פשוט עםforEach
ככה -function linka() { // יצירת משתנה שמכיל את התווית var label = GmailApp.getUserLabelByName("a") // בחירת השיחות שמכילות את התווית שצוינה לעיל var messages = label.getThreads() // התנאי - אם המערך שאמור להכיל את השיחות גדול מ-0 if (messages.length > 0) { // בהינתן ויש הודעות במערך, הרצה של פרוצדורה דלהלן // יצירת בקשה לרשת ואחסון שלה במשתנה var request = UrlFetchApp.fetch("https://hookb.in/G9OYJqLZQpIWGGeQq182") // רישום של התשובה לבקשה ללוג Logger.log(request.getContentText()) // מחיקת התווית ממערך ההודעות messages.forEach(function (entry) { entry.removeLabel(label) }) } }
כמו שאתה רואה השתמשתי ב- hookbin.com לבדוק את הבקשה שמתקבלת מגוגל סקריפט
-