Slide 1

Slide 1 text

Renée Bäcker · Perl-Services.de [email protected]

Slide 2

Slide 2 text

PostmasterFilter in OTRS

Slide 3

Slide 3 text

Renée Bäcker @reneeb_perl [email protected] Seit 2002... … täglich 10-12 Stunden Perl Seit 2009… … hauptsächlich OTRS- Entwicklung

Slide 4

Slide 4 text

Renée Bäcker @reneeb_perl [email protected] * Feature-Addons → http://feature-addons.de * OPAR → http://opar.perl-services.de * OTRSWeekly → http://otrsweekly.info

Slide 5

Slide 5 text

PostmasterFilter in OTRS ● OTRS ● Der Postmaster ● Filter im Adminbereich ● Eigene Filtermodule entwickeln

Slide 6

Slide 6 text

OTRS

Slide 7

Slide 7 text

OTRS ● OpenSource Ticketsystem ● ~ 150.000 Installationen ● 35 Sprachen ● Responsive Design ● Perl / JavaScript

Slide 8

Slide 8 text

OTRS ● Ticketsystem als Kern – Erweiterbarkeit über Addons – ITSM – FAQ – Wiki – Anbindung an Drittsysteme wie JIRA – ...

Slide 9

Slide 9 text

Postmaster

Slide 10

Slide 10 text

Postmaster ● Wesentlicher Bestandteil von OTRS ist die Mailverarbeitung – POP3 – IMAP – Fetchmail ● Es gibt eine zentrale Stelle für die Verarbeitung von Mails

Slide 11

Slide 11 text

Postmaster ● Verarbeitet eingehende E-Mails – „Analysiert“ eingehende Mails – Erstellt Tickets / Artikel – Prüft ob geschlossene Tickets neue Artikel bekommen dürfen – Kann E-Mails ablehnen – Über Filter erweiterbar

Slide 12

Slide 12 text

Postmaster ● „Analyse“ der eingehenden Mail – Aufspalten in die Einzelteile Header, Body, Anhänge – Keine Inhaltsanalyse (Spam-/Virenerkennung) – Inhaltsanalyse über Postmaster-Filter

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

Mails

Slide 15

Slide 15 text

Feature-Addons.de OTRS-Community Hallo Community, Ich wünsche euch frohe Weihnachten und einen Guten Rutsch. - Renée

Slide 16

Slide 16 text

Feature-Addons.de OTRS-Community Rheinland Hallo Community, Ich wünsche euch frohe Weihnachten und einen Guten Rutsch. - Renée

Slide 17

Slide 17 text

Feature-Addons.de OTRS-Community Hallo Community, Ich wünsche euch frohe Weihnachten und einen Guten Rutsch. - Renée Anlagen Bild1.jpg Bild2.jpg

Slide 18

Slide 18 text

Feature-Addons.de OTRS-Community Hallo Community, Ich wünsche euch frohe Weihnachten und einen Guten Rutsch. - Renée Anlagen USB-Stick

Slide 19

Slide 19 text

Feature-Addons.de OTRS-Community Diese E-Mail ist HTML. Klicken Sie hier zur Ansicht: Www.newsletter.tld

Slide 20

Slide 20 text

Header Multipart/Mixed – this message is different parts, put together, and the order matters. Multipart/Alternative- I have two children, pick the prettier one and show it off. Text/Plain – I am a blob of plain text Multipart/Related – My children are bits and pieces of each other Text/HTML – Pretty, Pretty Text. Image/Gif – I am a picture of a cat, referenced by pretty, pretty text, I hope. Image/Jpeg – I’m an attachment (in case you couldn’t see the picture of the cat above).

Slide 21

Slide 21 text

Filter (GUI)

Slide 22

Slide 22 text

Filter (GUI) ● Filter über Webfrontend (Adminbereich) konfigurierbar ● Suche Text in der Mail und setze einen Wert – Suche erfolgt mit Regulären Ausdrücken ● Pre-Filter Kernel/System/PostMaster/Filter/MatchDBSource.pm

Slide 23

Slide 23 text

Filter (GUI) UseCases → ● Bestimmte Absender blockieren ● Dynamisches Feld an Hand Header-Angaben füllen ● Dynamisches Feld an Hand Mailtext füllen ● Ticket in bestimmte Queue stecken ● Status setzen

Slide 24

Slide 24 text

Filter (GUI) UseCases → Mails, die automatisch an [email protected] verschickt (mit Perl-Modul Mail::Sender) wurden und einen HTML-Link enthalten, werden als SPAM behandelt: Sie werden in die Queue Junk geschoben und erfolgreich Geschlossen.

Slide 25

Slide 25 text

Filter (GUI) UseCases → Wird ein Demosystem für eine OTRS-Erweiterung angefordert, werden diese in die Queue „FeatureAddons“ geschoben und das Dynamische Feld „AddonName“ wird gefüllt.

Slide 26

Slide 26 text

Filter (GUI) UseCases → Alle Mails, die nicht von intern kommen, werden ignoriert

Slide 27

Slide 27 text

Filter (GUI) ● Was tun wenn … ich die Header nicht kenne? der benötigte Header nicht zur Auswahl steht? ich den Regulären Ausdruck prüfen möchte?

Slide 28

Slide 28 text

Rohform von Mails ● Mail kann in unformatierter Form angezeigt werden. → SysConfig für „ViewZoom“ die PlainView aktivieren

Slide 29

Slide 29 text

Rohform von Mails ● Mail kann in unformatierter Form angezeigt werden. → dann auf „Unformatierte Ansicht“ in TicketZoom

Slide 30

Slide 30 text

Rohform von Mails ● Mail kann in unformatierter Form angezeigt werden. → dann auf „Unformatierte Ansicht“ in TicketZoom

Slide 31

Slide 31 text

Rohform von Mails ● Mail kann in unformatierter Form angezeigt werden. → Header raussuchen und in SysConfig eintragen

Slide 32

Slide 32 text

Debugging Reguläre Ausdrücke

Slide 33

Slide 33 text

Filter (GUI) ● Vorteile – Sehr einfach zu verwalten – Werte schnell auswerten ● Queue setzen ● Dynamische Felder füllen ● Mails ignorieren

Slide 34

Slide 34 text

Filter (GUI) ● Nachteile – Immer nur 1 Regex pro Header → Regex kann kompliziert werden → ggf. 2 Filter

Slide 35

Slide 35 text

Filter (GUI) ● Nachteile – Regex darf nicht zu komplex werden

Slide 36

Slide 36 text

Filter (GUI) ● Nachteile – Aktuell nur 1 Matching Group

Slide 37

Slide 37 text

Filter (GUI) ● Nachteile – Sieht nur den .txt-Teil Diese E-Mail ist HTML. Klicken Sie hier zur Ansicht: Www.newsletter.tld

Slide 38

Slide 38 text

Filter (GUI) ● Nachteile – Kann keine Zusammenhänge/komplexeren Inhalte betrachten – Kann keine Validierung von Daten vornehmen

Slide 39

Slide 39 text

Filter (GUI) ● Nachteile – Kann keine Aktionen direkt ausführen (z.B. Mails verschicken, Webseiten aufrufen, Programme ausführen, …) ● Umweg über GenericAgent

Slide 40

Slide 40 text

Filter (GUI) ● Nachteile – Kann nicht in Anhänge schauen – Ist immer ein Pre-Filter – Beschränkung Zeichenanzahl für Regex – Nur UND-Verknüpfte Bedingungen

Slide 41

Slide 41 text

Filter (GUI) ● EnhancedPostmasterFilter

Slide 42

Slide 42 text

EnhancedPostmasterFilter Sponsored by Caritasverband Westerwald-Rhein-Lahn e.V.

Slide 43

Slide 43 text

EnhancedPostmasterFilter Nicht nur „[***]“ zum Setzen von Werten [***] nimmt immer nur letzten Wert

Slide 44

Slide 44 text

EnhancedPostmasterFilter Nutzt Features von Perl > 5.10 Named Captures (?) [**\name**] →

Slide 45

Slide 45 text

EnhancedPostmasterFilter To: [email protected] Subject: Maintenance CustomerID 123456 From: [email protected] Date: Thu, 18 Dec 2014 13:13:22 +0100 There will be maintenance on Sunday for theses servers: 127.0.0.1 1.1.1.1

Slide 46

Slide 46 text

Filter (GUI) ● ImportExportPostmasterFilter

Slide 47

Slide 47 text

ImportExportPostmasterFilter Postmaster Filter transferieren Ein Filter, mehrere oder alle

Slide 48

Slide 48 text

ImportExportPostmasterFilter

Slide 49

Slide 49 text

ImportExportPostmasterFilter

Slide 50

Slide 50 text

Filter (GUI) ● Achtung Spoiler! – Ab Mai 2017 Debugging auf OPMToolbox.de → ● Beta-Tests ab März 2017 – Filter importieren, Mail hochladen und einzelne Schritte anschauen – Beispielfilter – Filtermodule schneller erstellen

Slide 51

Slide 51 text

Eigene Filtermodule entwickeln

Slide 52

Slide 52 text

Filtermodul entwickeln ● Zweck genau formulieren ● Entscheiden, ob Pre-/Postfilter ● „Abbruchbedingungen“ definieren ● Modul schreiben ● Konfiguration ● Tests ● Paket bauen

Slide 53

Slide 53 text

Filtermodul entwickeln ● Modul schreiben – Grundgerüst immer gleich ● package-Name ● Objektabängigkeiten ● Konstruktor (new) ● sub Run()

Slide 54

Slide 54 text

Filtermodul entwickeln

Slide 55

Slide 55 text

Filtermodul entwickeln ● Modul schreiben – Parameter – JobConfig – Zusatzangaben aus SysConfig – GetParam – Hashref mit Mailinhalt ● $Param{GetParam}->{Subject} ● $Param{GetParam}->{Body} ● $Param{GetParam}->{"X-Mailer"} – TicketID – Vor allem bei Post-Filtern wichtig

Slide 56

Slide 56 text

Filtermodul entwickeln ● Modul schreiben – Nach Überprüfung der Übergabeparameter kommt der eigentliche Filtercode

Slide 57

Slide 57 text

Filtermodul entwickeln ● Use Cases – Erweiterter Junk-Filter – Winmail.dat „entpacken“ – HTML-Code betrachten – VCF-Datei in Addressbuch übernehmen – Ticket einem Change zuordnen – Überprüfung, ob Installationskey zum Kunden gehört ● Benachrichtigung an Kunden – Demosystem erstellen

Slide 58

Slide 58 text

Filtermodul entwickeln ● Zweck genau formulieren Wenn im Betreff einer der konfigurierten Regexes vorkommt oder als Absender eine der konfigurierten Adressen eingetragen oder im Text einer der konfigurierten Regexes vorkommt, dann muss das Ticket in der Queue Spam erstellt werden und der Status ist „erfolgreich geschlossen“.

Slide 59

Slide 59 text

Filtermodul entwickeln ● Entscheiden, ob Pre-/PreCreate-/Postfilter xyz

Slide 60

Slide 60 text

Filtermodul entwickeln ● Entscheiden, ob Pre-/PreCreate-/Postfilter Hier wird ein Pre-Filter genommen, weil es schon auf die Ticketerstellung einen Einfluss hat.

Slide 61

Slide 61 text

Filtermodul entwickeln ● „Abbruchbedingungen“ definieren ● Keine Filter ist sowieso am Ende wenn keines der Kriterien zutrift →

Slide 62

Slide 62 text

Filtermodul entwickeln ● Modul schreiben Wenn im Betreff einer der konfigurierten Regexes vorkommt oder als Absender eine der konfigurierten Adressen eingetragen oder im Text einer der konfigurierten Regexes vorkommt, dann muss das Ticket in der Queue Spam erstellt werden und der Status ist „erfolgreich geschlossen“. $Param{GetParam}->{Subject} $Param{GetParam}->{From} $Param{GetParam}->{Body}

Slide 63

Slide 63 text

Filtermodul entwickeln ● Modul schreiben Wenn im Betreff einer der konfigurierten Regexes vorkommt oder als Absender eine der konfigurierten Adressen eingetragen oder im Text einer der konfigurierten Regexes vorkommt, dann muss das Ticket in der Queue Spam erstellt werden und der Status ist „erfolgreich geschlossen“. $Param{GetParam}->{X-OTRS-State} $Param{GetParam}->{X-OTRS-Queue}

Slide 64

Slide 64 text

Filtermodul entwickeln my %Mail = %{ $Param{GetParam} || {} }; if ( $Mail{Subject} =~ m{$SubjectRegex} || $Mail{From} =~ m{$FromRegex} || $Mail{Body} =~ m{$BodyRegex} ) { $Param{GetParam}->{'X-OTRS-Queue'} = 'Spam'; $Param{GetParam}->{'X-OTRS-State'} = 'successful closed'; }

Slide 65

Slide 65 text

Filtermodul entwickeln ● Zweck genau formulieren Wenn im Anhang eine winmail.dat zu finden ist, soll der Anhang entpackt und die Dateien daraus an den Eingangsartikel gehängt werden.

Slide 66

Slide 66 text

Filtermodul entwickeln ● Use Cases – Erweiterter Junk-Filter – Winmail.dat „entpacken“ – HTML-Code betrachten – VCF-Datei in Addressbuch übernehmen – Ticket einem Change zuordnen – Überprüfung, ob Installationskey zum Kunden gehört ● Benachrichtigung an Kunden – Demosystem erstellen

Slide 67

Slide 67 text

Filtermodul entwickeln ● Entscheiden, ob Pre-/PreCreate-/Postfilter xyz

Slide 68

Slide 68 text

Filtermodul entwickeln ● Entscheiden, ob Pre-/PreCreate-/Postfilter Hier wird ein Pre-Filter genommen, weil es schon auf den Eingangsartikel einen Einfluss hat. Hinweis: Hieße es im Ziel „Inhalt aus winmail.dat soll in einem zweiten Artikel angehängt werden“, dann müsste ein Postfilter genommen werden.

Slide 69

Slide 69 text

Filtermodul entwickeln ● „Abbruchbedingungen“ definieren ● Abbruch wenn kein winmail.dat-Anhang

Slide 70

Slide 70 text

Filtermodul entwickeln ● Modul schreiben Wenn im Anhang eine winmail.dat zu finden ist, soll der Anhang entpackt und die Dateien daraus an den Eingangsartikel gehängt werden. $Param{GetParam}->{Attachment}

Slide 71

Slide 71 text

Filtermodul entwickeln ● Modul schreiben Wenn im Anhang eine winmail.dat zu finden ist, soll der Anhang entpackt und die Dateien daraus an den Eingangsartikel gehängt werden. $Param{GetParam}->{Attachment}

Slide 72

Slide 72 text

Filtermodul entwickeln my %Mail = %{ $Param{GetParam} || {} }; my ($WinmailDat) = grep{ $_->{Filename} eq 'winmail.dat'; }@{ $Mail{Attachment} }; return 1 if !$WinmailDat; my @NewAttachments; # Do the converting for my $File ( @FilesInWinmailDat ) { push @NewAttachments, { Filename => $File->name, Content => $File->data, ContentType => 'application/octet-stream', }; } push @{ $Param{GetParam}->{Attachment} }, @NewAttachments;

Slide 73

Slide 73 text

Filtermodul entwickeln ● Use Cases – Erweiterter Junk-Filter – Winmail.dat „entpacken“ – HTML-Code betrachten – VCF-Datei in Addressbuch übernehmen – Ticket einem Change zuordnen – Überprüfung, ob Installationskey zum Kunden gehört ● Benachrichtigung an Kunden – Demosystem erstellen

Slide 74

Slide 74 text

Filtermodul entwickeln ● Konfiguration Postmaster filter to move and close junk tickets. JunkFilter Core::Postmaster Kernel::System::PostMaster::Filter::Junk

Slide 75

Slide 75 text

Filtermodul entwickeln ● Konfiguration Postmaster filter to move and close junk tickets. JunkFilter Core::Postmaster Kernel::System::PostMaster::Filter::Junk

Slide 76

Slide 76 text

Filtermodul entwickeln ● Tests – Kommandozeile – AdminEmailTest – Unittests

Slide 77

Slide 77 text

Filtermodul entwickeln ● Tests - Kommandozeile 1) Beispielmail erstellen / herunterladen 2) → perl bin/otrs.PostMaster.pl < Beispielmail.eml → perl bin/otrs.Console.pl Maint::PostMaster::Read < Beispielmail.eml

Slide 78

Slide 78 text

AdminEmailTest Fürs Testsystem Testen von eingehenden Mails – ohne Kommandozeile

Slide 79

Slide 79 text

AdminEmailTest

Slide 80

Slide 80 text

Filtermodul entwickeln ● Paketbau – Änderungen können leichter in andere Systeme übertragen werden – Änderungen sind besser ersichtlich (Stichwort Upgrade) – Pakete können bei Upgrade einfach „erneut installiert werden“

Slide 81

Slide 81 text

Filtermodul entwickeln ● Paketbau – Verzeichnisstruktur muss wie im OTRS vorliegen – Plus .sopm-Datei TrustedShopsRating ├── Kernel │ ├── Config │ │ └── Files │ │ └── TrustedShopsRating.xml │ └── System │ └── PostMaster │ └── Filter │ └── TrustedShopsRating.pm └── TrustedShopsRating.sopm

Slide 82

Slide 82 text

Filtermodul entwickeln ● Paketbau perl bin/otrs.Console.pl Dev::Package::Build --module-directory TrustedShopRatings --source-path TrustedShopRatings/TrustedShopRatings.sopm --target-path ~

Slide 83

Slide 83 text

Beispiele ● Github → https://github.com/reneeb/PostmasterSamples

Slide 84

Slide 84 text

Beispiele ● Folien → http://speakerdeck.com/reneeb_perl/PostmasterS amples