{"id":231,"date":"2018-01-11T13:52:55","date_gmt":"2018-01-11T12:52:55","guid":{"rendered":"https:\/\/www.gluecksgriff-taschen.de\/?p=231"},"modified":"2022-07-02T17:58:51","modified_gmt":"2022-07-02T15:58:51","slug":"durchsuchbare-email-archivierung-mit-agorum-core","status":"publish","type":"post","link":"https:\/\/www.gluecksgriff-taschen.de\/?p=231","title":{"rendered":"Durchsuchbare Email-Archivierung mit Agorum core"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Die Ausgangssituation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Was Emails angeht, bin ich eher der J\u00e4ger und Sammler und l\u00f6sche eigentlich viel zu wenig, so dass sich mit der Zeit Unmengen an Mails ansammeln. Immerhin bin ich dabei relativ strukturiert, so dass ich gef\u00fchlte 10.000 Mails in ebenso gef\u00fchlten 498 Ordnern einsortiert habe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u00f6sche ich im Aufr\u00e4umwahn dann aber doch mal uralte Emails, so kann ich mir fast sicher sein, dass ich genau diese Mails zwei Tage sp\u00e4ter nochmal brauche. Ein echter Teufelskreis!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es muss also eine externe Archivierung her, um einerseits Thunderbird und den Imap-Server relativ schlank zu halten, andererseits aber auch auf die \u00e4ltesten Emails zugreifen zu k\u00f6nnen. Nat\u00fcrlich muss das Archiv Volltextsuche unterst\u00fctzen und ansonsten ohne manuelle Wartungsarbeiten einfach nur laufen.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\">Da ich ohnehin <a href=\"http:\/\/mein-dms.agorum.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Agorum&nbsp;core<\/a> als DMS einsetze und alle eingehenden Papierbriefe einscanne und dort ablege, liegt es nahe auch die Emails dort zu archivieren. F\u00fcr Agorum gibt es zwar den MailAdaptor als kostenpflichtiges Zusatzmodul, aber da ich nur die kostenlose Agorum core Open im Einsatz habe, muss ich mir da was eigenes basteln.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Grunds\u00e4tzliche \u00dcberlegungen<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>die Emails sollen automatisiert direkt vom Imap-Server aus archiviert werden ganz ohne mein lokales Thunderbird oder den manuellen Aufruf von irgendwelchen Skripten.<\/li><li>auch wenn eine Email auf dem Server gel\u00f6scht wird, soll sie im Archiv erhalten bleiben.<\/li><li>Es sollen nur ausgew\u00e4hlte Email-Ordner archiviert werden (Logfiles von vor 10 Jahren sind dann wirklich uninteressant, zumindest denke ich das bisher&#8230;.).<\/li><li>die IMAP-Ordnerstruktur soll auf Dateiebene abgebildet werden und jede Email soll eine eigene Datei innerhalb des entsprechenden Ordners sein.<\/li><li>Die Mails sollen als EML-Datei gespeichert werden, damit sie direkt aus Agorum core heraus mit einem Mausklick ge\u00f6ffnet werden k\u00f6nnen.<\/li><li>jede Email darf nat\u00fcrlich nur einmal im Archiv stehen, als Kriterium bietet sich daher an die Message-ID als Dateinamen zu verwenden.<\/li><li>rechtssichere Archivierung oder Audit-Funktionen spielen keine Rolle, da es sich um rein private Emails handelt.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Die Umsetzung<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Perl-Skript ruft die Mails aus ausgew\u00e4hlten Email-Ordnern vom Server ab und speichert sie auf dem gemappten DMS-Laufwerk von Agorum core. Das Skript hat im Bereich Error-Handling noch gewaltig Luft nach oben, aber ist f\u00fcr meine Zwecke ausreichend und bewusst ohne Perl-Magie geschrieben, so dass ich &#8211; hoffentlich &#8211; auch noch in 2 Jahren verstehe, was ich das eigentlich&nbsp; gemacht habe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ben\u00f6tigt werden die Module <code>IO::Socket::SSL<\/code> und <code>Mail::IMAPClien<\/code>t, welche sich per CPAN installieren lassen.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: perl; title: ; notranslate\" title=\"\">\n#!\/usr\/bin\/perl\n\nuse strict;\nuse warnings;\nuse IO::Socket::SSL;\nuse Mail::IMAPClient;\n\n# Dieses Programm verbindet sich mit dem Imap-Server mail.gluecksgriff-taschen.de und speichert\n# dort alle Mails in bestimmten Foldern in das Agorum-Laufwerk.\n\n# Wo sollen die Mails abgespeichert werden? (das gemappte DMS-Laufwerk von Agorum)\nmy $base_dir = &#039;\/nas\/email\/Schiffers\/Email\/Ralf\/&#039;;\n\n# Aus welchen Ordnern sollen Emails archiviert werden?\nmy @folder = qw( Aufbewahrung Bestellungen Booklooker Energie Garantie Sent PayPal Zugangsdaten );\n\n# Mit Server verbinden\nmy $imap = Mail::IMAPClient-&gt;new( User =&gt; &#039;ich@gluecksgriff-taschen.de&#039;,\n                                Password =&gt; &#039;supergheim&#039;,\n                                Socket =&gt; IO::Socket::SSL-&gt;new\n                                        ( Proto =&gt; &#039;tcp&#039;,\n                                          PeerAddr =&gt; &#039;mail.gluecksgriff-taschen.de&#039;,\n                                          PeerPort =&gt; 993)\n                        ) or die &quot;IMAP-Fehler: $@&quot;;\n\n# Eindeutige Uids per Imap-Session verwenden und Setzen des Seen-Flags ausschalten\n$imap-&gt;Uid(1);\n$imap-&gt;Peek(1);\n\n# Durch alle ausgewaehlten Email-Ordner gehen\n\nif ( $imap-&gt;IsAuthenticated() ) {\n        foreach (@folder) {\n                my $folder = $_;\n                $imap-&gt;select($folder) or die &quot;IMAP Select Error: $@\\n&quot;;\n                #\n                # Wenn es das Verzeichnis auf Dateiebene noch nicht gibt, dann anlegen\n                #\n                unless (-d &quot;$base_dir&quot;.&quot;$folder&quot;)  {\n                        mkdir &quot;$base_dir&quot;.&quot;$folder&quot; ;\n                }\n                #\n                # Alles Mails im aktuellen Email-Ordner auswaehlen\n                #\n                my @msgs = $imap-&gt;search(&#039;ALL&#039;);\n                foreach my $msg (@msgs) {\n                        #\n                        # Die Message-ID holen und diese als Dateiname zum Abspeichern verwenden\n                        # Wenn es keine Message-ID gibt, dann nicht abspeichern.\n                        #\n                        my $messageID = $imap-&gt;get_header($msg, &quot;Message-Id&quot;);\n                        if ( defined $messageID) {\n                                #\n                                # Das &lt; und &gt; am Anfang bzw. Ende der Message-ID abschneiden\n                                #\n                                $messageID =~ s\/^.\/\/;\n                                $messageID =~ s\/.$\/\/;\n                                #\n                                # Und noch ein .eml anhaengen, damit die Datei direkt mit Thunderbird geoeffnet werden kann\n                                #\n                                my $datei = &quot;$base_dir&quot;.&quot;$folder&quot;.&quot;\/&quot;.&quot;$messageID&quot;.&quot;\\.eml&quot;;\n                                #\n                                # Wenn es schon eine Datei mit diesem Namen gibt, dann nicht abspeichern.\n                                #\n                                unless (-f &quot;$datei&quot;) {\n                                        $imap-&gt;message_to_file ( $datei, $msg );\n                                }\n                        }\n                }\n                $imap-&gt;close;\n        }\n}\n$imap-&gt;logout;\n\nexit 0;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Dieses Skript rufe ich per Cron-Job alle zwei Stunden auf und schon wandern alle Emails brav in Agorum core.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Alle Emails doppelt und dreifach&#8230;WTF!<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die anf\u00e4ngliche Freude \u00fcber diese einfache Art der Archivierung verflog leider schnell, als ich feststellte, dass alle Emails x-fach in Agorum core vorhanden sind (bei jedem Aufruf des Skript kommt eine weitere Kopie der Email hinzu).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aber ich hatte doch extra die Message-ID als Filenamen verwendet, um genau so etwas zu verhinden. In Agorum kommt aber nicht etwa die Message-ID als Dateiname an, sondern die Message-ID mit einer anschlie\u00dfenden Zahl (wo auch immer die herkommen mag), aus der beabsichtigten Datei msg111@gluecksgriff-taschen.de.eml wird also in Agorum core eine Datei namens msg111@gluecksgriff-taschen.de_1117722.eml.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aber wer benennt die Datei denn nun um? Mein Skript, Agorum core, das Perl-Modul&nbsp;Mail::IMAPClient oder ist doch schwarze Magie am Werk?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Schreibe ich die Dateien nicht in das Agorum-Laufwerk, sondern in ein normales Verzeichnis, tritt dieser seltsame Effekt der Umbenennung nicht auf, das Skript an sich scheint also ok zu sein und die Namens\u00e4nderung wird von Agorum core durchgef\u00fchrt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Agorum core Konfiguration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In Agorum core kann man definieren was mit bestimmten Dateitypen passieren soll, wenn diese auf das DMS-Laufwerk kopiert werden. Und f\u00fcr die Dateiendung eml ist &#8211; welch Wunder &#8211; eingestellt, dass der Dateiname mit der interen Dokumentennummer von Agorum code erg\u00e4nzt werden soll. Warum das die Default-Einstellung ist, erschlie\u00dft sich mir nicht, aber vielleicht ist das in Zusammenhang mit dem mir unbekannten kommerziellen MailAdaptor-Modul sinnvoll.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jedenfalls kann man gl\u00fccklicherweise die Umbenennung von eml-Dateien ausschalten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hierzu geht man in die MetaDB und navigiert zu <code>MAIN_MODULE_MANAGEMENT \/ roi \/ control \/ contenttask \/ EML<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Unter dem Eintrag NewName sieht man dann die Ursache des \u00dcbels und nach einer \u00c4nderung auf&nbsp;${OriginalName}.${Extension} ist das Mysterium gel\u00f6st und auch eml-Dateien behalten nun den ihnen zugedachten Dateinamen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Den Eintrag DeleteFileAfterTask setze ich sicherheitshalber noch explizit auf false, man wei\u00df ja nie.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/www.gluecksgriff-taschen.de\/wp-content\/uploads\/2018\/01\/agorum_metadb_eml.png\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"819\" src=\"https:\/\/www.gluecksgriff-taschen.de\/wp-content\/uploads\/2018\/01\/agorum_metadb_eml-1024x819.png\" alt=\"Umbenennen von EML-Dateien in Agorum Core ausschalten\" class=\"wp-image-248\" srcset=\"https:\/\/www.gluecksgriff-taschen.de\/wp-content\/uploads\/2018\/01\/agorum_metadb_eml-1024x819.png 1024w, https:\/\/www.gluecksgriff-taschen.de\/wp-content\/uploads\/2018\/01\/agorum_metadb_eml-300x240.png 300w, https:\/\/www.gluecksgriff-taschen.de\/wp-content\/uploads\/2018\/01\/agorum_metadb_eml-768x614.png 768w, https:\/\/www.gluecksgriff-taschen.de\/wp-content\/uploads\/2018\/01\/agorum_metadb_eml-200x160.png 200w, https:\/\/www.gluecksgriff-taschen.de\/wp-content\/uploads\/2018\/01\/agorum_metadb_eml-750x600.png 750w, https:\/\/www.gluecksgriff-taschen.de\/wp-content\/uploads\/2018\/01\/agorum_metadb_eml-1250x1000.png 1250w, https:\/\/www.gluecksgriff-taschen.de\/wp-content\/uploads\/2018\/01\/agorum_metadb_eml.png 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption><a href=\"https:\/\/www.gluecksgriff-taschen.de\/wp-content\/uploads\/2018\/01\/agorum_metadb_eml.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-248 size-large\" src=\"https:\/\/www.gluecksgriff-taschen.de\/wp-content\/uploads\/2018\/01\/agorum_metadb_eml-1024x819.png\" alt=\"Umbenennen von EML-Dateien in Agorum Core ausschalten\" width=\"525\" height=\"420\" srcset=\"https:\/\/www.gluecksgriff-taschen.de\/wp-content\/uploads\/2018\/01\/agorum_metadb_eml-1024x819.png 1024w, https:\/\/www.gluecksgriff-taschen.de\/wp-content\/uploads\/2018\/01\/agorum_metadb_eml-300x240.png 300w, https:\/\/www.gluecksgriff-taschen.de\/wp-content\/uploads\/2018\/01\/agorum_metadb_eml-768x614.png 768w, https:\/\/www.gluecksgriff-taschen.de\/wp-content\/uploads\/2018\/01\/agorum_metadb_eml-200x160.png 200w, https:\/\/www.gluecksgriff-taschen.de\/wp-content\/uploads\/2018\/01\/agorum_metadb_eml-750x600.png 750w, https:\/\/www.gluecksgriff-taschen.de\/wp-content\/uploads\/2018\/01\/agorum_metadb_eml-1250x1000.png 1250w, https:\/\/www.gluecksgriff-taschen.de\/wp-content\/uploads\/2018\/01\/agorum_metadb_eml.png 1280w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><\/a> Umbenennung von EML-Dateien ist nun ausgeschaltet.<\/figcaption><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Emails werden nun wunderbar archiviert, Agorum core findet wie gewohnt jeden Suchbegriff und ich habe keine Ausrede mehr endlich mal Ordnung ins Email-Chaos zu bringen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Auf das Archivieren des Inbox-Ordners verzichte ich bewusst, da die interessanten Emails ohnehin manuell oder per sieve in die passenden Email-Ordner geschoben werden und dann dort archiviert werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Ausgangssituation Was Emails angeht, bin ich eher der J\u00e4ger und Sammler und l\u00f6sche eigentlich viel zu wenig, so dass sich mit der Zeit Unmengen an Mails ansammeln. Immerhin bin ich dabei relativ strukturiert, so dass ich gef\u00fchlte 10.000 Mails in ebenso gef\u00fchlten 498 Ordnern einsortiert habe. L\u00f6sche ich im Aufr\u00e4umwahn dann aber doch mal &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/www.gluecksgriff-taschen.de\/?p=231\"> <span class=\"screen-reader-text\">Durchsuchbare Email-Archivierung mit Agorum core<\/span> Weiterlesen &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"default","ast-global-header-display":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","footnotes":""},"categories":[3],"tags":[36,35,34],"class_list":["post-231","post","type-post","status-publish","format-standard","hentry","category-linux","tag-agorum","tag-archiv","tag-email"],"_links":{"self":[{"href":"https:\/\/www.gluecksgriff-taschen.de\/index.php?rest_route=\/wp\/v2\/posts\/231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gluecksgriff-taschen.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gluecksgriff-taschen.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gluecksgriff-taschen.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gluecksgriff-taschen.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=231"}],"version-history":[{"count":30,"href":"https:\/\/www.gluecksgriff-taschen.de\/index.php?rest_route=\/wp\/v2\/posts\/231\/revisions"}],"predecessor-version":[{"id":836,"href":"https:\/\/www.gluecksgriff-taschen.de\/index.php?rest_route=\/wp\/v2\/posts\/231\/revisions\/836"}],"wp:attachment":[{"href":"https:\/\/www.gluecksgriff-taschen.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gluecksgriff-taschen.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gluecksgriff-taschen.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}