Pregunta

He escrito un buen programa en Java que se conecta a una cuenta de gmail y descarga los complementos que se le envían. Una vez que se ha descargado un archivo adjunto, se marca como leído y no se descarga nunca más. Este programa tendrá que ejecutarse en varias instancias con cada programa descargando archivos adjuntos únicos para que un solo archivo adjunto nunca se descargue dos veces. El problema es que en este momento, si el archivo adjunto es de un tamaño decente, un programa aún lo está descargando, cuando otra instancia se conecta y también comienza a descargar el archivo adjunto antes de que se haya marcado como leído.

He intentado verificar y configurar varios indicadores y comprobar si la carpeta está abierta, nada parece funcionar. ¿Alguna solución?

Actualización: gracias por las respuestas rápidas, lamentablemente IMAP no es una opción debido a otras razones.

¿Fue útil?

Solución

Como han mencionado los demás, POP3 no está realmente diseñado para este tipo de escenario.

Si absolutamente tiene que usar POP3, sugeriría que descargue todo el correo electrónico a un servidor intermedio que ordena los mensajes y los pone a disposición de cada uno de los otros clientes.

Parece que solo estás tratando de distribuir el procesamiento de los correos electrónicos. Si ese es el caso, puede hacer que cada cliente se conecte a su servidor intermedio para recuperar el siguiente mensaje disponible.

No estoy seguro de cuáles son sus restricciones, pero es posible que desee considerar la posibilidad de recibir los archivos adjuntos de alguna otra forma además del correo electrónico. Si la gente está cargando archivos, puede configurar un formulario web que envíe automáticamente cada archivo a la siguiente instancia disponible de su aplicación para su procesamiento.

Otros consejos

Considere usar IMAP en su lugar, está diseñado para la interacción cliente-servidor.

De RFC1939 (Protocolo de oficina de correos - Versión 3):

  

POP3 no está destinado a proporcionar   Operaciones extensas de manipulación de   correo en el servidor; normalmente, el correo es   descargado y luego eliminado. Un protocolo más avanzado (y complejo), IMAP4, se discute en RFC1730 .

No creo que POP3 esté hecho para acceso simultáneo múltiple.

Pregúntese esto: ¿realmente necesito múltiples procesos para acceder al mismo buzón?

Si lo hace, tendrá que encontrar una manera de hacer que estos procesos se comuniquen entre sí. Utilice una base de datos común o un proceso de servidor para coordinar acciones.

IMAP tiene más opciones, pero no estoy seguro de que puedas " bloquear " un solo correo para marcarlo como procesado.

Si necesita permanecer con una conexión POP3, puede mantener una base de datos local de identificadores de mensajes descargados anteriormente. Entonces, las nuevas instancias podrían compararse con eso antes de volver a descargar. Sin embargo, la mejor solución es utilizar IMAP, ya que IMAP puede configurar los indicadores de lectura / no lectura antes de descargar.

Puede marcar el correo como leído antes de iniciar la descarga y luego comenzar a descargarlo.

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