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

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

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

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

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

    שלום וברכה

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

    כרגע אני משתמש במשתנה

    senderEmail
    

    והוא מחזיר לי גם את שם השולח וגם את הכתובת

    תודה

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

      @חייםיודלביץ לכאורה אתה יכול לבצע קריאה של המאפיין Sender מתוך כותרת ה RFC 2822 של ההודעה. על ידי getHeader, כך:

      yourMessage.getHeader("Sender")
      
      חייםיודלביץח yossizY 2 תגובות תגובה אחרונה
      4
      • חייםיודלביץח מנותק
        חייםיודלביץח מנותק
        חייםיודלביץ
        השיב לOdedDvir ב נערך לאחרונה על ידי חייםיודלביץ
        #3

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

        ("Sender")

        עכשיו הוא לא מחזיר כלום לא שם ולא כתובת השולח, כתבתי ככה.

        let senderEmail = message.getHeader ("Sender")
        
        מוטי אורןמ תגובה 1 תגובה אחרונה
        1
        • מוטי אורןמ מנותק
          מוטי אורןמ מנותק
          מוטי אורן
          השיב לחייםיודלביץ ב נערך לאחרונה על ידי
          #4

          @חייםיודלביץ ייתכן שה-RFC Header הספציפי של Sender לא נשלח בכל הודעה. כלומר, בחלק מההודעות אתה כן תקבל את השם של השולח, אבל בהרבה הודעות לא תקבל כלום.

          @OdedDvir אני יסביר לך איך הגעתי למסקנה הזאת. זה התחיל בכך שהסתקרנתי מהנושא של ה-RFC Headers שהזכרת פה, ומכיון שאף פעם לא שמעתי על המושג הזה החלטתי לבדוק במה מדובר 🙂.. המסקנה שלי הייתה שמדובר בתקן מסויים להודעות מייל, שמכיל בתוכו הגדרה של Headers ותוכן (בתקווה שלא מדובר במסקנה שגויה שלי).

          לאחר מכן החלטתי להריץ ב-GS לולאה מקוננת על כל ההודעות במייל, ולקבל את ה-Header שהזכרת ('Sender'), ככה:

          function logSenderHeader() {
            GmailApp.getInboxThreads().forEach(function (t) {
              t.getMessages().forEach(function (m) {
                Logger.log(m.getHeader('Sender'))
              })
            })
          }
          

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

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

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

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

              @odeddvir כלומר אין אפשרות לקבל רק את שם השולח?

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

                @חייםיודלביץ אני אענה בשאלה תיאורטית.
                אם אני פותח חשבון גוגל ולא מכניס פרטי שם שולח, רק את המייל שלי, האם יש לך דרך לגלות מה שמי?
                (אני מקווה שלא...)

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

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

                  @חייםיודלביץ אני אענה בשאלה תיאורטית.
                  אם אני פותח חשבון גוגל ולא מכניס פרטי שם שולח, רק את המייל שלי, האם יש לך דרך לגלות מה שמי?
                  (אני מקווה שלא...)

                  מה שאני ניסיתי היה לשולח המייל, שם, ובכל אופן הוא לא הציג אותו.

                  אז במה זה תלוי?

                  או שפשוט אני צריך לרשום תנאי שיבדוק שאם השם ריק אז שיציג את כתובת המייל

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

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

                    או שפשוט אני צריך לרשום תנאי שיבדוק שאם השם ריק אז שיציג את כתובת המייל

                    פתרון הגיוני ופשוט...

                    Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                    טיפים

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

                      @צדיק-תמים צודק

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

                      תגובה 1 תגובה אחרונה
                      0
                      • yossizY מנותק
                        yossizY מנותק
                        yossiz
                        השיב לOdedDvir ב נערך לאחרונה על ידי yossiz
                        #11

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

                        לכאורה אתה יכול לבצע קריאה של המאפיין Sender מתוך כותרת ה RFC 2822 של ההודעה

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

                        ייתכן שה-RFC Header הספציפי של Sender לא נשלח בכל הודעה

                        אני לא כל כך מבין למה @OdedDvir החליט שהכותרת sender מתאימה לפה. לפי מה שאני רואה ב-RFC 2822, כותרת זו מיועדת למצבים שבו ה"מחבר" של המייל שהוא אמור להופיע בכותרת from, לא זהה לשולח המייל. אז הכותרת sender מזהה את השולח. במייל רגיל כותרת זו לא אמורה להופיע כלל. בדקתי עם הסקריפט של @מוטי-אורן (עם שינויים קלים) ואני רואה שבד"כ כותרת זו מופיעה באמת כאשר ה-from וה-sender שונים.
                        בכל מקרה כותרת זו היא באותה תבנית כמו from כך שזה לא יעזור פה בכל מקרה.
                        בנוגע לבעיה של פותח האשכול: איך להוציא את שם השולח מתוך הכותרת from במידה והיא קיימת -
                        פירסור כתובת בפורמט rfc2822 היא לא מלאכה קלה... יש כמה דרכים לכתוב כתובות ויש כל מיני מקרי קצה.
                        יש ספרייות מיועדות לכך. למשל זה. עיין בקוד... (לכאורה אפשר פשוט להעתיק את הקוד ל-app script)
                        ייתכן שאפשר לכתוב קוד פשוט שמכסה את מרבית המקרים.

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

                        OdedDvirO תגובה 1 תגובה אחרונה
                        6
                        • 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

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

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

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