חיתוך מענה במייל ב 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
מקבלים את הכל בכל כולל הציטוט.ועיין עוד:
-
@yossiz
אכן תלוי בשפה.
אז כנראה שכל מה שהוא עושה זה להוריד את השורה האחרונה אם היא מתחילה ב
on
אותו דבר אפשר לעשות שאם היא מתחילה ב"בתאריך"
כמובן שאפשר להוסיף עוד בדיקות בשביל לא לחתוך שורות חשובות.
(לדוגמה, השורה מכילה סימן @, השורה מסתיימת בנקודותיים. ועוד.) -
@מנצפך קוד המקור הוא פה: https://github.com/mailgun/talon/blob/d9ed7cc6d10c42894536aeb34073ff3fd036de2c/talon/quotations.py#L27-L94
ואין תמיכה בעברית. אפשר לפתוח issue אבל אין הרבה פעילות... לדוגמה https://github.com/mailgun/talon/issues/157 פתוח כבר שנתיים.
עוד יותר יהיה טוב לפתוח pull request ובמקביל לטרטר את התמיכה...