2009-03-02 11 views
3

Ich bin dabei, IMAP E-Mail-Integration zu einer unserer Web-Anwendungen (ASP.NET/SQL Server) hinzuzufügen. Ich verwende bereits ein commercial library, die die wichtigste IMAP-Funktionalität macht: Ordnerliste bekommt, Nachrichten-Header erhalten, erhalten MIME-Nachricht etc.)IMAP Ordner/Nachrichten Synchronisationsstrategie?

E-Mail-Daten bekommen „live“ vom IMAP-Server sehr gut funktioniert. Aber hier kommt die schwierige Aufgabe: Ich muss die E-Mail/Ordner Caching SQL-Datenbank mit dem IMAP-Server synchronisiert synchronisieren (ich muss Daten zeigen, die verschiedene Kriterien anwenden).

Unser Datenbankschema enthält im Wesentlichen eine "Ordner" und eine "E-Mails" -Tabelle. Die Tabelle "E-Mails" enthält hauptsächlich Kopfzeileninformationen wie "FromAddress", "FromName", "IsRead", "IsAnswered", "IsForwarded", "HasAttachments" usw. (ohne E-Mail-Inhalt oder Anhänge).

Ich habe zwei wichtige Szenarien zu berücksichtigen:

  1. bekommen alle Nachrichten zum ersten Mal (oder nachdem ein Benutzer reorganisierte die Ordner)
  2. Erste neue/letzten Nachrichten

Was wäre eine gute Synchronisierungsstrategie, um den Mailserver und den Datenbankserver auf dem neuesten Stand zu halten, wenn man berücksichtigt, dass die Leistung ein Hauptkriterium für das Design ist (ich kann nicht jedes Mal tausende von Nachrichten abfragen/vergleichen) wenn der Benutzer verschoben oder gelöscht wurde Ich alte E-Mails).

Danke!

Antwort

2

Aus Ihrer Feature-Liste der Bibliothek:

Besseren UniqueId Support: Wir haben für die Beantragung einer Nachricht einzigartige ID noch mehr Optionen hinzugefügt. Sie können jetzt die UniqueId in einer Nachricht DataTable für Rückreisen zum IMAP Server zurückgeben.

Und:

  • Abrufen nur neue Nachrichten
  • Suche Gekennzeichnete Nachrichten
  • Mark/Unmark Nachrichten als gelesen

Es sieht für mich, als ob Ihr Bibliothek hat alle Unterstützung, die Sie benötigen, um Ihren SQL Server zu halten ver synchronisiert. Sie können Nachrichten programmgesteuert als gelesen markieren, und die Bibliothek unterstützt das Abrufen nur neuer Nachrichten. Das kümmert sich um deinen zweiten Gegenstand.

Ihre Strategie hängt teilweise davon ab, wie Ihre Lösung funktioniert. Wenn ich Ihre Frage richtig gelesen habe, verwalten Ihre Benutzer ihre E-Mails auf dem IMAP-Server, und Ihr SQL-Server wird aus Synchronisierungssicht für den IMAP-Server "abonniert".

Wenn dies korrekt ist, dann ist die Synchronisation effektiv eine Hintergrundaufgabe. Mein Ansatz wäre die Synchronisierung mithilfe eines Ereignismodells für jeden Benutzer.Wenn möglich, benachrichtigen Sie das Synchronisationsprogramm, wenn eine Aktivität (neue/gelöschte E-Mails) für einen Benutzer aktiv ist. Fügen Sie einen Synchronisierungs- "Job" zu einem Hintergrundprozess hinzu, der synchronisierte Jobs synchronisiert. Ein Benachrichtigungsmodell stellt sicher, dass das Synchronisationsprogramm nur für Benutzer funktioniert, die eine Synchronisation benötigen.

Kleine neue/gelöschte E-Mail-Synchronisierungsjobs gehen auf einen "Prozessor" und größere Jobs wie Totalresynch und Ordnerreorganisation gehen zu einem anderen. Wirklich große Resynch-Jobs müssen möglicherweise aufgeteilt werden, um den Gesamtdurchsatz hoch zu halten. Die Prozessoren "kleiner Auftrag" und "großer Auftrag" könnten zwei verschiedene Dienste sein oder möglicherweise zwei unterschiedliche Threads, abhängig von der Leistung und den Designüberlegungen.

+0

Gute Antwort, danke. Ich denke, ich muss die Fähigkeiten der IMAP-Komponente/des Protokolls erneut besuchen. – splattne