2010-12-08 20 views
10

¿Admite JavaMail la notificación de nuevos correos electrónicos a través de Server-Push?¿Es compatible JavaMail Server-push?

En caso afirmativo, ¿dónde está la documentación para eso? Si no, ¿hay una biblioteca que pueda hacerlo?

caso

Respuesta

10

usted debe utilizar la función de IMAPFolder idle para emitir el comando inactivo para el servidor. Eso luego escuchará los eventos, como un correo nuevo o un correo eliminado. (Consulte la especificación IMAP para ver cómo son los mensajes). Y debe usar un MessageCountListener para ejecutar el código cuando cambie una cantidad de correos electrónicos en el buzón.

La función inactiva de IMAP está hecha para imitar la funcionalidad "push".

http://java.sun.com/products/javamail/javadocs/javax/mail/event/MessageCountListener.html
http://java.sun.com/products/javamail/javadocs/com/sun/mail/imap/IMAPFolder.html

Lo sentimos No he puesto ningún código que muestra cómo se utiliza. No quería perder mi tiempo ya que hay muchos ejemplos fácilmente disponibles en Internet si busca estas cosas.

Pero tenga cuidado, este método no funcionará para más de una cuenta IMAP ya que el comando inactivo bloquea. A menos que los quiera a todos en diferentes hilos (mala idea).

+0

Entonces, si tuviera 3 objetos de la tienda para 3 servidores imap, ¿no puedo usar el servidor push? Eso es triste :-( – Timo

+0

Puedes. Tienes dos opciones. No sabía de cuántas conexiones IMAP hablabas, por eso no recomendé los hilos. Pero si solo quieres tres, la forma más fácil es hacerlo exactamente eso, solo tres hilos no son nada. Crea un hilo por tienda IMAP y ejecuta el comando 'idle'. Antes del comando' idle', asegúrate de asignar un objeto 'MessageCountListener', luego' idle'. Cada thread a continuación, maneje cada una de sus tres cuentas. La segunda opción más complicada consiste en administrar manualmente los sockets, incluida la lectura y escritura sobre ellos. – casey

+2

El número "3" era solo un número aleatorio para explicar lo que quise decir. En realidad, mi programa tendrá que tratar con miles de conexiones IMAP de forma simultánea. Supongo que enhebrar no es una buena idea aquí. – Timo

1

Una tienda escucha las notificaciones emitidas por su tienda de back-end:

http://java.sun.com/products/javamail/javadocs/javax/mail/event/StoreEvent.html

Pero en mi experiencia los documentos de correo Java son por lo delgada en algunos lugares, que la mejor manera de descubrir lo que es pasando, es depurar a través del proceso usted mismo.

Este es un gran recurso integral; la AYUDA JavaMail:

http://www.oracle.com/technetwork/java/faq-135477.html

+0

Hm, no hay nada en las preguntas frecuentes acerca de la inserción del servidor:/ – Timo

+0

Pensé que quería una forma de correo java para escuchar las notificaciones enviadas desde su servidor en la llegada del correo. ¡Lo siento si no entendí bien! – davek

+0

En realidad, eso es exactamente lo que estaba buscando. Muchas gracias por la pista sobre StoreEvent. La clase Store tiene un método llamado addStoreListener (StoreListener l) que se puede usar para registrar un oyente para capturar el StoreEvent. Las preguntas frecuentes de JavaMail no dicen nada al respecto. – Timo