$30 off During Our Annual Pro Sale. View Details »

PostmasterSamples.pdf

Renee
December 07, 2016
1.2k

 PostmasterSamples.pdf

Renee

December 07, 2016
Tweet

Transcript

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

    View Slide

  2. PostmasterFilter
    in OTRS

    View Slide

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

    View Slide

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

    View Slide

  5. PostmasterFilter in OTRS

    OTRS

    Der Postmaster

    Filter im Adminbereich

    Eigene Filtermodule entwickeln

    View Slide

  6. OTRS

    View Slide

  7. OTRS

    OpenSource Ticketsystem

    ~ 150.000 Installationen

    35 Sprachen

    Responsive Design

    Perl / JavaScript

    View Slide

  8. OTRS

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

    View Slide

  9. Postmaster

    View Slide

  10. Postmaster

    Wesentlicher Bestandteil von OTRS ist die
    Mailverarbeitung
    – POP3
    – IMAP
    – Fetchmail

    Es gibt eine zentrale Stelle für die
    Verarbeitung von Mails

    View Slide

  11. 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

    View Slide

  12. Postmaster

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

    View Slide

  13. View Slide

  14. Mails

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  20. 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).

    View Slide

  21. Filter (GUI)

    View Slide

  22. 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

    View Slide

  23. 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

    View Slide

  24. 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.

    View Slide

  25. 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.

    View Slide

  26. Filter (GUI) UseCases

    Alle Mails, die nicht von intern kommen, werden ignoriert

    View Slide

  27. 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?

    View Slide

  28. Rohform von Mails

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

    View Slide

  29. Rohform von Mails

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

    View Slide

  30. Rohform von Mails

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

    View Slide

  31. Rohform von Mails

    Mail kann in unformatierter Form angezeigt
    werden.
    → Header raussuchen und in SysConfig eintragen

    View Slide

  32. Debugging Reguläre Ausdrücke

    View Slide

  33. Filter (GUI)

    Vorteile
    – Sehr einfach zu verwalten
    – Werte schnell auswerten

    Queue setzen

    Dynamische Felder füllen

    Mails ignorieren

    View Slide

  34. Filter (GUI)

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

    View Slide

  35. Filter (GUI)

    Nachteile
    – Regex darf nicht zu komplex werden

    View Slide

  36. Filter (GUI)

    Nachteile
    – Aktuell nur 1 Matching Group

    View Slide

  37. Filter (GUI)

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

    View Slide

  38. Filter (GUI)

    Nachteile
    – Kann keine Zusammenhänge/komplexeren Inhalte
    betrachten
    – Kann keine Validierung von Daten vornehmen

    View Slide

  39. Filter (GUI)

    Nachteile
    – Kann keine Aktionen direkt ausführen (z.B. Mails
    verschicken, Webseiten aufrufen, Programme
    ausführen, …)

    Umweg über GenericAgent

    View Slide

  40. 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

    View Slide

  41. Filter (GUI)

    EnhancedPostmasterFilter

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  45. 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

    View Slide

  46. Filter (GUI)

    ImportExportPostmasterFilter

    View Slide

  47. ImportExportPostmasterFilter
    Postmaster Filter transferieren
    Ein Filter, mehrere oder alle

    View Slide

  48. ImportExportPostmasterFilter

    View Slide

  49. ImportExportPostmasterFilter

    View Slide

  50. 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

    View Slide

  51. Eigene Filtermodule
    entwickeln

    View Slide

  52. Filtermodul entwickeln

    Zweck genau formulieren

    Entscheiden, ob Pre-/Postfilter

    „Abbruchbedingungen“ definieren

    Modul schreiben

    Konfiguration

    Tests

    Paket bauen

    View Slide

  53. Filtermodul entwickeln

    Modul schreiben
    – Grundgerüst immer gleich

    package-Name

    Objektabängigkeiten

    Konstruktor (new)

    sub Run()

    View Slide

  54. Filtermodul entwickeln

    View Slide

  55. 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

    View Slide

  56. Filtermodul entwickeln

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

    View Slide

  57. 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

    View Slide

  58. 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“.

    View Slide

  59. Filtermodul entwickeln

    Entscheiden, ob Pre-/PreCreate-/Postfilter
    xyz

    View Slide

  60. Filtermodul entwickeln

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

    View Slide

  61. Filtermodul entwickeln

    „Abbruchbedingungen“ definieren

    Keine Filter ist sowieso am Ende wenn keines der Kriterien zutrift

    View Slide

  62. 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}

    View Slide

  63. 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}

    View Slide

  64. 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';
    }

    View Slide

  65. 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.

    View Slide

  66. 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

    View Slide

  67. Filtermodul entwickeln

    Entscheiden, ob Pre-/PreCreate-/Postfilter
    xyz

    View Slide

  68. 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.

    View Slide

  69. Filtermodul entwickeln

    „Abbruchbedingungen“ definieren

    Abbruch wenn kein winmail.dat-Anhang

    View Slide

  70. 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}

    View Slide

  71. 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}

    View Slide

  72. 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;

    View Slide

  73. 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

    View Slide

  74. Filtermodul entwickeln

    Konfiguration


    Postmaster filter to move and close junk tickets.

    JunkFilter
    Core::Postmaster


    Kernel::System::PostMaster::Filter::Junk



    View Slide

  75. Filtermodul entwickeln

    Konfiguration


    Postmaster filter to move and close junk tickets.

    JunkFilter
    Core::Postmaster


    Kernel::System::PostMaster::Filter::Junk



    View Slide

  76. Filtermodul entwickeln

    Tests
    – Kommandozeile
    – AdminEmailTest
    – Unittests

    View Slide

  77. 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

    View Slide

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

    View Slide

  79. AdminEmailTest

    View Slide

  80. 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“

    View Slide

  81. 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

    View Slide

  82. Filtermodul entwickeln

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

    View Slide

  83. Beispiele

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

    View Slide

  84. Beispiele

    Folien

    http://speakerdeck.com/reneeb_perl/PostmasterS
    amples

    View Slide