Pregunta

Estoy a punto de agregar Integración de correo electrónico IMAP a una de nuestras aplicaciones web (ASP.NET / SQL Server). Ya estoy usando una biblioteca comercial que expone la funcionalidad IMAP más importante: obtener la lista de carpetas, obtener encabezados de mensajes , recibe mensaje mime etc.)

Obtención de datos de correo electrónico " en vivo " Desde el servidor IMAP funciona muy bien. Pero aquí viene la tarea difícil: tengo que mantener el correo electrónico / carpetas almacenando en caché la base de datos de SQL sincronizada con el servidor IMAP (tengo que mostrar los datos aplicando diferentes criterios).

Nuestro esquema de base de datos contiene esencialmente un " Carpetas " y un " Correos electrónicos " mesa. Los " Correos electrónicos " La tabla contiene principalmente información de encabezado como "FromAddress", "FromName", "IsRead", "IsAnswered", "IsForwarded", "HasAttachments". etc. ( sin el contenido del correo electrónico o los archivos adjuntos).

Tengo que considerar dos escenarios principales:

  1. Obtención de todos los mensajes la primera vez (o después de que un usuario reorganizó las carpetas)
  2. Recibiendo mensajes nuevos / recientes

¿Cuál sería una buena estrategia de sincronización para mantener actualizados el servidor de correo y el servidor de base de datos, considerando que el rendimiento es un criterio de diseño importante? (No puedo consultar / comparar miles de mensajes cada vez que me conecto, en Para averiguar si el usuario movió o eliminó algunos correos electrónicos antiguos).

Gracias !

¿Fue útil?

Solución

De la lista de características de su biblioteca:

  

Mejor soporte de UniqueId: Hemos agregado   aún más opciones para solicitar una   ID única del mensaje. Tu puedes ahora   devuelve el UniqueId en un mensaje de   DataTable para viajes de regreso al IMAP.   servidor.

Y:

  
      
  • Recuperar solo mensajes nuevos
  •   
  • Buscar mensajes marcados
  •   
  • Marcar / desmarcar mensajes como leídos
  •   

Me parece que su biblioteca tiene todo el apoyo que necesita para mantener su servidor SQL sincronizado. Puede marcar programáticamente los mensajes como leídos, y la biblioteca solo admite la recuperación de mensajes nuevos. Eso se encarga de tu segundo artículo.

Su estrategia dependerá en parte de cómo funcione su solución. Si leí su pregunta correctamente, sus usuarios administran su correo electrónico en el servidor IMAP y su servidor SQL está " suscrito " al servidor IMAP, desde una perspectiva de sincronización.

Si esto es correcto, entonces la sincronización es efectivamente una tarea en segundo plano. Mi enfoque sería sincronizar utilizando un modelo de evento usuario por usuario. Si es posible, " notificar " el programa de sincronización cuando hay actividad (correos electrónicos nuevos / eliminados) para un usuario. Añadir una sincronización " trabajo " a un proceso en segundo plano que los trabajos de sincronización de lotes juntos. Un modelo de notificación garantizará que el programa de sincronización solo funcione en usuarios que necesitan una sincronización.

Los pequeños trabajos de sincronización de correo electrónico nuevos / eliminados van a un " procesador " y los trabajos más grandes, como la resincronización total y la reorganización de carpetas, van a otro. Es posible que los trabajos de resincronización realmente grandes deban dividirse para mantener el rendimiento general alto. El " pequeño trabajo " y " gran trabajo " los procesadores pueden ser dos servicios diferentes, o posiblemente dos subprocesos diferentes según el rendimiento y las consideraciones de diseño.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top