בקשה: גוגל סקריפט להעברת מיילים לפי תווית
-
https://tchumim.com/topic/10610/סקריפט-גוגל-להגדרת-כתובת-להעברה
שלום וברכה אני מעונין בקוד שיעבור על תיבת המייל ויראה אם יש הודעות עם תווית מסויימת ואם כן ישלח אותם כולל הכל: שם שולח, תוכן ההודעה, נושא, וקבצים מצורפים
בשמי למייל השני
אשמח לכל התחלה של קוד כזה , תודה רבה -
@מעמד-מוצלח כתב בקוד גוגל סקריפט להעברת מיילים לפי תווית:
https://tchumim.com/topic/10610/סקריפט-גוגל-להגדרת-כתובת-להעברה
שלום וברכה אני מעונין בקוד שיעבור על תיבת המייל ויראה אם יש הודעות עם תווית מסויימת ואם כן ישלח אותם כולל הכל: שם שולח, תוכן ההודעה, נושא, וקבצים מצורפים
בשמי למייל השני
אשמח לכל התחלה של קוד כזה , תודה רבהכתבת בקטגוריית תכנות, לא בקטגוריית דרושים,
אני מניח שהתחלת לתכנת את זה?
איזה שפה חשבת לעשות את זה?
מה התחלת לעשות?
מה יש לך?
איפה נתקעת? -
אני רוצה בגוגל סקריפט , לא התחלתי
-
@מעמד-מוצלח מסכים בכל מילה עם @צבי-ש, אבל יש לי משהו שהכנתי פעם לחבר, זה קצת יותר מ'כל התחלה של קוד כזה'
אני זוכר שהיה לו תלונה בקשר לשרשורים, מעיון קליל בקוד נראה שזה בגלל שכל הודעה נשלחת בנפרד, שים לב שההודעות נשארות מסומנות בתווית גם לאחר השליחה שלהם למייל השני.
// Forwards The Emails By abaye const label = 'move'; const email = 'email@gmail.com'; function sendEmails() { let threads = GmailApp.search(`label:${label}`); threads.forEach(thread => { let messages = thread.getMessages(); messages.forEach(message => { let senderName = message.getFrom(); let subject = message.getSubject(); let body = message.getPlainBody(); let attachments = message.getAttachments(); let emailContent = `שולח ההודעה: ${senderName}\nהנושא: ${subject}\n\nתוכן ההודעה:\n${body}`; GmailApp.sendEmail( email, `Fwd: ${subject}`, emailContent, { attachments: attachments, name: "הועבר מהמייל של מוישי" } ); }); }); }
-
וקצת שיעורי בית, שיהיה לך גם משהו לעשות...
לאחרונה שמתי לב שבהודעות מהסוג הזה (ולא, אל תשאלו מה זה הסוג הזה, עדיין לא ירדתי לחקר הדבר, אבל בהודעות שנשלחות באמצעות הספריות של גוגל סקריפט) ההודעות בעברית
מגיעותמוצגות כltr, מה שמשבש את התצוגה ומציק בעין, אפשר לסדר את זה בקלות ע"י הטעמעה של תוכן ההודעה כhtml, משהו כזה:let textHtml = `<div dir='rtl'>"${content}"</div>`;
אתה צריך להכניס את זה כפרמטר בעת שליחת ההודעה
-
@אביי כתב בקוד גוגל סקריפט להעברת מיילים לפי תווית:
אני זוכר שהיה לו תלונה בקשר לשרשורים, מעיון קליל בקוד נראה שזה בגלל שכל הודעה נשלחת בנפרד, שים לב שההודעות נשארות מסומנות בתווית גם לאחר השליחה שלהם למייל השני.
אפשר לשמור את מזהי ההודעות שכבר נשלחו בשירות הקאש המובנה של גוגל סקריפט, וככה לפלטר.
const cache = CacheService.getScriptCache(); const messages = thread.getMessages(); const newMessages = messages.filter(massage => { const msgId = massage.getId(); const isAlreadySent = cache.get(msgId); return !isAlreadySent; });
אפשר לשפר את הביצועים על ידי שימוש ב
getAll
-
-
למעשה זה הקוד שיצא לי בסוף
כמה דברים שהיו חשובים לי ,א.ששם השולח יגיע באותו שם , הגם שזה נשלח ממני.
ב.שלא יהיה את סימן של הועברה (Fwd:)
ג. שהנושא יהיה אותו דבר בדיוק ללא סימנים מיותרים
ד. ניתן לשלוח לכמה כתובות במקביל
יש לי גם קוד שמעתיק את שם השולח כמו שהוא מבלי שנצטרך להגדיר מראש,
הבעיה שברגע שהקוד מעביר, הוא מעביר ישירות לספאם עם סימן של הודעה חשודה ,
ולכן אני נאלץ לשתמש עם הקוד הזה בו אני מכניס מראש את שם השולח
אם יש למישהו דרך לשנות את הקוד כך שזה לא יגיע לספאם
הגם שהשם נלקח אוטומטית משם השולח אודה לו מראש
תודות ל @מנצפכ היקר על כתיבת הקוד.function cleanAndForwardMessages(senderEmail) { var sourceLabelName = "vad"; var recipients = ["76@gmail.com", "60@gmail.com", "raeli@gmail.com"]; var threads = GmailApp.getUserLabelByName(sourceLabelName).getThreads(); for (var i = 0; i < threads.length; i++) { var messages = threads[i].getMessages(); for (var j = 0; j < messages.length; j++) { var message = messages[j]; var originalSender = message.getFrom(); var subject = message.getSubject(); subject = subject.replace(/^Fwd:\s*/i, ""); var customSenderName = "בע״מ"; // שם השולח for (var k = 0; k < recipients.length; k++) { var options = { to: recipients[k], subject: subject, body: "Original sender: " + originalSender + "\n\n" + message.getBody(), name: customSenderName, from: senderEmail, }; message.forward(recipients[k], options); } threads[i].removeLabel(GmailApp.getUserLabelByName(sourceLabelName)); } } }