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

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

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

שאלה | איזה משתנה מחזיר את שם השולח בגוגל סקריפט?

מתוזמן נעוץ נעול הועבר תכנות
22 פוסטים 5 כותבים 726 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • OdedDvirO מנותק
    OdedDvirO מנותק
    OdedDvir
    השיב לyossiz ב נערך לאחרונה על ידי
    #12

    @yossiz אמר בשאלה | איזה משתנה מחזיר את שם השולח בגוגל סקריפט?:

    אני לא כל כך מבין למה @OdedDvir החליט שהכותרת sender מתאימה לפה

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

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

    חייםיודלביץח תגובה 1 תגובה אחרונה
    4
    • חייםיודלביץח מנותק
      חייםיודלביץח מנותק
      חייםיודלביץ
      השיב לOdedDvir ב נערך לאחרונה על ידי חייםיודלביץ
      #13

      אתה צודק, הכותרת של הפוסט הטעתה אותי

      מה הטעה בכותרת, אשמח לדעת בשביל לשנות עבור מי שיחפש בעתיד

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

      שילבתי את הקוד אצלי, כתבתי קריאה לפונקציה [בשורה 11] ועכשיו הוא כתוב לי במקום שם וכתובת המייל "undefined"
      מה לא הגדרתי נכון?

      תודה

      הקוד שלי הוא: מכאן

      function newmail() {
        let sendmail = 'exemple@gmail.com'
        let sendlabel = GmailApp.getUserLabelByName('לשלוח')
        let oldmessages = GmailApp.search('is: read label:לשלוח')
          for (let oldmessage of oldmessages) {
                  oldmessage.removeLabel(sendlabel)}
            let newmessages = GmailApp.search('is: unread label:לשלוח')
              for (let newmessage of newmessages) {
                    let message = newmessage.getMessages()[0]
                    let subjec = message.getSubject()
                    let senderEmail = parseEmailHeader(message)
                    let subject = 'יש מייל חדש עם הכותרת= ' + subjec
                    let body = 'יש לך מייל חדש מאת ' + senderEmail
                    MailApp.sendEmail(sendmail, subject, body,)
                    newmessage.removeLabel(sendlabel)
              }   
      }
      
      מוטי אורןמ תגובה 1 תגובה אחרונה
      0
      • מוטי אורןמ מנותק
        מוטי אורןמ מנותק
        מוטי אורן
        השיב לחייםיודלביץ ב נערך לאחרונה על ידי מוטי אורן
        #14

        @חייםיודלביץ אתה צריך לעשות return מהפונקציה ש- @OdedDvir הביא.

        דוגמה למימוש אצלי:

        function newmail() {
          let newmessages = GmailApp.search('from: example@gmail.com')
          for (let newmessage of newmessages) {
            let message = newmessage.getMessages()[0]
            let senderEmail = parseEmailHeader(message)
            Logger.log(senderEmail)
          }
        }
        
        function parseEmailHeader(message) {
          var header = message.getFrom().trim();
        
          var extract = { name: "", email: "" };
          var emails = header.match(/[^@<\s]+@[^@\s>]+/g);
          if (emails) {
            extract.email = emails[0];
          }
          var names = header.split(/\s+/);
          if (names.length > 1) {
            names.pop();
            extract.name = names.join(" ").replace(/"/g, "");
          }
          return extract;
        }
        

        כרגע הוא עושה פשוט Logger.log, מה שאומר שהוא לא מחזיר שום ערך.

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

          @מוטי-אורן שינתי בקוד ל: return extract;

          ועדיין התשובה הוא מחזיר:
          [object Object]

          כמו כן, לא הצלחתי לשנות בפונקציה שיחזיר רק את השם, אשמח להכוונה.

          תודה

          חייםיודלביץח מוטי אורןמ 2 תגובות תגובה אחרונה
          0
          • חייםיודלביץח מנותק
            חייםיודלביץח מנותק
            חייםיודלביץ
            השיב לחייםיודלביץ ב נערך לאחרונה על ידי
            #16

            זה שאין פתרון זה בגלל שאני לא לא מבין כאן משהו בסיסי ,
            או שאין כאן למישהו תשובה מספקת? [מה שקשה לי להאמין עם האנשים המוכשרים מאד כאן]

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

            תודה

            yossizY OdedDvirO 2 תגובות תגובה אחרונה
            0
            • yossizY מחובר
              yossizY מחובר
              yossiz
              השיב לחייםיודלביץ ב נערך לאחרונה על ידי
              #17

              @חייםיודלביץ אמר בשאלה | איזה משתנה מחזיר את שם השולח בגוגל סקריפט?:

              רק רוצה לדעת האם הבעיה בי

              כן... 🙂 צריך שמישהו יהיה לו זמן/כח/חשק לעבור על מה שכתבת ולהבין איפה בדיוק הבעיה. אבל זה בהחלט משהו פתיר.

              📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

              תגובה 1 תגובה אחרונה
              5
              • OdedDvirO מנותק
                OdedDvirO מנותק
                OdedDvir
                השיב לחייםיודלביץ ב נערך לאחרונה על ידי
                #18

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

                function printAllSenderNames() {
                    GmailApp.getInboxThreads().forEach(function (t) {
                    t.getMessages().forEach(function (m) {
                      Logger.log(parseEmailHeader(m).name)
                    })
                  })
                }
                
                function parseEmailHeader(message) {
                  var header = message.getFrom().trim();
                 
                  var extract = { name: "", email: "" };
                  var emails = header.match(/[^@<\s]+@[^@\s>]+/g);
                  if (emails) {
                    extract.email = emails[0];
                  }
                  var names = header.split(/\s+/);
                  if (names.length > 1) {
                    names.pop();
                    extract.name = names.join(" ").replace(/"/g, "");
                  }
                  return extract;
                }
                
                תגובה 1 תגובה אחרונה
                2
                • מוטי אורןמ מנותק
                  מוטי אורןמ מנותק
                  מוטי אורן
                  השיב לחייםיודלביץ ב נערך לאחרונה על ידי
                  #19

                  @חייםיודלביץ כמו ש @OdedDvir כבר כתב, הפונקציה parseEmailHeader מחזירה אובייקט בעל שתי ערכים: name, email. כאשר name הוא השם של השולח, ו email הוא הכתובת מייל שלו.
                  הדוגמה שהראיתי לך למימוש למעלה, היא במסגרת ה Logger. אני משער שמה שאתה עשית זה לשלוח מייל שמכיל את הערך שהפונקציה הזאת מחזירה, מה שגרם לשגיאה המוכרת objectObject.
                  ובמילים פשוטות, אם אתה רוצה להציג את האובייקט הזה ב HTML כלשהו, תצטרך לקחת ממנו את הערכים שלו כמו ש @OdedDvir הראה בפוסט הקודם.

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

                    אני פשוט לא מסתדר, נסיתי המון ... אני לא מכיר את JS אני מכיר טוב את ה VBA ופה לא הולך לי

                    ובקוד שהביא @OdedDvir אני לא מצליח לטעון אותו למשתנה הוא רק מציג לי אותו כ Log

                    אשמח לעוד קצת הכוונה.

                    תודה

                    OdedDvirO תגובה 1 תגובה אחרונה
                    0
                    • OdedDvirO מנותק
                      OdedDvirO מנותק
                      OdedDvir
                      השיב לחייםיודלביץ ב נערך לאחרונה על ידי
                      #21

                      @חייםיודלביץ אמר בשאלה | איזה משתנה מחזיר את שם השולח בגוגל סקריפט?:

                      אני פשוט לא מסתדר, נסיתי המון ... אני לא מכיר את JS אני מכיר טוב את ה VBA ופה לא הולך לי

                      בוא נעשה סדר...

                      1. אם אתה מכיר את VBA, סימן שיש לך מושג כיצד מתנהג קוד. העקרון הבסיסי זהה גם כאן.
                      2. אם השמות מוצגים בקונסול, סימן שהשליפה שלהם מבוצעת כראוי על ידי הקוד.
                      3. אני מבין שאתה רוצה לעשות עם התוצאות משהו אחר, וכפי שכתבת:

                      אני לא מצליח לטעון אותו למשתנה הוא רק מציג לי אותו כ Log

                      בוא נראה, היכן בקוד שלי מבוצעת ההדפסה? בשורה 4:

                            Logger.log(parseEmailHeader(m).name)
                      

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

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

                      1. קריאה ל parseEmailHeader(m).
                        אני מעביר לפונקציה parseEmailHeader את האובייקט m שמכיל את ההודעה הנוכחית.
                        הפונקציה מחזירה אובייקט עם שני שדות (בשורה 12 היא יוצרת אותו, ובשורה 22 היא מחזירה אותו), שני השדות הם:
                        name - שאמור להכיל את שם המשתמש, ו- email שאמור להכיל את כתובת המייל שלו.

                      2. אח"כ אני מבודד מתוך האובייקט המוחזר רק את הערך של name (שבו אני מעוניין) על ידי אופרטור הנקודה . ולאחריו שם השדה, כך: name.

                      3. אני מדפיס את התוצאה המבוקשת על ידי קריאה ל: ()Logger.log.

                      אילו הייתי רוצה לפשט את הקוד יותר, הייתי כותב כך:

                      // שלב 1: קבלת אובייקט המכיל את שם וכתובת השולח מתוך כותרת ההודעה
                      const messageHeaderDetails = parseEmailHeader(m);
                      // שלב 2: שליפת שם המשתמש מתוך האובייקט המוחזר
                      const senderName = messageHeaderDetails.name;
                      // שלב 3: הדפסת שם המשתמש ביומן
                      Logger.log(senderName);
                      

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

                      למשל, לאחסן אותו במערך:

                      myArray.push(senderName)
                      

                      או בקיצור:

                      myArray.push(parseEmailHeader(m).name)
                      
                      חייםיודלביץח תגובה 1 תגובה אחרונה
                      6
                      • חייםיודלביץח מנותק
                        חייםיודלביץח מנותק
                        חייםיודלביץ
                        השיב לOdedDvir ב נערך לאחרונה על ידי
                        #22

                        @odeddvir תודה רבה על ההסבר הברור ובסבלנות! זה מה שהיה חסר לי, להבין איך אני עושה את זה ב GS

                        תגובה 1 תגובה אחרונה
                        2
                        • dovidD dovid העביר נושא זה מ-תכנות ב-
                        • yossizY yossiz התייחס לנושא זה ב
                        • מלאכת מחשבתמ מלאכת מחשבת התייחס לנושא זה ב
                        • צדיק תמיםצ צדיק תמים התייחס לנושא זה ב

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

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

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