בעיה | הדפסה אוטומטית מהמייל
-
בינתיים יש לי בעיה שהוא מדפיס את המייל הראשון של השרשור
לדוגמא: אני מקבל את הפקסים למייל וזה בא בשרשור. וזה מדפיס לי כל הזמן את ההודעה הראשונה של השרשור.
מישהו יכול לעזור לי? -
@צדיק-תמים
זה פתרון? -
@צדיק-תמים
זה פתרון?@שמח-לשמוע לא העילית את הסקריפט החדש
אבל במה שהעילית למעלה
אתה עושה לולאה על התרדים (שרשורים) של ההודעות אבל ניגש כל פעם רק להודעה הראשונה:let messages = label.getThreads() if (messages.length > 0) { messages.forEach(function (m) { let message = m.getMessages()[0]
messages זה מערך של ת'רדים
אתה עושה לולאה על הת'רדים
אבל בכל אחד מהם (m
) אתה ניגש רק להודעה הראשונה
אתה אמור לעשות לולאה נוספת בתוך הת'רד על ההודעות שבו -
@שמח-לשמוע לא העילית את הסקריפט החדש
אבל במה שהעילית למעלה
אתה עושה לולאה על התרדים (שרשורים) של ההודעות אבל ניגש כל פעם רק להודעה הראשונה:let messages = label.getThreads() if (messages.length > 0) { messages.forEach(function (m) { let message = m.getMessages()[0]
messages זה מערך של ת'רדים
אתה עושה לולאה על הת'רדים
אבל בכל אחד מהם (m
) אתה ניגש רק להודעה הראשונה
אתה אמור לעשות לולאה נוספת בתוך הת'רד על ההודעות שבו@צדיק-תמים
איך אני עושה? -
אולי @מתכנת-חובב יכול לעזור בנידון?
@ephraum-tzvi אמר בבעיה | הדפסה אוטומטית מהמייל:
אולי @מתכנת-חובב יכול לעזור בנידון?
אני טוב בסקריפטים בשפות אחרות, לא בזה.
-
@צדיק-תמים
איך אני עושה? -
@צדיק-תמים
איך אני עושה?@שמח-לשמוע הלולאה עצמה זה לא הבעיה
הבעיה שצריך לעשות שלא ישלח כל פעם את כל ההודעות בתרד... אפשר לעשות את זה על ידי תנאי זמן - מה שישן יותר מדקה לא יישלח, ואת הטריגר עושים פעם בדקה, וכך יודעים שאם זה ישן יותר זה כבר טופל...
אני עשיתי את זה בצורה שונה - ההודעה תישלח רק אם היא עוד לא נקראה, ולאחר השליחה הסקריפט מסמן אותה כנקראה.function redirect() { let printerEmail = '71------6@lon1.printnode.com'; let label = GmailApp.getUserLabelByName('להדפסה'); let threads = label.getThreads(); if (threads.length) { for (const thread of threads) { let messages = thread.getMessages(); for (const message of messages) { if (message.isUnread()) { let subject = message.getSubject(); let attachments = message.getAttachments(); MailApp.sendEmail(printerEmail, subject, '', { attachments: attachments, }); message.markRead(); } } } } }
וכמובן תוסיף במייל מסנן שיוסיף את התגית למיילים הרצויים
נ.ב. הסרתי את הbody כיוון שזה מיותר - אמרת שnodeprint מדפיס רק קבצים מצורפים... (אחרת היה אפשר להשתמש בההעברה המובנית של המייל) -
@שמח-לשמוע הלולאה עצמה זה לא הבעיה
הבעיה שצריך לעשות שלא ישלח כל פעם את כל ההודעות בתרד... אפשר לעשות את זה על ידי תנאי זמן - מה שישן יותר מדקה לא יישלח, ואת הטריגר עושים פעם בדקה, וכך יודעים שאם זה ישן יותר זה כבר טופל...
אני עשיתי את זה בצורה שונה - ההודעה תישלח רק אם היא עוד לא נקראה, ולאחר השליחה הסקריפט מסמן אותה כנקראה.function redirect() { let printerEmail = '71------6@lon1.printnode.com'; let label = GmailApp.getUserLabelByName('להדפסה'); let threads = label.getThreads(); if (threads.length) { for (const thread of threads) { let messages = thread.getMessages(); for (const message of messages) { if (message.isUnread()) { let subject = message.getSubject(); let attachments = message.getAttachments(); MailApp.sendEmail(printerEmail, subject, '', { attachments: attachments, }); message.markRead(); } } } } }
וכמובן תוסיף במייל מסנן שיוסיף את התגית למיילים הרצויים
נ.ב. הסרתי את הbody כיוון שזה מיותר - אמרת שnodeprint מדפיס רק קבצים מצורפים... (אחרת היה אפשר להשתמש בההעברה המובנית של המייל)@צדיק-תמים אמר בבעיה | הדפסה אוטומטית מהמייל:
threads
זה חלק מהקוד שבניתי
איך יוצרים בתוך זה שיחפש רק אם ההודעה נקראה?function redirect() { let printerEmail = 'הדפסה למכונת צילום <7----76@lon1.printnode.com>' let label = GmailApp.getUserLabelByName('הדפסה') let labe2 = GmailApp.getUserLabelByName('הדפסה בוצע') let messages = label.getThreads() if (messages.length > 0) { messages.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 // }) for (var k = 0; k < attachments.length; k++) { Logger.log('Message "%s" contains the attachment "%s" (%s bytes)', subject, attachments[k].getName(), attachments[k].getSize()); // Logger.log(attachments[k].getAs('application/pdf'))
-
@צדיק-תמים אמר בבעיה | הדפסה אוטומטית מהמייל:
threads
זה חלק מהקוד שבניתי
איך יוצרים בתוך זה שיחפש רק אם ההודעה נקראה?function redirect() { let printerEmail = 'הדפסה למכונת צילום <7----76@lon1.printnode.com>' let label = GmailApp.getUserLabelByName('הדפסה') let labe2 = GmailApp.getUserLabelByName('הדפסה בוצע') let messages = label.getThreads() if (messages.length > 0) { messages.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 // }) for (var k = 0; k < attachments.length; k++) { Logger.log('Message "%s" contains the attachment "%s" (%s bytes)', subject, attachments[k].getName(), attachments[k].getSize()); // Logger.log(attachments[k].getAs('application/pdf'))
-
@שמח-לשמוע שוב, בקוד הזה אתה ניגש רק להודעה הראשונה בכל ת'רד
אתה יכול לקחת את הקוד שהבאתיורק להחליף את הלוגיקה של שליחת המייל בכל דבר אחר שתרצה (לדוגמה קריאה לAPI של שירות ההדפסה)
-
@שמח-לשמוע עזרה במשהו ספציפי זה דבר אחד, ו"תעשה בשבילי את העבודה" זה עניין אחר.
אם אתה מעוניין שאני יבנה את זה עבורך בתשלום, אתה יכול ליצור קשר כאן.
ואם לא, אני מקווה בשבילך שתמצא מישהו אחר שיתנדב לעשות את זה...
בהצלחהאהה... זה קצת מסובך
הבנתי
בניתי כבר הכל
רק חסר לי בדיקה לפי הודעות שנקראו.בהצלחה לך ותודה על כל העזרה
-
אהה... זה קצת מסובך
הבנתי
בניתי כבר הכל
רק חסר לי בדיקה לפי הודעות שנקראו.בהצלחה לך ותודה על כל העזרה
@שמח-לשמוע אמר בבעיה | הדפסה אוטומטית מהמייל:
רק חסר לי בדיקה לפי הודעות שנקראו.
בקוד שכתבתי בפוסט הזה
הבדיקה היא בשורה 9if (message.isUnread()) {
והסימון כנקרא בשורה 15
message.markRead();