חיתוך מענה במייל ב mailgun
-
לקח לי המון המון זמן למצוא לזה פיתרון
אתה כותב בPHP? יש לי פונקציה מוכנה.function traitBody($body, $nolinks = true) { $body = html_entity_decode($body); $body = quoted_printable_decode($body); $no_quote = cutFrom($body, '<div class="gmail_quote"'); $body = strip_tags($no_quote) ? $no_quote : $body; $no_signature = cutFrom($body, 'class="gmail_signature"'); $body = strip_tags($no_signature) ? $no_signature : $body; $no_default = cutFrom($body, '<(?:span|div) class="gmail_default"'); $body = strip_tags($no_default) ? $no_default : $body; $body = cutFrom($body, '-- <br />'); $body = cutFrom($body, '______________________________________'); $body = cutFrom($body, '<div id="composer_signature"'); $body = cutFrom($body, '<div id="mt-signature"'); $body = cutFrom($body, '<div class="gmail_extra"'); $body = cutFrom($body, '<div class="gmail_chip'); $body = cutFrom($body, '<!-- Email Footer : BEGIN -->'); $body = cutFrom($body, 'Content-Type: application'); $body = cutFrom($body, "Message d'origine"); $body = cutFrom($body, "This is a multipart message"); $body = cutFrom($body, "From:"); $body = cutFrom($body, "Encoding: quoted-printable", true); $body = cutFrom($body, "Content-transfer-encoding:8bit", true); $body = cutFrom($body, "Content-Transfer-Encoding: 8bit", true); $body = cutFrom($body, "נשלח באמצעות מערכת"); $body = cutFrom($body, "Sent with"); $body = pregReplace($body, '<img.*>', ' '); $body = pregReplace($body, '<br/?>', ' '); $body = pregReplace($body, '<div', ' <div'); $body = pregReplace($body, '<span', ' <span'); $body = pregReplace($body, '\r|\n', ' '); if ($nolinks) { $body = pregReplace($body, '<a [^>]>http.*</a>', ' link ', 'U'); $body = pregReplace($body, '>[^<]*@[^>]*<', ' mail '); $body = pregReplace($body, '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]+', ' mail '); } $body = pregReplace($body, '<style.*/style>'); $body = pregReplace($body, '<script.*/script>'); $body = strip_tags($body); $body = htmlspecialchars_decode($body, ENT_QUOTES); $body = pregReplace($body, '<|>'); if ($nolinks) { $body = pregReplace($body, '((\w+:\/\/\S+)|(\w+[\.:]\w+\S+))[^\s,\.]', ' link ', ''); } return $body; } function pregExtract($string, $pattern) { return preg_match('#' . str_replace('~', '(.*)', $pattern) . '#is', $string, $match) ? $match[1] : ''; } function pregReplace($string, $pattern, $subject = '', $options = 'U') { if (is_array($pattern)) $pattern = implode('|', $pattern); $pattern = '#' . $pattern . '#is' . $options; return preg_replace($pattern, $subject, $string); } function cutFrom($from, $string, $end = false) { $pos = strpos($from, $string); if ($end) $return = $pos ? substr($from, $pos + strlen($string)) : $from; else $return = $pos ? substr($from, 0, $pos) : $from; return $return; }מקווה שיעזור לך
-
@מנצפך @שואף אני לא מבין אתכם. שירות של חיתוך ציטוטים מובנה ב-mailgun!
הנה דוגמה לאובייקט שאני מקבל מהם:
{ "recipient": "XXX@XXX", "sender": "XXX@XXX", "subject": "Re:", "from": "XXX@XXX", ... "To": "XXX@XXX", "Content-Type": "multipart/alternative; boundary=\"00000000000061c4fd059b386ec6\"", ... "body-plain": "hmm...\r\n\r\nOn Fri, 3 Jan 2020 at 10:51, XXX@XXX wrote:\r\n\r\n>testy test\r\n", "body-html": "<div dir=\"ltr\"><div>hmm...</div></div><br><div class=\"gmail_quote\"><div dir=\"ltr\" class=\"gmail_attr\">On Fri, 3 Jan 2020 at 10:51, XXX@XXX wrote:<br></div><blockquote class=\"gmail_quote\" style=\"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex\">testy test</blockquote></div>\r\n", "stripped-text": "hmm...", "stripped-html": "<html><head></head><body><div dir=\"ltr\"><div>hmm...</div></div><br></body></html>" }שימו לב, המאפיינים
stripped-textו-stripped-htmlמכילים את המענה בלי הציטוט של המייל הקודם. ב-body-plainו-body-htmlמקבלים את הכל בכל כולל הציטוט.ועיין עוד:
-
@מנצפך @שואף אני לא מבין אתכם. שירות של חיתוך ציטוטים מובנה ב-mailgun!
הנה דוגמה לאובייקט שאני מקבל מהם:
{ "recipient": "XXX@XXX", "sender": "XXX@XXX", "subject": "Re:", "from": "XXX@XXX", ... "To": "XXX@XXX", "Content-Type": "multipart/alternative; boundary=\"00000000000061c4fd059b386ec6\"", ... "body-plain": "hmm...\r\n\r\nOn Fri, 3 Jan 2020 at 10:51, XXX@XXX wrote:\r\n\r\n>testy test\r\n", "body-html": "<div dir=\"ltr\"><div>hmm...</div></div><br><div class=\"gmail_quote\"><div dir=\"ltr\" class=\"gmail_attr\">On Fri, 3 Jan 2020 at 10:51, XXX@XXX wrote:<br></div><blockquote class=\"gmail_quote\" style=\"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex\">testy test</blockquote></div>\r\n", "stripped-text": "hmm...", "stripped-html": "<html><head></head><body><div dir=\"ltr\"><div>hmm...</div></div><br></body></html>" }שימו לב, המאפיינים
stripped-textו-stripped-htmlמכילים את המענה בלי הציטוט של המייל הקודם. ב-body-plainו-body-htmlמקבלים את הכל בכל כולל הציטוט.ועיין עוד:
-
@yossiz
מוזר שלא שמתי לב לזה.
בכל אופן מה שזה עושה, זה רק לחתוך שורות שמתחילות עם הסימון ">"עדיין הוא מוסיף למייל שורה "בתאריך..." (אולי זה הגדרה במייל שלי?)
-
@yossiz
אכן תלוי בשפה.
אז כנראה שכל מה שהוא עושה זה להוריד את השורה האחרונה אם היא מתחילה ב
on
אותו דבר אפשר לעשות שאם היא מתחילה ב"בתאריך"
כמובן שאפשר להוסיף עוד בדיקות בשביל לא לחתוך שורות חשובות.
(לדוגמה, השורה מכילה סימן @, השורה מסתיימת בנקודותיים. ועוד.)@מנצפך קוד המקור הוא פה: https://github.com/mailgun/talon/blob/d9ed7cc6d10c42894536aeb34073ff3fd036de2c/talon/quotations.py#L27-L94
ואין תמיכה בעברית. אפשר לפתוח issue אבל אין הרבה פעילות... לדוגמה https://github.com/mailgun/talon/issues/157 פתוח כבר שנתיים.
עוד יותר יהיה טוב לפתוח pull request ובמקביל לטרטר את התמיכה... -
@yossiz שאפו!
השאלה היא האם יספיק לעשות את החלוקה לפי איך שכתבתי קודם, או שיש עוד פרמטרים שלא הבאתי בחשבון.
כי אין לי את היכולת לקרוא שם את כל הקוד.
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות