Question

Je suis sur le point d'ajouter l'intégration de la messagerie IMAP à l'une de nos applications Web (ASP.NET / SQL Server). J'utilise déjà une bibliothèque commerciale qui expose la fonctionnalité IMAP la plus importante: obtenir la liste des dossiers, obtenir les en-têtes de message. , recevez un message mime, etc.)

Récupération des données de courrier électronique "en direct" du serveur IMAP fonctionne très bien. Mais voici la tâche difficile: je dois garder les courriels / dossiers en cache la base de données SQL synchronisés sur le serveur IMAP (je dois afficher des données appliquant différents critères).

Notre schéma de base de données contient essentiellement un " Dossiers " et un " Emails " table. Les " Emails " La table 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 envisager deux scénarios principaux:

  1. Obtention de tous les messages pour la première fois (ou après qu'un utilisateur a réorganisé les dossiers)
  2. Recevoir les nouveaux messages / récents

Quelle serait une bonne stratégie de synchronisation pour maintenir le serveur de messagerie et le serveur de base de données à jour, sachant que les performances sont un critère de conception essentiel (je ne peux pas simplement interroger / comparer des milliers de messages chaque fois que je me connecte); savoir si l'utilisateur a déplacé ou supprimé d'anciens courriels).

Merci!

Était-ce utile?

La solution

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

  

Meilleur support UniqueId: nous avons ajouté   encore plus d'options pour demander un   l'identifiant unique du message. Tu peux maintenant   renvoyer le UniqueId dans un message   DataTable pour les allers-retours à l'IMAP   serveur.

Et:

  
      
  • Récupérer uniquement les nouveaux messages
  •   
  • Rechercher des messages marqués
  •   
  • Marquer / effacer les messages comme lus
  •   

Il me semble que votre bibliothèque dispose de tout le support nécessaire pour maintenir votre serveur SQL synchronisé. Vous pouvez marquer par programmation les messages comme lus et la bibliothèque prend en charge la récupération des 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 " souscrit " sur le serveur IMAP, du point de vue de la synchronisation.

Si cela est correct, la synchronisation est en réalité une tâche en arrière-plan. Mon approche serait de synchroniser en utilisant un modèle d'événement utilisateur par utilisateur. Si possible, " notifier " le programme de synchronisation lorsqu'il y a une activité (nouveaux courriels / effacés) pour un utilisateur. Ajouter un travail de synchronisation " à un processus d'arrière-plan qui regroupe les travaux de synchronisation. Un modèle de notification garantira que le programme de synchronisation ne fonctionne que sur les utilisateurs nécessitant une synchronisation.

Les petits travaux de synchronisation d'e-mails nouveaux / supprimés vont dans un "processeur". et les travaux plus importants, tels que la resynchronisation totale et la réorganisation des dossiers, passent à un autre. Il faudra peut-être séparer les travaux de resynchronisation très volumineux pour que le débit global reste élevé. Le "petit travail" et "gros travail" Les processeurs peuvent être deux services différents, ou éventuellement deux threads différents en fonction de considérations de performances et de conception.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top