Quiero acceder a los mensajes de Gmail desde una aplicación Java mediante JavaMail e IMAP . ¿Por qué obtengo una excepción SocketTimeoutException? ?
Aquí está mi código:
Properties props = System.getProperties();
props.setProperty("mail.imap.host", "imap.gmail.com");
props.setProperty("mail.imap.port", "993");
props.setProperty("mail.imap.connectiontimeout", "5000");
props.setProperty("mail.imap.timeout", "5000");
try {
Session session = Session.getDefaultInstance(props, new MyAuthenticator());
URLName urlName = new URLName("imap://[email protected]:[email protected]");
Store store = session.getStore(urlName);
if (!store.isConnected()) {
store.connect();
}
} catch (NoSuchProviderException e) {
e.printStackTrace();
System.exit(1);
} catch (MessagingException e) {
e.printStackTrace();
System.exit(2);
}
He configurado los valores de tiempo de espera para que no tarde "una eternidad" en el tiempo de espera. Además, MyAuthenticator también tiene el nombre de usuario y la contraseña, lo que parece redundante con la URL. ¿Existe otra forma de especificar el protocolo? (No lo vi en JavaDoc para IMAP ).
java
gmail
jakarta-mail
imap
Dave
fuente
fuente
Respuestas:
Usar imaps fue una gran sugerencia. Ninguna de las respuestas proporcionadas simplemente funcionó para mí, así que busqué en Google un poco más y encontré algo que funcionó. Así es como se ve mi código ahora.
Properties props = System.getProperties(); props.setProperty("mail.store.protocol", "imaps"); try { Session session = Session.getDefaultInstance(props, null); Store store = session.getStore("imaps"); store.connect("imap.gmail.com", "<username>@gmail.com", "<password>"); ... } catch (NoSuchProviderException e) { e.printStackTrace(); System.exit(1); } catch (MessagingException e) { e.printStackTrace(); System.exit(2); }
Esto es bueno porque elimina el Autenticador redundante de la imagen. Me alegro de que esto haya funcionado porque SSLNOTES.txt me hace girar la cabeza.
fuente
Debe utilizar las siguientes propiedades para imaps:
props.setProperty("mail.imaps.host", "imap.gmail.com"); props.setProperty("mail.imaps.port", "993"); props.setProperty("mail.imaps.connectiontimeout", "5000"); props.setProperty("mail.imaps.timeout", "5000");
Observa que es "imaps", no "imap", ya que el protocolo que está utilizando es imaps (IMAP + SSL)
fuente
En JavaMail, puede utilizar
imaps
como esquema de URL para utilizar IMAP sobre SSL. (VéaseSSLNOTES.txt
en su distribución JavaMail para más detalles.) Por ejemplo,imaps://username%[email protected]/INBOX
.Del mismo modo, utilice
smtps
para enviar correos electrónicos a través de Gmail. ejsmtps://username%[email protected]/
. Nuevamente, leaSSLNOTES.txt
para obtener más detalles. ¡Espero eso ayude!fuente
Tienes que conectarte a GMail usando SSL únicamente. Establecer las siguientes propiedades lo forzará.
fuente
Si desea más código de muestra sobre el uso de JavaMail con Gmail (por ejemplo, convertir etiquetas de Gmail en nombres de carpetas IMAP o usar IMAP IDLE), consulte mi programa GmailAssistant en SourceForge .
fuente
Esto es lo que funcionó para mi equipo y para mí, con una cuenta clásica [email protected] y una cuenta comercial [email protected]:
final Properties properties = new Properties(); properties.put("mail.imap.ssl.enable", "true"); imapSession = Session.getInstance(properties, null); imapSession.setDebug(false); imapStore = imapSession.getStore("imap"); imapStore.connect("imap.gmail.com", USERNAME, "password");
con USERNAME = "nickname" en el caso clásico y USERNAME = "[email protected]" en el caso de la cuenta comercial.
En el caso clásico, y si usa una antigua dependencia de JavaMail, no olvide reducir la seguridad de la cuenta aquí: https://www.google.com/settings/security/lesssecureapps
En ambos casos, verifique en Configuración de GMail => Reenvío de POP / IMAP si IMAP está habilitado para la cuenta.
¡Espero eso ayude!
Para llegar más lejos :
fuente
Consulte http://g4j.sourceforge.net/ . Hay un cliente de Gmail mínimo creado con esta API.
fuente
Usé las siguientes propiedades para obtener la tienda y funciona bien.
"mail.imaps.host" : "imap.gmail.com"
"mail.store.protocol" : "imaps"
"mail.imaps.port" : "993"
fuente
Necesita tener JSSE instalado para usar SSL con Java
fuente
URLName server = new URLName("imaps://<gmail-user-name>:<gmail-pass>@imap.gmail.com/INBOX");
fuente