Der Befehl compare() prüft Werte in Header-Feldern auf einen zu definierenden Vergleichswert.
Dieser Befehl vergleicht den Inhalt eines Headers (header-field) mit Hilfe eines Vergleichsoperators (operator) mit einem angegebenen Wert (value)..
Aufbau des Befehls
compare('header-field','operator','value');
Rückgabewert
positiv |
bei zutreffender Bedingung |
negativ |
bei nicht zutreffender Bedingung (siehe auch Hinweis zu value!) |
Parameter
header-field
Gibt das Kopfzeilen-Feld an, dessen Inhalt gegen den Inhalt des Parameters value verglichen werden soll. Als Kopfzeilen-Felder können alle Header in einer E-Mail verwendet werden.
Mögliche Werte:
•return-path •date •from •sender •reply-to •to •cc •bcc •subject •beliebiger X-Header |
Header sind laut RFC case-insensitive. Dennoch wird das zu vergleichende 'header-field' in der eingetragenen Schreibweise ersetzt. Dies kann von Vorteil sein, wenn ein nachfolgendes System - entgegen des RFC - Groß- und/oder Kleinschreibung erwartet. |
operator
Mögliche Werte:
•equal |
vergleicht auf Gleichheit (case sensitive) |
•match |
prüft auf das Zutreffen eines regulären Ausdrucks (case insensitive!) |
•substitute |
ist gleich wie match, entfernt aber den zutreffenden Teil von value aus header-field |
Codierte Felder werden vor dem Vergleich decodiert. Die Sonderzeichen Tabulator, Wagenrücklauf, Zeilenvorschub und Seitenende werden vor einem Vergleich mit dem Operator equal entfernt. |
value
Gibt den Wert an, gegen den verglichen werden soll. Dieser Wert kann auch ein regulärer Ausdruck sein.
Wird als value '' angegeben, so wird auch dann „true“ zurückgegeben, wenn der unter header-field angegebene Header gar nicht vorhanden ist! Folgender Log-Eintrag wird generiert: Compare with empty string - skip and return true |
Beispiel 1
Zeile |
Code |
---|---|
01 |
if (compare('x-smenc','equal','yes')) { |
02 |
tagsubject('[confidential]'); |
03 |
} |
Erklärung
Dieses Beispiel prüft, ob der Header x-smenc vorhanden ist und exakt den Wert yes beinhaltet (Zeile 01). Dies bedeutet nicht, dass der Wert yes lediglich vorhanden ist, sondern, dass der Wert ausschließlich yes beinhaltet.
Ist die abgefragte Kondition gegeben, wird die E-Mail für das Verschlüsseln markiert (Zeile 02).
Beispiel 2
Zeile |
Code |
---|---|
01 |
if (compare('to','match','@customer\.de')) { |
02 |
tagsubject('[nosign]'); |
03 |
} |
Erklärung
Dieses Beispiel prüft bei einer ausgehenden E-Mail im header to mit dem Operator match auf das Vorhandensein der Domain @customer.de innerhalb der Empfänger E-Mail Adresse (Zeile 01). Wenn die E-Mail Adresse des Empfängers die Zeichenkette @customer.de enthält, dann ist der Rückgabewert von compare() true, im Betreff wird das Schlüsselwort (tag) [nosign] hinzugefügt (Zeile 02). Je nach Basiskonfiguration des Rulesets wird dadurch das Signieren der E-Mail unterdrückt.
Beispiel 3
Zeile |
Code |
---|---|
01 |
compare('subject','substitute','(\s)*\[secure\]'); |
Erklärung
Dieses Beispiel prüft den Betreff (Header subject) einer E-Mail auf das Vorhandensein der Zeichenkette [secure] (als regulärer Ausdruck (\s)*\[secure\]). Wird diese Zeichenkette innerhalb des Betreff gefunden, so wird diese entfernt.