Erhalten Sie die tatsächliche E-Mail-Nachricht, die die Person gerade geschrieben hat, ohne zitierten Text

Lesezeit: 6 Minuten

Benutzer-Avatar
Layke

Es gibt zwei bereits vorhandene Fragen auf der Website. Eine für Python, eine für Java.

  • Java So entfernen Sie den zitierten Text aus einer E-Mail und zeigen nur den neuen Text an
  • Python Zuverlässige Möglichkeit, nur den E-Mail-Text zu erhalten, ohne vorherige E-Mails

Ich möchte in der Lage sein, ziemlich genau dasselbe zu tun (in PHP). Ich habe einen Mail-Proxy erstellt, bei dem zwei Personen miteinander korrespondieren können, indem sie eine eindeutige E-Mail-Adresse per E-Mail senden. Das Problem, das ich jedoch feststelle, ist, dass ich, wenn eine Person die E-Mail erhält und auf „Antworten“ klickt, Schwierigkeiten habe, den von ihr geschriebenen Text genau zu erfassen und den zitierten Text aus der vorherigen Korrespondenz zu verwerfen.

Ich versuche, eine Lösung zu finden, die sowohl für HTML-E-Mails als auch für Klartext-E-Mails funktioniert, da ich beide sende.

Ich habe auch die Möglichkeit, wenn es hilft, etwas einzufügen <*****RESPOND ABOVE HERE*******> bei Bedarf in den E-Mails markieren, was bedeutet, dass ich alles unten verwerfen kann.

Was würden Sie mir empfehlen? Fügen Sie dieses Tag immer der HTML-Kopie und der Klartext-Kopie hinzu und greifen Sie dann alles darüber?

Dann würde ich immer noch das Szenario haben, zu wissen, wie jeder E-Mail-Client die Antwort erstellt. Denn zum Beispiel Gmail würde dies tun:

On Wed, Nov 2, 2011 at 10:34 AM, Message Platform <[email protected]> wrote:
## In replies all text above this line is added to your message conversation ##

Irgendwelche Vorschläge oder Empfehlungen für Best Practices?

Oder sollte ich mir einfach die 50 beliebtesten E-Mail-Clients schnappen und für jeden benutzerdefinierte Regex erstellen. Dann für jeden dieser Clients auch eine Billiarde verschiedene Gebietsschema-Einstellungen, da ich vermute, dass das Gebietsschema des Benutzers auch beeinflussen wird, was hinzugefügt wird.

Oder sollte ich die vorangehende Zeile immer entfernen, wenn sie ein Datum enthält? … usw

  • Wie können Sie <*****OBEN HIER ANTWORTEN*******> zur Antwort-E-Mail hinzufügen. Lass es mich wissen, bitte . Ich möchte dazu

    – Mussafa

    13. April um 2:35 Uhr

  • Herausgefunden . Sie können mailto verwenden. mailto.vercel.app und setze den Körper….. Falls sich jemand anderes gefragt hat

    – Mussafa

    18. April um 23:07 Uhr

Benutzer-Avatar
geerlingguy

Unglücklicherweise steht Ihnen eine Welt voller Verletzungen bevor, wenn Sie versuchen möchten, E-Mails akribisch zu bereinigen (alles zu entfernen, was nicht Teil der eigentlichen Antwort-E-Mail selbst ist). Das Ideal Der Weg wäre, wie Sie vorschlagen, Regex für jeden gängigen E-Mail-Client / -Dienst zu schreiben, aber das ist eine ziemlich lächerliche Menge an Arbeit, und ich empfehle faul und dumm sein darüber.

Interessanterweise sogar Facebook-Ingenieure haben Probleme mit diesem Problem, und Google hat ein Patent über eine Methode zum “Erkennen von zitiertem Text”.

Es gibt drei Lösungen, die Sie möglicherweise für akzeptabel halten:

Lass es in Ruhe

Die erste Lösung besteht darin, einfach alles in der Nachricht zu belassen. Die meisten E-Mail-Clients tun dies, und niemand scheint sich zu beschweren. Natürlich sehen Online-Nachrichtensysteme (wie die „Nachrichten“ von Facebook) ziemlich seltsam aus, wenn sie Antworten im Anfangsstil haben. Eine hinterhältige Möglichkeit, dies zum Laufen zu bringen, besteht darin, die Nachricht so darzustellen, dass alle zitierten Zeilen reduziert sind, und einen kleinen Link zum „Erweitern von zitiertem Text“ einzufügen.

Trennen Sie die Antwort von der älteren Nachricht

Die zweite Lösung besteht, wie Sie bereits erwähnt haben, darin, eine abgrenzende Nachricht an den Anfang Ihrer Nachrichten zu setzen, z --------- please reply above this line ----------, und entfernen Sie dann diese Zeile und alles darunter, wenn Sie die Antworten verarbeiten. Viele Systeme tun dies, und es ist nicht das Schlimmste auf der Welt … aber es lässt Ihre E-Mail “automatisierter” und weniger persönlich aussehen (meiner Meinung nach).

Zitierten Text entfernen

Die letzte Lösung besteht darin, einfach jede neue Zeile, die mit a beginnt, zu entfernen >, was vermutlich eine zitierte Zeile aus der Antwort-E-Mail ist. Die meisten E-Mail-Clients verwenden diese Methode, um zitierten Text anzuzeigen. Hier ist ein Regex (in PHP), der genau das tun würde:

$clean_text = preg_replace('/(^\w.+:\n)?(^>.*(\n|$))+/mi', '', $message_body);

Bei dieser einfacheren Methode gibt es einige Probleme:

  • Viele E-Mail-Clients erlauben es auch, frühere E-Mails zu zitieren und diesen Zitatzeilen voranzustellen > auch, also werden Sie Anführungszeichen entfernen.
  • Normalerweise befindet sich über der zitierten E-Mail eine Zeile mit so etwas wie On 2024, [person] said. Diese Zeile ist schwer zu entfernen, da sie in verschiedenen E-Mail-Clients nicht gleich formatiert ist und möglicherweise eine oder zwei Zeilen über dem zitierten Text steht, den Sie entfernt haben. Ich habe diese Erkennungsmethode mit mäßigem Erfolg in meinem PHP implementiert Abbildung Bibliothek.

Natürlich ist das Testen der Schlüssel, und die Kompromisse könnten sich für Ihr spezielles System lohnen. YMMV.

Benutzer-Avatar
Pedro

Es gibt viele Bibliotheken, die Ihnen helfen können, die Antwort/Signatur aus einer Nachricht zu extrahieren:

Ich habe auch gelesen, dass Mailgun über einen Dienst verfügt, mit dem eingehende E-Mails analysiert und deren Inhalt an eine URL Ihrer Wahl gesendet werden können. Es entfernt automatisch zitierten Text aus Ihren E-Mails: https://www.mailgun.com/blog/handle-incoming-emails-like-a-pro-mailgun-api-2-0/

Hoffe das hilft!

  • Zu akzeptierter Antwort gewechselt. Toller Beitrag, um eine wirklich alte Frage zu beantworten.

    – Layke

    4. Januar 2018 um 9:39 Uhr

Benutzer-Avatar
philfreo

Eventuell hilfreich: ZitatWachtel ist eine Python-Bibliothek, die hilft, zitierten Text in E-Mails zu identifizieren

Benutzer-Avatar
sascha

Afaik, (Standard-)E-Mails sollten den gesamten Text zitieren, indem vor jeder Zeile ein “>” hinzugefügt wird. Was Sie mit strstr() entfernen könnten. Haben Sie ansonsten versucht, dieses Java-Beispiel nach PHP zu portieren? Es ist nichts anderes als Regex.

Sogar Seiten wie Github und Facebook haben dieses Problem.

Nur eine Idee: Sie haben den ursprünglich gesendeten Text, können also danach suchen und ihn und zusätzliche Umgebungsgeräusche aus der Antwort entfernen. Es ist nicht trivial, da zusätzliche Zeilenumbrüche, HTML-Elemente, “>”-Zeichen von der Mail-Client-Anwendung hinzugefügt werden.

Die Regex ist definitiv besser, wenn sie funktioniert, weil sie einfach ist und den Originaltext perfekt schneidet, aber wenn Sie feststellen, dass sie häufig nicht funktioniert, kann dies eine Ausweichmethode sein.

  • Die ursprüngliche E-Mail aus dem Angebot ist für weitergeleitete E-Mails nicht verfügbar

    – Kartoffel

    5. März 2020 um 2:44 Uhr

Benutzer-Avatar
radzserg

Ich stimme zu, dass der zitierte Text oder die Antwort nur ein TEXT ist. Es gibt also keinen genauen Weg, es abzurufen. Wie auch immer, Sie können regexp replace so verwenden.

$filteringMessage = preg_replace('/.*\n\n((^>+\s{1}.*$)+\n?)+/mi', '', $message);

Prüfen
https://regex101.com/r/xO8nI1/2

  • Die ursprüngliche E-Mail aus dem Angebot ist für weitergeleitete E-Mails nicht verfügbar

    – Kartoffel

    5. März 2020 um 2:44 Uhr

1163020cookie-checkErhalten Sie die tatsächliche E-Mail-Nachricht, die die Person gerade geschrieben hat, ohne zitierten Text

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy