דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. גוגל סקריפט | כניסה לקישור בקבלת מייל

גוגל סקריפט | כניסה לקישור בקבלת מייל

מתוזמן נעוץ נעול הועבר תכנות
9 פוסטים 2 כותבים 382 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • מוטי מןמ מנותק
    מוטי מןמ מנותק
    מוטי מן
    כתב ב נערך לאחרונה על ידי מוטי מן
    #1

    אני רוצה שבכל פעם שמגיע לי מייל לתווית "א" תהיה גלישה לקישור מסוים שבעצם גורם לרישום כלשהו באיזה מקום.

    אז התחלתי עם זה:
    א. יצרתי תווית עם מסנן במייל בשם A.
    ב. סימנתי לסקריפט איך למצוא את המיילים הללו...

    function linka() {
      var label = GmailApp.getUserLabelByName('a');
      var messages = label.getThreads();
    

    עשיתי נכון?

    אם כן, איך אני מתקדם? (ללמד אותי, לא לגלות 🙂 )

    .

    עריכה: כעת אני חושב שאולי לא חשבתי על זה בצורה הנכונה, אולי יותר נכון להגדיר את זה כסקריפט שייכמס לקישור אינטרנט מסויים רק בתנאי שיש הודעת מייל בתווית A, ובסיום הריצה מסיר את התווית מההודעות.

    chvC תגובה 1 תגובה אחרונה
    0
    • chvC מנותק
      chvC מנותק
      chv
      השיב למוטי מן ב נערך לאחרונה על ידי
      #2

      @מוטי-מן אכן לכאורה הדרך הנכונה היא להגדיר מסנן שמוסיף תוויות, ואז כל פעם לקבל את כל המיילים עם התווית, לבצע את הפרוצדורה ולבסוף להסיר מהם את התווית.

      בנוגע לאיך לעשות שיהיה 'גלישה לקישור מסוים' (או בעברית - שליחת בקשה לכתובת 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

      בלוג | מייל

      מוטי מןמ תגובה 1 תגובה אחרונה
      2
      • מוטי מןמ מנותק
        מוטי מןמ מנותק
        מוטי מן
        השיב לchv ב נערך לאחרונה על ידי מוטי מן
        #3

        @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);
          }
        }
        

        תכלס חסר לי כאן גם את ההתניה שייכנס לקישור רק עם יש מייל חדש, ולא בכל הרצה, זה עדיין לא הבנתי איך להוסיף.

        chvC תגובה 1 תגובה אחרונה
        0
        • chvC מנותק
          chvC מנותק
          chv
          השיב למוטי מן ב נערך לאחרונה על ידי chv
          #4

          @מוטי-מן עכשיו הנושא הוא כבר קוד.
          אבל לא לגמרי ברור מהקוד שכתבת מה אתה רוצה - שייכנס לקישור מסוים על כל אחד מהמיילים עם התווית - או שפשוט אם יש מיילים עם התווית - שייכנס לקישור פעם אחת ואז ימחק מכולם את התווית

          עשיתי לך קוד לדוגמא למקרה שאתה רוצה שעל כל מייל ייכנס לקישור (ככה נראה שרצית כי ניסת לעשות איזה לופ שם):

          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)

          בלוג | מייל

          מוטי מןמ תגובה 1 תגובה אחרונה
          2
          • מוטי מןמ מנותק
            מוטי מןמ מנותק
            מוטי מן
            השיב לchv ב נערך לאחרונה על ידי מוטי מן
            #5

            @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)
                    }
                }
            }
            

            תודה!

            chvC תגובה 1 תגובה אחרונה
            1
            • chvC מנותק
              chvC מנותק
              chv
              השיב למוטי מן ב נערך לאחרונה על ידי chv
              #6

              @מוטי-מן קצת יותר מדויק:

              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)
                  })
                }
              }
              

              בלוג | מייל

              מוטי מןמ תגובה 1 תגובה אחרונה
              1
              • מוטי מןמ מנותק
                מוטי מןמ מנותק
                מוטי מן
                השיב לchv ב נערך לאחרונה על ידי
                #7

                @chv זה לא עושה כלום. יש לי כרגע 2 הודעות בתווית הזו, ולא קורה שום דבר ההפעלה מתחילה ומסתיימת תוך פחות משניה ושום דבר לא קורה.

                chvC תגובה 1 תגובה אחרונה
                0
                • chvC מנותק
                  chvC מנותק
                  chv
                  השיב למוטי מן ב נערך לאחרונה על ידי
                  #8

                  @מוטי-מן צודק... הייתה לי טעות כתיב (כתבתי lenght במקום length.. זה לא היה קורה לי אם הייתי כותב אנגלית כשפת אם, אבל מה לעשות..)
                  עכשיו יעבוד לך לכאורה

                  בלוג | מייל

                  תגובה 1 תגובה אחרונה
                  0
                  • chvC מנותק
                    chvC מנותק
                    chv
                    כתב ב נערך לאחרונה על ידי
                    #9

                    ואגב היה לי עוד טעות. חשבתי שגוגל יצרו שיוך של אובייקטי ההודעות שבתוך מערך הודעות. כלומר חשבתי שאפשר להריץ שורה כזו על מערך הודעות:

                    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 לבדוק את הבקשה שמתקבלת מגוגל סקריפט

                    בלוג | מייל

                    תגובה 1 תגובה אחרונה
                    3
                    • dovidD dovid העביר נושא זה מ-תכנות ב-

                    בא תתחבר לדף היומי!
                    • התחברות

                    • אין לך חשבון עדיין? הרשמה

                    • התחברו או הירשמו כדי לחפש.
                    • פוסט ראשון
                      פוסט אחרון
                    0
                    • דף הבית
                    • קטגוריות
                    • פוסטים אחרונים
                    • משתמשים
                    • חיפוש
                    • חוקי הפורום