Emailsammeldienst

Du hast eine Idee für ein Projekt?
Antworten
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Ich habe vor in naher zukunft ein POP3-Sammeldient zu schreiben, der seinerseits Emailnachrichten wieder per POP3 anbietet. Dazu müssen die Nachrichten zwischengespeichert werden. Da ich später vielleicht noch IMAP4 draufsetzen will, hab ich vor das ganze leicht erweiterbar zu halten. Dementsprechend will ich die Daten in einer XML-Datei speichern, die dann vielleicht so aussieht:

Code: Alles auswählen

<mailfile>
<user>milan</user>
<mailbox name="Inbox">
  <mail>hier kommt der ganze Emailquelltext rein</mail>
  <mail>und nochmal...</mail>
</mailbox>
<mailbox name="sent"></mailbox>
</mailfile>
Nun macht mir ein Problem sorgen: ich komm einfach nicht drauf wie ich Sicherstellen kann, dass nun keines der verwendeten Tag in der Email vorkommt und eventuell Chaos hervorruft. Ich möchte auch nicht einfach alle Tag, die mit "<" beginnen escapen müssen, da diese ja wieder zurückverwandelt werden müssen. Dabei kann es ja vorkommen, dass die verwendete Escapesequenz bereits in der Email vorkam und nun beim unquoten selbst umgeändert wird.
Eine andere Idee von mir war eine zufällige Escapesequenz nehmen und diese dann als Attribut im <mail>-Tag zu notieren. Aber auch das kommt mir irgendwie nicht so gut vor.
Gibt es noch andere praxistaugliche Lösungen, die eventuell sogar das Problem erst beim parsen selber lösen? Denn ich werd ja nicht darum kommen einen Parser zu schreiben, nur soll der zwecks Erweiterbarkeit ja auch nicht zu komplex werden.

thx, Milan
Zuletzt geändert von Milan am Donnerstag 15. Juli 2004, 15:36, insgesamt 2-mal geändert.
Gast

Milan hat geschrieben:Dabei kann es ja vorkommen, dass die verwendete Escapesequenz bereits in der Email vorkam und nun beim unquoten selbst umgeändert wird.

Nein, das kann nicht passieren (dann wäre XML ein Treppenwitz :wink:), denn "&" wirtd ja auch 'escaped'. Aus "&nbsp;" in der Email wird dann "&nbsp;" und die Rückwandlung ist dann eindeutig. xml.sax.saxutils.escape und .unescape kennst Du? Ansonsten kannst Du die Email natürlich auch als CDATA ablegen. dann sparst Du dir das escapen.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Anonymous hat geschrieben:... xml.sax.saxutils.escape und .unescape kennst Du? ...
HI. Jetzt ja :lol: . War mir schon klar, dass es auf was einfaches hinauslaufen wird, aber wenn man noch keine ausreichenden Grundkenntnisse hat stolpert man nicht von selbst drüber :wink: Danke.
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

machst du das ganze Multiuser fähig?

dann wäre ich daran interessiert :)

helfen könnt ich auch ein wenig, falls du hilfe willst/brauchst

aber warum willst du die emails eigentlich in xml-dateien speichern?
kannst ja einfach einen Ordner erstellen "Inbox" und da die Emails drin speichern. Oder was spricht dagegen?

gruss
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Ja, das ganze soll Multiuserfähig werden und läuft (hoffentlich) bald bei SF. Ich will das ganze in XML-Dateien spreichern, weil die sich meiner Meinung nach leichter managen lassen, denn hier kann man ja völlig eigene Strukturen festlegen. Ich hab auch erst überlegt das ganze in Verzeichnisse zu packen, aber als ich damals mein Forum programmiert hab, hab ich damit nicht allzugute Erfahrungen gemacht. Es ist einfach zu wenig flexibel, wenn man es erweitern will. Darauf leg ich nämlich diesmal großen Wert, falls später weitere Komponenten hinzugefügt werden sollen. Ansonsten wäre ich über Hilfe sehr erfreut. Besonders im Bezug zu IMAP hab ich noch nicht allzuviele Erfahrungen, deswegen will ich ersteinmal nur POP3 realisieren und dann erweitern :wink: .
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

also von imap hab ich auch keine Ahnung
aber das ist ja auch nur ein Protokoll wie jedes Andere :)

Gut wenn das ganze einfach per CDATA ins xml geschrieben wird ists auch ok, aber wie sieht es mit der performance von sax aus bei sehr grossen xml-files?

du könntest natürlich auch die emails in files speichern (filename = irgendeine eindeutige id) und im xml nur die id, so wäre die dateigrösse auch nichtüberwältigend

gruss
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi Milan,

ich würde das Speichern und Laden der Mails ganz als eigenes Modul machen, dann kannst Du auch mal statt mit xml mit einer Datenbank arbeiten und brauchst nur das eine Modul auszutauschen.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Jo denke ich auch

Aber ich hab nur ein wenig bedenken wegen grossen xml-files

gruss
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hmm... vermutlich habt ihr recht. Aber so ähnlich hab ich das eh geplant gehabt. Ich will zwei Klassen Mailbox und Email aufbauen, die ihrerseits nach Python alle Daten beinhalten und bearbeitet werden können, sich aber auch um ihre eigene Speicherung kümmern müssen. Angebracht wäre also, Basisklassen mit den Schnittstellen für das Progamm zu definieren und danach je nach Bedarf Ableitungen zu bilden, die die Speicherung übernehmen... Dabei fand ich den Vorschlag mit den ID's nicht schlecht, denn XML würde ich trotzdem gerne weiter verweden. So ließe sich auch die Performance optimieren, wenn jeweils noch gespeichert würde, wie groß eine Email ist etc... denn auf solche Daten greift dann der Sever einfach nur schnell zurück, anstatt sie neu zu berechnen. Erst wenn die Mail fällig wird, kann diese aus der Versenkung geholt werden.
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Jo es kann ja auch noch ausgelesen werden von wem an wen das mail geht usw.
Vielleicht noch die ersten x bytes der msg, weil pop3 ein top befehl kennt der nur einen teil der nachricht überträgt

wie generiert man solche ids? einfach fortlaufend?
man könnte auch die md5 checksumme berechnen und als dateiname verwenden :)


ach ja ich kenn die performance von grossen xml-files nicht!
ich hab nur sorgen, vielleicht ist sie ja trotzdem ganz gut

gruss


*edit* blitzidee: ein spamfilter basierend auf adressbuch check könnte man einbauen (also wenn ein absender im adressbuch steht ok sonst in einen 2. ordner packen (nur IMAP) bei pop3 headerinformation hinzufügen damit mailclient sie sortieren kann) die mail adressen könnte man über webinterface verwalten (wie auch das ganze system - accounts,...)

eigentlich könnte man auch ein webmailsystem aufbauen (aber ohne apache, nur eigener server :D) wäre aber dann am eigentlich projekt vorbei geschossen

ist mir grad so eingefallen, nicht darüber nachgedacht, eben ne blitzidee :)
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

rayo hat geschrieben:Vielleicht noch die ersten x bytes der msg, weil pop3 ein top befehl kennt der nur einen teil der nachricht überträgt
Hi. Immer mit der Ruhe. "TOP" ist ein optionaler und kein Standartbefehl, siehe dazu hier. Darüber macht man sich normalerweise dann Gedanken, wenn soweit ist. Das bin ich aber noch nicht, da der Rest ja auch gemeistert werden muss...
rayo hat geschrieben:wie generiert man solche ids? einfach fortlaufend?
so würde ich das jedenfalls machen.
rayo hat geschrieben:ich ja ich kenn die performance von grossen xml-files nicht! ich hab nur sorgen, vielleicht ist sie ja trotzdem ganz gut
das kommt dann auf den Parser drauf an. Momentan wollte ich eigentlich SAX nehmen, hab damit aber noch keine großen Erfahrungen. Da werd ich mir aber schon noch was überlegen.
rayo hat geschrieben:*edit* blitzidee: ein spamfilter basierend auf adressbuch check könnte man einbauen (also wenn ein absender im adressbuch steht ok sonst in einen 2. ordner packen (nur IMAP) bei pop3 headerinformation hinzufügen damit mailclient sie sortieren kann) die mail adressen könnte man über webinterface verwalten (wie auch das ganze system - accounts,...) ist mir grad so eingefallen, nicht darüber nachgedacht, eben ne blitzidee :)
Jaja, schon ganz schön viel :wink: Nur das übersteigt momentan wirklich meine Ziele und leider auch meine Zeit :roll: :oops: . Ich hatte vor für beides (Spamfilter, Webinterface) Schnittstellen zu legen (eben die Module zum auslesen der Emaildaten kann ein Interface verwenden; bzw beim abrufen kann über die Email eine Funktion aus einem später zu erweiternden dummy-Modul gelaufen lassen werden), aber ich denke ich hab da ersteinmal genug zu tun, das obige umzusetzen. Da hier nun schon einigermaßen konkrete Strukturen diskutiert werden, verschieb ich den Thread mal nach Ideen, da ist er denke ich mal besser aufgehoben.
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

klar ist es sau viel aber das wäre alles möglich :)

aber die grundidee gefällt mir auch

also nochmal zur Grundidee:
Multiuser fähig
<n> Accounts pro User (Pop3 später vielleicht IMAP)
pro user gibts einen pop3 (später vielleicht imap) account zum mails abrufen

config + daten werden in xml-files gespeichert
mails in einem ordner mit IDs als Dateiname

ist das so alles oder planst du noch mehr?


gruss
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. du hast es erfasst. Das mit dem speichern werd ich zwar versuchen so umsetzen, wie du sagst, aber auf Dookies Hinweis offen lassen. Geplant sind außerdem die oben angesprochenen Schnittstellen für später und falls ich noch Lust habe soll die Schnittstelle für Anti-Spam erweitert werden, sodass man Filtereregeln für Emails aufstellen kann. Liegt ja schließlich nahe beisammen. :wink:
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Äh, Frage: kennst du http://freshmeat.net/projects/getmail/?

mfg, querdenker
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Nö, bis eben nicht... aber danke für den Tipp, dann brauch ich ja nur noch den Server zur weiteren Verteilung aufzusetzen :wink: ... der steht nämlich zur Hälfte, aber dann konnte ich mich nicht aufraffen die Useracct-Verwaltung reinzubauen...

thx, Milan
Antworten