Filtern von Antwort-E-Mails#
Das Ziel ist die automatische Bereinigung eingehender E-Mails, die als Antwort auf eine zuvor von Allegra verschickte vorgangsbezogene E-Mail erkannt worden ist. Dabei werden zitierte Texte, E-Mail-Signaturen, frühere Konversationsverläufe usw. entfernt.
Dies kann über die Datei EmailReplyPatterns.properties
konfiguriert werden.
Konfigurationsdatei#
Datei:
$ALLEGRA_HOME/EmailReplyPatterns.properties
Diese Konfigurationsdatei wird aus dem $ALLEGRA_HOME-Verzeichnis geladen und kann angepasst werden.
Änderungen an der Konfigurationsdatei werden zur Laufzeit automatisch neu geladen. Ein Neustart der Anwendung ist nicht erforderlich.
Hauptkonfigurationsoptionen#
Antwortfilter aktivieren/deaktivieren#
# Controls whether to extract the reply part or keep the
# entire email as it is
extractReplayPart=true
true(Standard)Entfernt zitierte Inhalte und behält nur den Antwortinhalt.
falseBehält den gesamten E-Mail-Inhalt einschließlich aller zitierten Teile bei, entfernt jedoch weiterhin einige allgemeine Allegra-Selektoren.
- Anwendungsfall:
Auf
falsesetzen, wenn der E-Mail-Verlauf in Vorgangkommentaren erhalten bleiben soll.
Allgemeine Allegra-Selektoren#
Verschiedene vorgangsspezifische Inhalte können optional in aus Allegra gesendete E-Mails eingefügt werden, z. B.:
Vorgangdetails
Konversationsverlauf
Vorgangsverknüpfung
Das oben erwähnte Flag extractReplayPart beeinflusst das Entfernen
dieser Inhalte nicht. Sie werden unabhängig davon entfernt, sofern
die folgenden Selektoren nicht explizit auskommentiert werden.
Format:
<client>.<itemSpecificContent>.<index>=<CSS selector>
<itemSpecificContent> kann sein:
itemDetailitemConversationHistoryitemLink
#Common Allegra element selectors.
generic.itemDetail.selector.0=div[class*=itemDetail]
generic.itemDetail.selector.1=div[id*=itemDetail]
#Workaround for Outlook
outlook.itemDetail.selector.siblings.0=
hr[style*=background-color: rgb(208, 208, 208)]
# Workarounds for Gmail
gmail.itemDetail.selector.0=
div:has(> div:has(> table[width=100%]
[cellpadding=0][cellspacing=0]:has(th)))
gmail.itemDetail.selector.1=
div:has(> table[width=100%]
[cellpadding=0][cellspacing=0]:has(th))
generic.itemConversationHistory.selector.0=
div[class*=itemConversationHistory]
generic.itemConversationHistory.selector.1=
div[id*=itemConversationHistory]
outlook.itemConversationHistory.selector.siblings.0=
hr[style*=background-color: rgb(208, 208, 208)]
gmail.itemConversationHistory.selector.0=
div:has(> div:has(> p:contains(conversationHistoryText)))
gmail.itemConversationHistory.selector.1=
div:has(> p:contains(conversationHistoryText))
generic.itemLink.selector.0=div[class*=itemLink]
generic.itemLink.selector.1=div[id*=itemLink]
outlook.itemLink.selector.siblings.0=
hr[style*=background-color: rgb(208, 208, 208)]
gmail.itemLink.selector.0=
div:has(> a[href*=printItem.action?key=])
Clientspezifische Erkennung#
# Controls whether to detect the email client
# before applying patterns
extractReplayPartClientSpecific=false
trueErkennt den E-Mail-Client (Outlook, Gmail usw.) und wendet nur die dafür relevanten Muster an.
false(Standard)Wendet alle Muster nacheinander an, um eine bessere Kompatibilität zu erreichen.
Auf true setzen für bessere Performance, wenn innerhalb des
Unternehmens hauptsächlich ein einzelner E-Mail-Client verwendet wird.
Muster mit Präfix generic werden unabhängig von dieser Einstellung
immer angewendet.
Unterstützte E-Mail-Clients#
Das System enthält vorkonfigurierte Muster für:
E-Mail-Client |
Präfix |
Beschreibung |
|---|---|---|
Outlook |
|
Microsoft Outlook |
Gmail |
|
Google Gmail Webinterface |
Thunderbird |
|
Mozilla Thunderbird |
Apple Mail |
|
macOS/iOS Mail-Anwendung |
Yahoo Mail |
|
Yahoo Webmail |
ProtonMail |
|
ProtonMail |
Generic |
|
Muster für alle E-Mails |
Mustertypen und Konfiguration#
Mustertyp 1: Erkennung des E-Mail-Clients#
Identifiziert den E-Mail-Client, der die Nachricht gesendet hat.
Format:
<client>.detection.<index>=<CSS selector>
# Detection patterns
outlook.detection.0=div[id^='divRplyFwdMsg']
outlook.detection.1=div.ms-outlook-mobile-reference-message
outlook.detection.2=div[id='appendonsend']
outlook.detection.3=div.WordSection1
gmail.detection.0=div.gmail_quote
gmail.detection.1=div.gmail_attr
thunderbird.detection.0=div.moz-cite-prefix
thunderbird.detection.1=div.moz-forward-container
thunderbird.detection.2=blockquote[type='cite']
applemail.detection.0=blockquote[type='cite']
yahoomail.detection.0=div[class*=yahoo_quoted]
protonmail.detection.0=div.protonmail_quote
Der erste passende Selektor bestimmt den Clienttyp.
Nützlich bei:
extractReplayPartClientSpecific=true
Mustertyp 2: Einfache Entfernen-Selektoren#
Entfernt passende Vorgänge. Dies ist nützlich, wenn ein Quote-Element den ursprünglichen Teil der E-Mail umfasst.
gmail.selector.0=div.gmail_quote
gmail.selector.1=div.gmail_attr
thunderbird.selector.0=blockquote[type='cite']
Format:
<client>.selector.<index>=<CSS selector>
Mustertyp 3: Entfernen mit Geschwistern#
Entfernt das gefundene Element UND alle folgenden Elemente (gesamter zitierter Bereich).
Dies ist nützlich, wenn der Beginn des Originalteils durch ein Element markiert wird und alle folgenden Elemente ebenfalls entfernt werden sollen.
outlook.selector.siblings.0=
hr[style*='border:none'][style*='border-top']
yahoomail.selector.siblings.0=
div[style*='border-top'][style*='dotted']
Format:
<client>.selector.siblings.<index>=<CSS selector>
Mustertyp 4: Bedingtes Entfernen mit Geschwistern#
Entfernt Elemente, die einem Selektor entsprechen UND bestimmten Text enthalten oder einem regulären Ausdruck entsprechen.
gmail.selector.siblings.conditional.0=div.gmail_extra
gmail.selector.siblings.conditional.0.regex=
.*On.*\\d{4}.*wrote:.*
applemail.selector.siblings.conditional.0=div, p, br
applemail.selector.siblings.conditional.0.text.contains=
Begin forwarded message:
Format:
<client>.selector.siblings.conditional.<index>=
<CSS selector>
<client>.selector.siblings.conditional.<index>.regex=
<regex pattern>
oder:
<client>.selector.siblings.conditional.<index>.text.contains=
<exact text>
Mustertyp 5: Antwort-Header-Muster#
Textbasierte Muster zum Erkennen von Antwort-Headern in verschiedenen Sprachen. Diese Verarbeitung erfolgt unabhängig vom E-Mail-Client.
# English
replyheader.selector.siblings.regex.0=
From:.*Sent:.*To:.*Subject:
replyheader.selector.siblings.regex.1=
On .* wrote:
# German
replyheader.selector.siblings.regex.3=
Von:.*Gesendet:.*An:.*Betreff:
replyheader.selector.siblings.regex.4=
Am .* schrieb .*:
Format:
replyheader.selector.siblings.regex.<index>=
<regex pattern>
Zu durchsuchende Elemente:
replyheader.element.selector=div, p, pre, span
Mustertyp 6: Allegra-spezifischer Antwortmarker#
Verwenden Sie diesen Ansatz, wenn andere clientspezifische oder generische Selektoren die E-Mails nicht wie erwartet bereinigen.
Inhalte aus Allegra-E-Mails kapseln#
Stellen Sie sicher, dass der aus Allegra gesendete E-Mail-Inhalt in ein spezielles Markerelement eingebettet wird.
# Wrap outgoing emails with a marker element
item.emailSend.wrapEmailContent=false
# the start of the wrapper element
item.emailSend.wrapStartTag=
<div class="answerDelimiter" id="answerDelimiter">
<p style="color:#b5b5b5">${delimiterText}</p>
#the end of the wrapper element
item.emailSend.wrapEndTag=</div>
Wrapper-Element aus empfangenen E-Mails entfernen#
Wenn das Markerelement in der Antwort-E-Mail vorhanden ist, kann es mit einem clientspezifischen Selektor entfernt werden.
outlook.delimiterSelector=
div[id*=answerDelimiter]:has(p:contains(delimiterText))
gmail.delimiterSelector=
div:containsOwn(delimiterText)
Format:
<client>.wrapSelector=<CSS selector>
- Hinweis:
%delimiterText%wird zur Laufzeit durch den lokalisierten Trennzeichentext ersetzt.
CSS-Selektor-Syntax#
Die Konfiguration verwendet Jsoup-CSS-Selektoren.
Selektor |
Beispiel |
Bedeutung |
|---|---|---|
Tag |
|
Alle div-Tags |
Klasse |
|
Klasse |
ID |
|
Element-ID |
Attribut exakt |
|
Exakter Wert |
Attribut enthält |
|
Teilstring |
Attribut beginnt mit |
|
Präfix |
Mehrere Selektoren |
|
Mehrfach |
Hat Kind |
|
Enthält Kind |
Enthält Text |
|
Textsuche |
Tests und Fehlersuche#
Konfiguration neu laden#
Nach Änderungen an EmailReplyPatterns.properties werden die
Änderungen automatisch erkannt. Ein Neustart ist nicht erforderlich.
Häufige Probleme#
Zitierter Text wird nicht entfernt#
HTML-Quelltext der E-Mail analysieren
eindeutige CSS-Selektoren oder Textmuster identifizieren
passende Muster zur Konfigurationsdatei hinzufügen
Es wird zu viel Inhalt entfernt#
Selektoren spezifischer formulieren
zu allgemeine Muster entfernen
Muster funktionieren nach Änderungen nicht#
fortlaufende Nummerierung prüfen (0,1,2,…)
Syntaxfehler prüfen
doppelte Backslashes in Regex verwenden:
\\dstatt\d
Selektoren mit siblings#
Wenn ein Selektor mit siblings passt, wird alles unterhalb des
gefundenen Elements entfernt, einschließlich Signaturen,
Haftungsausschlüssen, Datenschutz- und Virenhinweisen.
Best Practices#
Mit echten E-Mails testen
Zuerst clientspezifische Muster definieren
Immer fortlaufende Nummerierung verwenden
Änderungen dokumentieren
Vor Änderungen Backup der Konfiguration erstellen
Technische Hinweise#
Verarbeitungsreihenfolge:
Clientspezifische Muster ->
Generische Muster ->
Antwort-Header
- Caching
Regex-Muster werden für bessere Performance kompiliert und gecacht.
- Groß-/Kleinschreibung
Regex-Muster für Antwort-Header sind standardmäßig case-insensitive.