בקשה ! עזרה בכתיבת קוד לג'ימיל להעברת הודעות מייל
-
@גבאי תנאי "לא" בפילטרים של ג'ימייל עושים עם סימן מינוס (-) כלומר זה ככה בחיפוש:
from:(-email@gmail.com)
זה מביא את כל המיילים שלא מהכתובת הזו
(אז כנראה בממשק של בניית הפילטרים דרך ההגדרות של ג'ימייל פשוט מכניסים בשורה "מאת" - ככה:(email@gmail.com-)
אני משער)אז רק תסביר לי מה הולך להיות ההרכב של ההודעות כדי שאני יבין איך אמור להיראות הסקריפט.
הולך להיות כך שכל הודעה (לא מהכתובת של HP הנ"ל) תקבל מייד תווית "להעברה" אם היא לא נקראה (זאת על ידי מסנן, לא הסקריפט)
ואז הסקריפט יטפל בכל ההודעות עם תווית "להעברה" - יישלח מהתוכן שלהן הודעה למדפסת + יימחק את התווית "להעברה" וייקצה לה תווית "בטיפול"
כאשר מגיעה הודעה מהמדפסת והיא לא נקראה עדיין - הסקריפט יישלח את התוכן של הההודעה מהמדפסת, כתשובה לכל ההודעות שיש להן תווית "בטיפול", יימחק מהן את התווית "בטיפול" וייקצה תווית "בוצע"
ואת ההודעה של המדפסת הוא ייסמן כנקרא?
משהו כזה? -
משהו כזה:
function redirect() { let printerEmail = 'hppppppp@mail.com' // מייל של המדפסת let forwardlabel = GmailApp.getUserLabelByName('forward') // שם של תווית - העברה למדפסת let workinglabel = GmailApp.getUserLabelByName('working') // שם של תווית - עובד על זה let donelabel = GmailApp.getUserLabelByName('done') // שם של תווית - בוצע let forwardmessages = forwardlabel.getThreads() if (forwardmessages.length > 0) { forwardmessages.forEach(function (m) { let message = m.getMessages()[0] let subject = message.getSubject() let body = message.getBody() let attachments = message.getAttachments() MailApp.sendEmail(printerEmail, subject, '', { htmlBody: body, attachments: attachments }) m.removeLabel(forwardlabel) // מסיר את תווית העברה m.addLabel(workinglabel) // מוסיף תווית עובד על זה }) } let printermessages = GmailApp.search(`from:${printerEmail} is:unread`) if (printermessages.length > 0) { printermessages.forEach(function (m) { let message = m.getMessages() let lastmessage = message[message.length -1] let body = lastmessage.getBody() let attachments = lastmessage.getAttachments() let workingthreads = workinglabel.getThreads() if (workingthreads.length > 0) { workingthreads.forEach(function (m) { m.reply(body, { attachments: attachments }) m.removeLabel(workinglabel) m.addLabel(donelabel) }) } m.markRead() }) } }
כמו שכתבת - זה יכול גם בטעות להחזיר את אותה תשובת מדפסת לכמה מיילים
אפשרי לעשות את זה כך שישיב על ראשון-ראשון - אולי לא במדויק אבל לפחות שישיב לכל הודעה בהודעה אחת.
אין לי כוח עכשיו (אולי @מוטי-אורן ירצה?) -
@גבאי אתה מתכוין השלב של קבלת כל ההודעות מהמדפסת - שעוד לא טופלו - לסקריפט
זה קורה בשורה 21
אין עניין בעבודה מול תווית. מקבלים אותם בצורה של חיפוש בגימייל על פי הכלל של מאת:המייל של המדפסת, ורק הודעות שלא נקראו
לאחר הטיפול (כלומר השליחה של תוכן ההודעה כתשובה להודעות המקוריות) ההודעה מהמדפסת מסומנת כנקראה כך שלא תטופל בריצה הבאה של הסקריפט -
@chv לא נעים לי כבר להטריד
אבל משהו לא עובד לי
ההודעה מקבלת תווית "להדפסה" נשלחת למייל של המדפסת ומקבלת במקום זה תווית "עובד על זה" ומשם ואילך הוא חוזר ושולח את ההודעה של המדפסת שוב ושוב למדפסת במקום להחזיר לשולח. וגם לא מקבל תווית בוצע ולא מסמן אותה כ"נקרא". -
@גבאי צודק צודק.. טעות שלי בקוד (הטעות היא בשימוש ב
m
גם בפונקציה הפנימית שבשורה 30, היא מכילה בעצם את ההודעה של המדפסת. במקום הודעה מתוך המערך של הודעות עם תווית 'עובד על זה')
הקוד הזה אמור לעבוד (ואמור לכאורה לעבוד בצורה של 'על ראשון-ראשון')function redirect() { let printerEmail = 'hppppppp@mail.com' // מייל של המדפסת let forwardlabel = GmailApp.getUserLabelByName('forward') // שם של תווית - העברה למדפסת let workinglabel = GmailApp.getUserLabelByName('working') // שם של תווית - עובד על זה let donelabel = GmailApp.getUserLabelByName('done') // שם של תווית - בוצע let forwardmessages = forwardlabel.getThreads() if (forwardmessages.length > 0) { forwardmessages.forEach(function (m) { let message = m.getMessages()[0] let subject = message.getSubject() let body = message.getBody() let attachments = message.getAttachments() MailApp.sendEmail(printerEmail, subject, '', { htmlBody: body, attachments: attachments }) m.removeLabel(forwardlabel) // מסיר את תווית העברה m.addLabel(workinglabel) // מוסיף תווית עובד על זה }) } let printermessages = GmailApp.search(`from:${printerEmail} is:unread`) if (printermessages.length > 0) { printermessages.forEach(function (w) { let message = w.getMessages() let lastmessage = message[message.length - 1] let body = lastmessage.getBody() let attachments = lastmessage.getAttachments() let lastworkingthread = workinglabel.getThreads()[0] lastworkingthread.reply(body, { attachments: attachments }) lastworkingthread.removeLabel(workinglabel) lastworkingthread.addLabel(donelabel) w.markRead() }) } }
-
@chv עדין לא עובד (הפעם שולח שוב את ההודעה להדפסה, מקודם זה היה שולח למדפסת חזרה את ההודעה שהיא שלחה,) כל השאר אותו דבר
(אם כבר אתה מטפל שוב בקוד..........
יש לי אתגר בשבילך
אולי אפשר לשדרג את הקוד שאם אני יכתוב בשורת הנושא מספר הוא ישלח להדפסה כמה פעמים כפי המספר שמופיע (הרבה פעמים אני צריך להדפיס כמה פעמים ובשביל זה אני שולח את ההודעה שוב ושוב) ) -
@אהרן-שובקס אמר בבקשה ! עזרה בכתיבת קוד לג'ימיל להעברת הודעות מייל:
יש אפשרות לשלוח מייל ולשנות את המייל השולח למייל אחר
לא, אפשר לשלוח רק מהכתובת שלך, כמובן. או מכתובות שהגדרת שאפשר לשלוח דרכם ("שלח כ-")
אפשר לתת לכל מייל תווית עם המייל של הבן אדם השולח
לא זה ולא האפשרות הקודמת יעזרו.
כי כמו שהוא כתב - המיילים מהמדפסת לא מגיעים כתשובה אלא כמייל נפרד ולא מכילים שום אינפורמציה לגבי איזו הודעה הם נשלחו@גבאי מעניין אותי אם הקוד שתיקנתי עובד?
-