2009-03-02 11 views
3

Je suis sur le point d'ajouter intégration de messagerie IMAP à l'une de nos applications Web (ASP.NET/SQL Server). J'utilise déjà un commercial library qui expose la fonctionnalité IMAP la plus importante: obtenir la liste des dossiers, récupérer les en-têtes des messages, obtenir le message mime, etc.)Stratégie de synchronisation de dossiers/messages IMAP?

Obtenir des données email "live" du serveur IMAP fonctionne très bien. Mais voici la tâche difficile: Je dois garder l'email/dossiers base de données SQL de mise en cache synchronisée sur le serveur IMAP (Je dois montrer des données en appliquant différents critères).

Notre schéma de base de données contient essentiellement un dossier "Dossiers" et un tableau "Emails". La table "Emails" contient principalement des informations d'en-tête telles que "FromAddress", "FromName", "IsRead", "IsAnswered", "IsForwarded", "HasAttachments" etc. (sans le contenu de l'e-mail ou les pièces jointes).

je dois considérer deux scénarios principaux:

  1. Obtenir tous les messages la première fois (ou après organisé re-les utilisateurs des dossiers)
  2. messages Obtenir de nouveaux/récents

Qu'est-ce que serait une bonne stratégie de synchronisation pour maintenir le serveur de messagerie et le serveur de base de données à jour, considérant que la performance est un critère de conception majeur (je ne peux pas interroger/comparer des milliers de messages chaque fois que je me connecte). si l'utilisateur a déplacé ou supprimé moi anciens emails).

Merci!

Répondre

2

A partir de la liste des fonctionnalités de votre bibliothèque:

Mieux UniqueId Support: Nous avons ajouté encore plus d'options pour demander l'identifiant unique d'un message . Vous pouvez maintenant renvoyer l'élément UniqueId dans le DataTable d'un message pour les renvois vers le serveur IMAP .

Et:

  • récupérer uniquement les nouveaux messages
  • Recherche Signalé Messages
  • Marquer/Démarquer messages comme lus

Il me semble que si votre bibliothèque a tout le soutien dont vous avez besoin pour garder votre ser ser SQL ver synchronisé. Vous pouvez marquer par programme les messages comme lus, et la bibliothèque prend en charge la récupération de nouveaux messages uniquement. Cela prend soin de votre deuxième article.

Votre stratégie dépendra en partie du fonctionnement de votre solution. Si je lis correctement votre question, vos utilisateurs gèrent leur courrier électronique sur le serveur IMAP et votre serveur SQL est "abonné" au serveur IMAP, du point de vue de la synchronisation.

Si cela est correct, la synchronisation est en fait une tâche d'arrière-plan. Mon approche serait de synchroniser en utilisant un modèle d'événement utilisateur par utilisateur.Si possible, "notifiez" le programme de synchronisation quand il y a de l'activité (emails nouveaux/supprimés) pour un utilisateur. Ajouter un "travail" de synchronisation à un processus d'arrière-plan qui effectue la synchronisation des tâches de synchronisation. Un modèle de notification garantit que le programme de synchronisation ne fonctionne que sur les utilisateurs nécessitant une synchronisation.

Les petites tâches de synchronisation d'e-mail nouvelles/supprimées vont à un "processeur" et les tâches plus importantes comme la resynchronisation totale et la réorganisation de dossiers vont à un autre. Les travaux de resynchronisation vraiment importants peuvent devoir être séparés afin de maintenir un débit global élevé. Les processeurs "petits travaux" et "gros travaux" pourraient être deux services différents, ou peut-être deux fils différents en fonction des considérations de performance et de conception.

+0

Bonne réponse, merci. Je pense que je dois revoir les capacités du composant/protocole IMAP. – splattne