Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PostmasterSamples.pdf

07b86e788c12e66f05d3bb7099aa1967?s=47 Renee
December 07, 2016
830

 PostmasterSamples.pdf

07b86e788c12e66f05d3bb7099aa1967?s=128

Renee

December 07, 2016
Tweet

Transcript

  1. Renée Bäcker · Perl-Services.de info@perl-services.de

  2. PostmasterFilter in OTRS

  3. Renée Bäcker @reneeb_perl info@perl-services.de Seit 2002... … täglich 10-12 Stunden

    Perl Seit 2009… … hauptsächlich OTRS- Entwicklung
  4. Renée Bäcker @reneeb_perl info@perl-services.de * Feature-Addons → http://feature-addons.de * OPAR

    → http://opar.perl-services.de * OTRSWeekly → http://otrsweekly.info
  5. PostmasterFilter in OTRS • OTRS • Der Postmaster • Filter

    im Adminbereich • Eigene Filtermodule entwickeln
  6. OTRS

  7. OTRS • OpenSource Ticketsystem • ~ 150.000 Installationen • 35

    Sprachen • Responsive Design • Perl / JavaScript
  8. OTRS • Ticketsystem als Kern – Erweiterbarkeit über Addons –

    ITSM – FAQ – Wiki – Anbindung an Drittsysteme wie JIRA – ...
  9. Postmaster

  10. Postmaster • Wesentlicher Bestandteil von OTRS ist die Mailverarbeitung –

    POP3 – IMAP – Fetchmail • Es gibt eine zentrale Stelle für die Verarbeitung von Mails
  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
  12. Postmaster • „Analyse“ der eingehenden Mail – Aufspalten in die

    Einzelteile Header, Body, Anhänge – Keine Inhaltsanalyse (Spam-/Virenerkennung) – Inhaltsanalyse über Postmaster-Filter
  13. None
  14. Mails

  15. Feature-Addons.de OTRS-Community Hallo Community, Ich wünsche euch frohe Weihnachten und

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

    und einen Guten Rutsch. - Renée
  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
  18. Feature-Addons.de OTRS-Community Hallo Community, Ich wünsche euch frohe Weihnachten und

    einen Guten Rutsch. - Renée Anlagen USB-Stick
  19. Feature-Addons.de OTRS-Community Diese E-Mail ist HTML. Klicken Sie hier zur

    Ansicht: Www.newsletter.tld
  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).
  21. Filter (GUI)

  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
  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
  24. Filter (GUI) UseCases → Mails, die automatisch an info@foo-magazin.de 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.
  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.
  26. Filter (GUI) UseCases → Alle Mails, die nicht von intern

    kommen, werden ignoriert
  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?
  28. Rohform von Mails • Mail kann in unformatierter Form angezeigt

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

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

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

    werden. → Header raussuchen und in SysConfig eintragen
  32. Debugging Reguläre Ausdrücke

  33. Filter (GUI) • Vorteile – Sehr einfach zu verwalten –

    Werte schnell auswerten • Queue setzen • Dynamische Felder füllen • Mails ignorieren
  34. Filter (GUI) • Nachteile – Immer nur 1 Regex pro

    Header → Regex kann kompliziert werden → ggf. 2 Filter
  35. Filter (GUI) • Nachteile – Regex darf nicht zu komplex

    werden
  36. Filter (GUI) • Nachteile – Aktuell nur 1 Matching Group

  37. Filter (GUI) • Nachteile – Sieht nur den .txt-Teil Diese

    E-Mail ist HTML. Klicken Sie hier zur Ansicht: Www.newsletter.tld
  38. Filter (GUI) • Nachteile – Kann keine Zusammenhänge/komplexeren Inhalte betrachten

    – Kann keine Validierung von Daten vornehmen
  39. Filter (GUI) • Nachteile – Kann keine Aktionen direkt ausführen

    (z.B. Mails verschicken, Webseiten aufrufen, Programme ausführen, …) • Umweg über GenericAgent
  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
  41. Filter (GUI) • EnhancedPostmasterFilter

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

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

    immer nur letzten Wert
  44. EnhancedPostmasterFilter Nutzt Features von Perl > 5.10 Named Captures (?<name>)

    [**\name**] →
  45. EnhancedPostmasterFilter To: opar@test.example Subject: Maintenance CustomerID 123456 From: maint@your-hoster.example 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
  46. Filter (GUI) • ImportExportPostmasterFilter

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

  48. ImportExportPostmasterFilter

  49. ImportExportPostmasterFilter

  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
  51. Eigene Filtermodule entwickeln

  52. Filtermodul entwickeln • Zweck genau formulieren • Entscheiden, ob Pre-/Postfilter

    • „Abbruchbedingungen“ definieren • Modul schreiben • Konfiguration • Tests • Paket bauen
  53. Filtermodul entwickeln • Modul schreiben – Grundgerüst immer gleich •

    package-Name • Objektabängigkeiten • Konstruktor (new) • sub Run()
  54. Filtermodul entwickeln

  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
  56. Filtermodul entwickeln • Modul schreiben – Nach Überprüfung der Übergabeparameter

    kommt der eigentliche Filtercode
  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
  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“.
  59. Filtermodul entwickeln • Entscheiden, ob Pre-/PreCreate-/Postfilter xyz

  60. Filtermodul entwickeln • Entscheiden, ob Pre-/PreCreate-/Postfilter Hier wird ein Pre-Filter

    genommen, weil es schon auf die Ticketerstellung einen Einfluss hat.
  61. Filtermodul entwickeln • „Abbruchbedingungen“ definieren • Keine Filter ist sowieso

    am Ende wenn keines der Kriterien zutrift →
  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}
  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}
  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'; }
  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.
  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
  67. Filtermodul entwickeln • Entscheiden, ob Pre-/PreCreate-/Postfilter xyz

  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.
  69. Filtermodul entwickeln • „Abbruchbedingungen“ definieren • Abbruch wenn kein winmail.dat-Anhang

  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}
  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}
  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;
  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
  74. Filtermodul entwickeln • Konfiguration <ConfigItem Name="PostMaster::PreFilterModule###010-Junk" Required="0" Valid="1"> <Description Translatable="1">

    Postmaster filter to move and close junk tickets. </Description> <Group>JunkFilter</Group> <SubGroup>Core::Postmaster</SubGroup> <Setting> <Hash> <Item Key="Module">Kernel::System::PostMaster::Filter::Junk</Item> </Hash> </Setting> </ConfigItem>
  75. Filtermodul entwickeln • Konfiguration <ConfigItem Name="PostMaster::PreFilterModule###010-Junk" Required="0" Valid="1"> <Description Translatable="1">

    Postmaster filter to move and close junk tickets. </Description> <Group>JunkFilter</Group> <SubGroup>Core::Postmaster</SubGroup> <Setting> <Hash> <Item Key="Module">Kernel::System::PostMaster::Filter::Junk</Item> </Hash> </Setting> </ConfigItem>
  76. Filtermodul entwickeln • Tests – Kommandozeile – AdminEmailTest – Unittests

  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
  78. AdminEmailTest Fürs Testsystem Testen von eingehenden Mails – ohne Kommandozeile

  79. AdminEmailTest

  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“
  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
  82. Filtermodul entwickeln • Paketbau perl bin/otrs.Console.pl Dev::Package::Build --module-directory TrustedShopRatings --source-path

    TrustedShopRatings/TrustedShopRatings.sopm --target-path ~
  83. Beispiele • Github → https://github.com/reneeb/PostmasterSamples

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