Frage

Ich bin über IMAP E-Mail-Integration zu einem unserer Web-Anwendungen (ASP.NET / SQL Server) hinzuzufügen. Ich verwende bereits eine kommerzielle Bibliothek , die die wichtigsten IMAP-Funktionalität macht: Ordnerliste bekommen, Nachrichten-Header erhalten , erhalten Mime-Nachricht usw.).

Erste E-Mail-Daten „live“ vom IMAP-Server sehr gut funktioniert. Aber hier kommt die schwierige Aufgabe. Ich die E-Mail / Ordner Caching-SQL-Datenbank auf dem IMAP-Server synchronisiert zu halten haben (Ich habe Daten zeigen unterschiedliche Kriterien anwenden)

Unser Datenbankschema enthält im Wesentlichen einen „Ordner“ und eine „E-Mails“ Tabelle. Die "E-Mails" Tabelle enthält in erster Linie Informationen wie "Absenderadresse", "Fromname", "IsRead", "IsAnswered", "IsForwarded", "HasAttachments" usw. ( ohne E-Mail-Inhalte oder Anhänge) header .

Ich habe zwei wichtige Szenarien zu berücksichtigen:

  1. immer alle Nachrichten zum ersten Mal (oder nachdem ein Benutzer die Ordner umorganisiert)
  2. Erste neue / letzte Nachrichten

Was eine gute Synchronisationsstrategie für die Führung der Mail-Server und Datenbank-Server up-to-date wäre, dass die Leistung unter Berücksichtigung ist ein wichtiges Kriterium Design (Ich kann nicht nur Abfrage / jedes Mal Tausende von Nachrichten vergleichen ich eine Verbindung, in um herauszufinden, ob der Benutzer verschoben oder gelöscht einige alte E-Mails).

Danke!

War es hilfreich?

Lösung

Aus Ihrer Bibliothek Feature-Liste:

  

Bessere UniqueId Support: Wir haben hinzugefügt   noch mehr Möglichkeiten für Ihr Interesse an einem   Botschaft eindeutige ID. Du kannst jetzt   Rückkehr der UniqueId in einer Botschaft   Datatable für Hin- und Rückfahrten mit dem IMAP   Server.

Und:

  
      
  • Abrufen nur neue Nachrichten
  •   
  • Suchen Gekennzeichnete Nachrichten
  •   
  • Markieren / Markierung löschen Nachrichten als gelesen
  •   

Es scheint mir, als ob Ihre Bibliothek alle Unterstützung hat Sie Ihren SQL-Server synchronisiert halten müssen. Sie können programmatisch Nachrichten als gelesen markieren, und die Bibliothek unterstützt den Abruf von nur neuen Nachrichten. Das kümmert sich um Ihren zweiten Punkt.

Ihre Strategie hängt zum Teil, wie Sie Ihre Lösung funktioniert. Wenn ich Ihre Frage Correclty lesen, Ihre Benutzer verwalten ihre E-Mail auf dem IMAP-Server und SQL-Server „abonniert“ zu dem IMAP-Server, von einer syncronization Perspektive.

Wenn dies richtig ist, dann Synchronisation ist effektiv eine Hintergrundaufgabe. Mein Ansatz wäre, auf einer Benutzer-by-User-Basis unter Verwendung eines Ereignismodell zu synchronisieren. Wenn möglich, „benachrichtigen“, um die Programmsynchronisation, wenn Aktivität (neu / gelöschten E-Mails) für einen Benutzer ist. Fügen Sie eine Synchronisation „Job“ zu einem Hintergrundprozess, zusammen Synch Arbeitsplätze Chargen. Ein Benachrichtigungs Modell wird sichergestellt, dass das Synchronisations-Programm nur auf Benutzer arbeitet, die eine Synch benötigen.

Kleine neue / gelöschte E-Mail Synch-Jobs gehen zu einem „Prozessor“ und größeren Aufträgen wie insgesamt Neusynchronisation und Ordner Reorganisation zu einem anderen gehen. Wirklich große Neusynchronisation-Arbeitsplätze werden müssen, können zu halten, um den Gesamtdurchsatz hoch aufgespalten. Der „kleine Job“ und „große Aufgabe“ Prozessoren zwei verschiedene Dienste sein könnten, oder möglicherweise zwei verschiedene Threads je nach Leistung und Design-Überlegungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top