Pregunta

Estoy trabajando en una aplicación que utiliza la bandeja de entrada demonio como su cola de entrada de correo electrónico. Los tiempos de respuesta deben ser lo más alto posible con el servidor de sobrecarga reducido al mínimo, por lo supervisión del buzón de correo electrónico está fuera de cuestión. Como protocolo IMAP permite a las notificaciones de nuevos mensajes de correo electrónico, esto es ideal para la aplicación.

Sin embargo, me he topado con problemas cuando he intentado implementar este mecanismo en mi aplicación Delphi / Indy. TIdIMAP4 funciona muy bien (aparte de algunos problemas Unicode que son irrelevantes en mi caso), pero no pudo encontrar la manera de implementar las notificaciones en ella.

Esto debería ser un problema simple GIYF pero por alguna a-me-desconocida razón, no puedo encontrar ninguna información pertinente sobre los componentes Indy al buscar en Internet.

solución o alternativos enfoques A sería muy apreciada.

Editar:. Desde Indy appearently no admite notificaciones de correo electrónico asíncronos, ¿alguien sabe qué componentes libre para delphi permitiría que

¿Fue útil?

Solución

TIdIMAP4 no soporta la recepción de las notificaciones asíncronas, como los nuevos notifica por correo electrónico. Para ello sería necesario cambiar la aplicación de TIdIMAP4 a un modelo de multiproceso similar a lo que TIdTelnet usos, pero más complejo debido a bloqueo modelo de comando / respuesta actual de TIdIMAP4. Por ahora, debe sondear periódicamente la bandeja de entrada.

Otros consejos

¿Por qué no hacer que la aplicación de un servidor SMTP, en lugar de cliente.

De esta manera tienes la notificación directa como el correo electrónico se envía directamente a su aplicación, en lugar de tirar de nuevo correo electrónico.

Existen algunos retrocesos, en el que el correo electrónico no será cola si su aplicación se ha reducido, aunque estoy seguro de que MS Exchange, o de sufijo, etc puede ser configurado para trabajar con él bastante bien.

Ok. Esta es una solución alternativa. Suponiendo que no hay razón por la que desea correos electrónicos de uso (por ejemplo, su información está llegando forma una fuente externa a través de correo electrónico), entonces yo sugeriría una tabla de base de datos para ser una manera mucho más sencilla para crear una cola de entrada.

Simplemente sondee la base de datos en una base regular. Esto sería mucho, mucho más rápido que el sondeo una bandeja de entrada de correo electrónico, y mucho más rápido de lo que cree que será. Sondeo una base de datos es muy rápida y fácilmente se podría sondear una tabla de base de datos de varios cientos de veces por minuto, con muy poco efecto apreciable en el rendimiento.

Simplemente crear una tabla para almacenar sus artículos Q y añadir un campo adicional que puede almacenar una marca de tiempo o una bandera que este tema q se ha manejado, a continuación, que acaba de tomar el siguiente elemento no controlada de la pila

por ejemplo, mssql

select Top 1 * from tbl_MyQ where AlreadyHandled = 0 

mysql

select  * from tbl_MyQ where AlreadyHandled = 0 Limit 1

entonces

update tbl_MyQ Set AlreadyHandled = 1 where QueueID = #ItemIDRetrieved#

Las bases de datos son rápidos, ejecutar una prueba si su preocupado. Y son mucho mucho menos complicado que los eventos IMAP y buzones de correo electrónico.

Si la bandeja de entrada de correo electrónico (IMAP) es un requisito básico en su arquitectura y no hay clientes IMAP disponible, me gustaría tratar de encontrar un cliente IMAP con notificación asíncrona escrita en un lenguaje diferente (C, C # o incluso Java) a implementar un 'proxy' o puerta de enlace que a su vez dará lugar a la aplicación demonio de Delphi cuando llegan nuevos mensajes.

El demonio Delphi podría utilizar un protocolo simple basado socket o http para recibir los mensajes (TIdHTTPServer, TIdTCPClient).

Si la curva de aprendizaje de Indy es empinada, se podría escribir un prototipo muy con la biblioteca Ararat Synapse TCP / IP, que es gratuito y de código abierto, que funciona muy bien en mis Delphi 2009 aplicaciones (excepto que el compilador se queja de algunos cadena / ANSI conversiones).

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