Hi Ich erhalte von einem WEbdienst stündlich eine Email mit aktuellen Daten. Die EMails sind größtenteils identisch aufgebaut und haben Felder wie: Ort, Zeit, Objekt, Betrag usw. Ich möchte die Daten der Emails automatisch auswerten und die verschiedenen Angaben in eine Datenbank füllen. Gibt es hierfür geeignete Software?
SleepWalker schrieb: > Ich erhalte von einem WEbdienst stündlich eine Email mit aktuellen > Daten. Die EMails sind größtenteils identisch aufgebaut und haben Felder > wie: Ort, Zeit, Objekt, Betrag usw. > > Ich möchte die Daten der Emails automatisch auswerten und die > verschiedenen Angaben in eine Datenbank füllen. Gibt es hierfür > geeignete Software? Die gute Neuigkeit ist: ja, es gibt solche Software. Die schlechte ist: Software dieser Art nennt man "Programmiersprachen". Okay, ich verstehe, die Antwort war zwar korrekt, aber irgendwie auch total blöd. Deswegen versuche ich mich mal an einer besseren Antwort. Also, ich weiß natürlich nichts über Deine Systemumgebung, aber zum Beispiel ein Linux oder ein anderes unixoides System dazu zu bewegen, empfangene E-Mails (fetchmail?) an ein eigenes Skript oder Programm zu übergeben. Wie das unter Windows ist, könnten womöglich andere Teilnehmer dieses Forums beitragen. So ein Skript ist im Grunde aber auch kein Hexenwerk und keine Raketenwissenschaft; in diesem Forum gibt es aber viele ausgesprochen fähige Entwickler, die Dir sicher gerne behilflich sind. (Okay, die Motzköpfe gibt es auch, Tipp: ignorieren.) Mein Problem sind, um das mal ganz grundsätzlich zu sagen, die Informationen, oder vielmehr: deren Fehlen. Soll das unter Windows, MacOS oder Linux laufen? Wie soll das laufen: kommod nacheinander oder so maximal schnell, daß andere Programme sich träge anfühlen? Was ist das für ein Date(i|n)format? Wie schnell soll das verarbeitet werden? Magst Du interaktive Diagramme? Du kannst -- und es ist Deine Wahl, nicht meine -- in die wunderbare Welt der Softwareentwicklung eintreten. Womit Du das machst, ist kein Thema: Python, Perl/Rake, Ruby, sprachen-technisch tun die sich alles nichts. Python hätte Parser für E-Mails, CSV viele andere aber schon standardmäßig dabei. Du siehst, es ist schwierig, Dir eine korrekte und sinnvolle Antwort zu geben. Ist es möglich, daß Du etwas... ausführlicher wirst?
Wenn der TO Outlook benutzt, könnte er es in VBA programmieren. Die unpräzise Frage des TO lässt allerdings vermuten, dass keinerlei Programmiererfahrung vorhanden ist. Dann ist es leider schwierig bis unmöglich, es über das Forum zu lösen.
SleepWalker schrieb: > verschiedenen Angaben in eine Datenbank füllen. Gibt es hierfür > geeignete Software? Zwei Hände, eine Tastatur und eine x-beliebige Programmiersprache.
SleepWalker schrieb: > Ich möchte die Daten der Emails automatisch auswerten und die > verschiedenen Angaben in eine Datenbank füllen. Es gab mal Software, um gedruckte Listen in eine EDV-Buchhaltung einzulesen, aber die ist glaube ich ausgestorben, weil das keiner mehr braucht. Und ausserdem war das ziemlich teure professionelle Software. Entweder selbst programmieren lernen oder jemand suchen der das für einen Kasten Bier oder so macht. Müsste es hier im Forum geben. Georg
Nur_ein_typ schrieb: > Du kannst -- und es ist Deine Wahl, nicht meine -- in die wunderbare > Welt der Softwareentwicklung eintreten. Womit Du das machst, ist kein > Thema: Python, Perl/Rake, Ruby, sprachen-technisch tun die sich alles > nichts. Python hätte Parser für E-Mails, CSV viele andere aber schon > standardmäßig dabei. Ich würde mich an AWK versuchen. Bei unixoiden OS ist es dabei, bei Windows kann man es nachrüsten. Kuck da: https://www.gnu.org/software/gawk/
Jester schrieb: > Nur_ein_typ schrieb: >> Du kannst -- und es ist Deine Wahl, nicht meine -- in die wunderbare >> Welt der Softwareentwicklung eintreten. Womit Du das machst, ist kein >> Thema: Python, Perl/Rake, Ruby, sprachen-technisch tun die sich alles >> nichts. Python hätte Parser für E-Mails, CSV viele andere aber schon >> standardmäßig dabei. > > Ich würde mich an AWK versuchen. Bei unixoiden OS ist es dabei, bei > Windows kann man es nachrüsten. > > Kuck da: https://www.gnu.org/software/gawk/ Die verschiedenen Varianten von awk(1) sind mächtige Werkzeuge, aber letztlich liefe das hier auch auf eine Art von Programmierung hinaus -- und im hier vorliegenden Anwendungsfall würde ich, wenn ich schon alles selbst schreiben wollte, vermutlich eher in Richtung Perl gehen, das ja als mächtigerer Ersatz für die damals üblichen Shellwerkzeuge wie awk(1), sed(1), grep(1) und Co. gedacht war. Und natürlich gibt es auch für Perl ein paar passende, dort allerdings externe Werkzeuge zum Parsen von E-Mails, so daß man auch in Perl nicht alles selbst machen müßte... Aber warum sollte jemand, der bei klarem Verstand ist, so etwas tun und eine Version von awk(1) oder Perl benutzen? Die Wahl einer modernen, typsicheren Skriptsprache, welche obendrein als besonders leicht zu erlernen gilt und obendrein schon fertige Module zum Parsen von E-Mails und verschiedenen anderen Datenformaten (JSON, YAML, XML, ...) bereits in der Standarddistribution an Bord hat, liegt da IMHO deutlich näher. Es sei denn, man wäre aus nostalgischen Gründen daran interessiert, sich in eher... klassische Methoden aus dem UNIX-Umfeld einzuarbeiten. ;-) Was sonst würde Deiner Ansicht nach für [go]?awk(1) und gegen Python sprechen, vor allem, auch wenn man beides noch nicht kann und sich zunächst einarbeiten muß?
Da müßte mal zuerst geklärt werden, wie die Mails erhalten werden. SleepWalker schreibt da was von "stündlich". Ich glaube kaum, daß er da stündlich die Mails checkt. Oder macht er das einmal am Tag und dann alle 24 Mails hintereinander ? Außerdem wäre es dann hilfreich, wenn ein Mailprogramm schon vorab nach Absender entsprechend filtern und automatisch abspeichern kann. Es kommen ja noch viel mehr Mails, als die vom besagten WEB-Dienst an. Das wäre da zuerst einmal vorab zu klären. Umsonst hat dér das "stündlich" wohl nicht oben geschrieben. Wenn das schon automatisiert werden sollte, stellt sich schon die Frage, ob man einen PC permanent laufen läßt oder es besser wäre, einen Rasperry Pi oder ein Smartphone zu nehmen. So ein Smartphone z.B. haben ja viele permanent (Tag und Nacht) an. In JAVA geht z.B. so ein Service oder Dienst fürs Phone. Zumindest mal für anrufende Telefonnummern. Denke, daß es sowas für ankommende Mails auch gibt. Da kenne ich mich aber leider nicht so aus. Das habe ich nur bei B4X.com mal gesehen. Aber warten wir mal ab, was SleepWalker eigentlich genau will.
Heinz B. schrieb: > Da müßte mal zuerst geklärt werden, wie die Mails erhalten werden. Soweit ich sehe, lädt der TO die Mails per POP3 oder IMAP von einem Webmail-Anbieter herunter. > SleepWalker schreibt da was von "stündlich". Ich glaube kaum, daß er > da stündlich die Mails checkt. Oder macht er das einmal am Tag > und dann alle 24 Mails hintereinander ? Außerdem wäre es dann > hilfreich, wenn ein Mailprogramm schon vorab nach Absender entsprechend > filtern und automatisch abspeichern kann. Es kommen ja noch viel > mehr Mails, als die vom besagten WEB-Dienst an. Das ist zwar möglich, aber das wissen wir ja alles (noch?) nicht. > Wenn das schon automatisiert werden sollte, stellt sich schon die > Frage, ob man einen PC permanent laufen läßt oder es besser wäre, > einen Rasperry Pi oder ein Smartphone zu nehmen. Nunja, etwas Linux-basiertes wie ein RasPi würde sich da schon anbieten. Die Mails ließen sich problemlos via fetchmail(1) abrufen und dann mit einem passenden Eintrag in /etc/aliases (nach Änderungen den Aufruf newaliases(1) nicht vergessen!) der Form
1 | <localpart>: | <path to script> |
also zum Beispiel
1 | datacollector: | /usr/local/bin/mail_to_database.py |
ganz einfach an das entsprechende Skript übergeben, das unterstützen alle mir erinnerlichen Local Delivery Agents. Ähnliches ginge übrigens auch über eine .forward (dot forward) Datei im Homeverzeichnis des Benutzers <localpart>, für dieses Beispiel also /home/datacollector/.forward. Wenn eine E-Mail für den angegebenen localpart ankommt, wird sie mit allen Headern etc. über STDIN an das angegebene Skript übergeben. Wenn dieses Skript ein Python-Skript ist, kann es die E-Mail dann mit der Methode parse() der Klasse Parser aus dem Standardmodul email.parser direkt von sys.stdin lesen, und in eine email.message.Message parsen:
1 | #!/usr/bin/env python3
|
2 | import sys |
3 | from email.parser import Parser |
4 | |
5 | if __name__ == '__main__': |
6 | message = Parser().parse(sys.stdin) |
Diese email.message.Message (in meinem Beispiel "message") bietet Zugriff auf die Header, Inhalte und Attachments der E-Mail, die dann weiterverarbeitet werden können. Für die meisten dieser Inhaltstypen gibt es auch bereits fertige Parser, einige -- wie csv, json und xml -- bereits als Standardmodule mit der Python-Distribution geliefert, andere wie BeautifulSoup oder PyYAML aus ganz schnell und einfach nachinstallierbar. Wem das zuvor beschriebene zu viel Aufwand oder zu... "verteilt" auf verschiedene Dateien und Konfigurationen ist, kann die Mails vom Anbieter womöglich mit Scrapy via HTTP herunterladen und parsen, oder für POP3 oder IMAP4 natürlich die fertigen Standardmodule poplib oder imaplib benutzen und das Skript über Cron oder einen systemd-Timer periodisch starten.
Ein T. schrieb: > Womit Du das machst, ist kein >>> Thema: Python, Perl/Rake, Ruby, sprachen-technisch tun die sich alles >>> nichts. Python hätte Parser für E-Mails, CSV viele andere aber schon >>> standardmäßig dabei. >> >> Ich würde mich an AWK versuchen. Bei unixoiden OS ist es dabei, bei >> Windows kann man es nachrüsten. Ich denke, eine weiterführende Antwort hat sich erledigt: SleepWalker scheint nicht wirklich um eine Lösung bemüht. Und wenn ich ehrlich bin, war mir das von Anfang an schon klar ... Bei meiner Erstantwort lag die Betonung auf "Ich", mit Zweitbetonung auf "unixoid". Gawk deshalb, weil ich es schon vielfach eingesetzt hatte, etwas anspruchsvollere Funktionalität (auch ohne große Installationsorgie) auf fremden Win-Dosen benutzen zu können. Dein Ein- und Ansatz (mit raspi) in Ehren, aber traust du dir wirklich zu, dies fernschriftlich oder auch -mündlich -- denn selbst kann es der TO ja offensichtlich nicht -- im dessen EDV-Umfeld zum Laufen zu bringen?
Ich habe es nicht ausprobiert, aber würde node-red nehmen. - Plugin für Email - Plugin für die DB Das dazwischen bekommt man auch ohne Programmiererfahrung ganz gut hin.
Jester schrieb: > Ich denke, eine weiterführende Antwort hat sich erledigt: SleepWalker > scheint nicht wirklich um eine Lösung bemüht. Und wenn ich ehrlich bin, > war mir das von Anfang an schon klar ... Mir war das nicht so klar -- aber am Ende ist das IMHO auch egal. Denn irgendwann kommt einer mit einer ähnlichen Frage und liest die Antwort dann in diesem Thread, und dem hilfts dann womöglich... > Bei meiner Erstantwort lag die Betonung auf "Ich", mit Zweitbetonung auf > "unixoid". Gawk deshalb, weil ich es schon vielfach eingesetzt hatte, > etwas anspruchsvollere Funktionalität (auch ohne große > Installationsorgie) auf fremden Win-Dosen benutzen zu können. Wie gesagt, [go]awk(1) ist sehr leistungsfähig, allerdings... der Code ist IMHO etwa so übersichtlich und wartbar wie Perl. Bitte, versteh' mich nicht falsch: Perl war über 13 Jahre lang meine primäre Skriptsprache, und ich kann damit tatsächlich auch les- und wartbaren Code schreiben, aber das braucht viel Disziplin und Erfahrung -- und in den awk(1)-Dialekten, die ich kenne, ist das sogar noch schlimmer. Deshalb habe ich awk(1) schon vor Ewigkeiten durch Perl abgelöst, und dieses wiederum vor ungefähr 12 Jahren durch Python. Da ist es genau andersherum: ich brauche meine Disziplin und Erfahrung, wenn ich unlesbaren Code schreiben möchte. Und, naja, egal ob awk(1) oder Perl oder auch Ruby -- Reguläre Ausdrücke sind eben leider immer ein Alptraum, was ihre Les- und Wartbarkeit angeht. Zudem, wie gesagt, liefert Python all das, was Du in [go]awk(1) manuell schreiben, debuggen, und ggf. pflegen und warten mußt, bereits fertig mit. Die oben genannten Module zum Parsen von E-Mails, CSV, JSON etc. sind hingegen schon fertig, vielfach genutzt, getestet und produktionsstabil in der Standarddistribution vorhanden, und können zum Beispiel auch MIME-Attachments sauber händeln. Du siehst ja oben an den paar Zeilen Code, wie einfach das ist: im Prinzip sind das ja nur zwei Importe und eine Zeile "richtiger" Code, schon hat man ein fertiges, geparstes Nachricht-Objekt und kann die Header, Inhalte und Attachments daraus lesen -- oder die E-Mail auch manipulieren, wenn man das möchte, alles ohne eine einzige Regular Expression, in gut strukturiertem, les- und wartbaren Code, performant, stabil... > Dein Ein- und Ansatz (mit raspi) in Ehren, aber traust du dir wirklich > zu, dies fernschriftlich oder auch -mündlich -- denn selbst kann es der > TO ja offensichtlich nicht -- im dessen EDV-Umfeld zum Laufen zu > bringen? Ich kenne die Infrastruktur des TO nicht, aber Python läuft so ziemlich überall -- auch auf dem vom TO erwähnten Windows, für das es sogar mehrere Python-Interpreter und -Distributionen gibt. Der Trick mit Fetchmail und /etc/aliases muß ja nicht sein, selbstverständlich enthalten alle Standarddistributionen von Python nicht nur die von mir verwendeten Module sys und email, sondern auch Libraries für POP3, IMAP und SMTP, ganz nach Pythons Motto "Batteries Included". Man kann also mein kleines "Skript" auch so umschreiben, daß es selbst die Mails abruft, und gegebenenfalls auch gleich den Scheduler (mit dem Standardmodul "sched") beinhaltet, damit wären dann fetchmail und Cron oder der systemd-Timer aus dem Spiel und das Programm läßt sich unter Windows (mit was auch immer Windows dafür vorsieht) als Daemon (sicher gibt es dafür unter Windows einen eigenen Namen, "Dienst"?) starten. Ich... glaube auch, daß das Parsen von E-Mails nicht ganz einfach ist, denn dabei geht es schließlich um eine kontext-sensitive Grammatik, die wissen muß: bin ich gerade in den Headern, im Body oder in einem Attachment? Ich denke, daß das mit [go]awk(1) nicht ganz einfach abzubilden ist. Aber im Endeffekt kommt es sicher darauf an, was der Betreffende bereits kann: wer fit ist in RegEx und eventuell sogar schon in [go]awk(1), der ist damit womöglich ganz gut bedient, aber ohne Vorkenntnisse ist vermutlich eine Lösung sinnvoller, die bereits möglichst viel benötigte Funktionalität fertig an Bord hat.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.