בעיה | הדפסה אוטומטית מהמייל
-
@צדיק-תמים
אני לא יכול לאמת את המייל -
@שמח-לשמוע למה?
מייל האימות מכיל קישור אבל גם קוד אימות שאפשר להשתמש בו@צדיק-תמים זה מייל של המדפסת.
עם שירות printnode. אין לי גישה למייל.
שולחים למייל של המדפסת ומדפיס קבצים מצורפים (pdf) -
@צדיק-תמים זה מייל של המדפסת.
עם שירות printnode. אין לי גישה למייל.
שולחים למייל של המדפסת ומדפיס קבצים מצורפים (pdf) -
@שמח-לשמוע אוקיי, רק קח בחשבון שגוגל סקריפט מוגבל ל100 מיילים ביום
לגופו של קוד, הסקריפט נראה תקין, תנסה להריץ אותו ידנית ולבדוק האם יש שגיאות (נ.ב. מקווה שלא שכחת להוסיף טריגר)
אני יודע שזה תקין
המדפסת פשוט לא מדפיס -
כתבתי סקריפט ששולח לפי תווית למייל של המדפסת
function redirect() { let printerEmail = '71------6@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 }) m.removeLabel(label) m.addLabel(labe2) }) } }
הבעיה היא שזה לא נדפס
כשאני שולח מהמייל ישירות זה מדפיס
דרך הסקריפט, לא?
למישהו יש רעיון?אולי @מתכנת-חובב יכול לעזור בנידון?
-
אולי @מתכנת-חובב יכול לעזור בנידון?
בהחלט מעניין
בכל אופן אני אישית הסתדרתי
ב printnode יש אפשרות להתחבר עם api.
בניתי סקריפט שמתחבר -
בהחלט מעניין
בכל אופן אני אישית הסתדרתי
ב printnode יש אפשרות להתחבר עם api.
בניתי סקריפט שמתחברבינתיים יש לי בעיה שהוא מדפיס את המייל הראשון של השרשור
לדוגמא: אני מקבל את הפקסים למייל וזה בא בשרשור. וזה מדפיס לי כל הזמן את ההודעה הראשונה של השרשור.
מישהו יכול לעזור לי? -
בינתיים יש לי בעיה שהוא מדפיס את המייל הראשון של השרשור
לדוגמא: אני מקבל את הפקסים למייל וזה בא בשרשור. וזה מדפיס לי כל הזמן את ההודעה הראשונה של השרשור.
מישהו יכול לעזור לי? -
@צדיק-תמים
זה פתרון? -
@צדיק-תמים
זה פתרון?@שמח-לשמוע לא העילית את הסקריפט החדש
אבל במה שהעילית למעלה
אתה עושה לולאה על התרדים (שרשורים) של ההודעות אבל ניגש כל פעם רק להודעה הראשונה: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();