E-Mails richtig speichern

  • VB.NET
  • .NET 5–6

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von siycah.

    E-Mails richtig speichern

    Hallo zusammen,

    ich brauche mal euren Input. Ich programmiere gerade an einer Art CRM/Intranet/Ticketsystem...also eine Mischung aus mehreren Dingen.

    Ein Teil dabei wird sein, dass eingehende E-Mails automatisch verarbeitet werden. Ich bin eigentlich auch schon relativ weit, allerdings bin ich mir nicht sicher ob ich den richtigen Ansatz gewählt habe, die E-Mails richtig zu speichern. Generell funktioniert das Programm so, dass es einen Server-Dienst und Client-Anwendungen gibt. Der Server checkt automatisch nach Mails in einem Postfach. Sobald eine neue Mail reinkommt, wird diese auf der Festplatte gespeichert. Alles andere, was sich die Clients anschauen können, liefert der Server aus einer SQL-Datenbank. Ich weiß nicht, ob es schlau ist, die E-Mails auch in einer SQL-Datenbank zu speichern. Nur bin ich mir nicht sicher, wie ich das richtig mache. Ich habe es mit serialisieren probiert, aber das wirkte für mich unnötig kompliziert. Allerdings weiß ich auch nicht, ob ich die gespeicherte E-Mail auf der Festplatte einfach in die Clients senden soll.

    Wie würdet ihr damit umgehen? Wie kann der Server eine gespeicherte E-Mail am besten auf Anfrage den Clients übermitteln. Auf dem Client soll die E-Mail nur angezeigt werden. Inklusive Zugriff auf Bilder und Anhänge, die in der E-Mail enthalten sein könnten. Welcher Ansatz macht hier aus eurer Sicht am meisten Sinn?

    Freu mich auf eure Antworten.

    blindspectator85 schrieb:

    Sobald eine neue Mail reinkommt, wird diese auf der Festplatte gespeichert. Alles andere, was sich die Clients anschauen können, liefert der Server aus einer SQL-Datenbank.
    Wieso auf der Festplatte?
    Wenn ansonsten alles, was der Server ausliefert, aus der Datenbank kommt, wieso sollen dann ausgerechnet Emails von der Festplatte gesucht werden?
    Also mir fehlen hier grundsätzlich Informationen. Läuft diese Anwendung als Client auf den Rechnern deiner Kunden, oder ist es ein Web-Dienst?
    Wie ist die Applikationsstruktur aufgebaut?

    blindspectator85 schrieb:

    Ich weiß nicht, ob es schlau ist, die E-Mails auch in einer SQL-Datenbank zu speichern

    Nur, wenn du wirklich das MIME parsen, auseinanderreißen und zerpflückt ablegen willst, was IMO nicht unbedingt Sinn macht.

    Sinnvoller wäre es, die Dokumente stumpf zum JSON zu serialisieren und dann in eine dokumenten-basiertes System zu speichern, wie ElasticSearch oder MongoDB.
    Elasticsearch hätte hier sogar den Vorteil, dass es eine Volltextsuche auf Basis von Apache Lucene implementiert.

    blindspectator85 schrieb:

    Ich habe es mit serialisieren probiert, aber das wirkte für mich unnötig kompliziert.

    Was willst'n du da noch serialisieren? Ins JSON-Format? Serialisiert ist es nämlich schon, nämlich als MIME Msg.
    Ins JSON-Format bringen ist easy. Wahlweise machst du noch einen Zwischenschritt und kopierst die Daten einfach um. Danach ist es doch nur ​JsonConvert.SerializeObject(myMimeMessage);.

    Von kompliziert kann hier nicht die Rede sein, IMO.

    blindspectator85 schrieb:

    Allerdings weiß ich auch nicht, ob ich die gespeicherte E-Mail auf der Festplatte einfach in die Clients senden soll.

    Grundsätzlich gilt: sende nur und ausschließlich Daten, die der Client auch verwenden kann/soll. Alles andere ist verschwendete Bandbreite, völlig egal ob im Inter- oder Intranet.

    Wenn du eine Server/Client-Infrastruktur aufgebaut hast, dann wird da irgendwo eine API zwischensitzen; vermutlich sogar eine REST-API. Bastel dir dein eigenes Objekt, was die Daten enthält, die du brauchst und schiebe den Bums raus.
    Als Format kannst du JSON nehmen und mittels Schema (kannst du auch mit QuickType generieren) kannst du sogar clientseitig alles verifizieren und validieren.
    Wenn du es richtig implementierst, kannst du die Daten sogar komprimiert senden (GZIP z.B.).




    Ein kleiner Hinweis am Rande: Emails sind idR sehr klein.
    Zum Beispiel: bei 211.491 Emails habe ich eine durchschnittsgröße von etwas über 11KiB. Meistens werden 4KiB-Blöcke für Dateien allokiert.
    Auf einem Server alles kein Problem, auf einem Clientrechner kann das aber zu einer vorzeitigen Anbnutzung des Speichers führen, wenn entsprechend viele Dateien geschrieben werden.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems
    Meine Privatwebseite: SimonC.eu

    Bitte nicht wundern, wenn meine Aktivitäten im Forum etwas langsamer sind, ich baue gerade mein Nebengewerbe zum Vollgewerbe aus.
    Ich versuche auf euch zurückzukommen :)