mail envio enviar correo java gmail imap

envio - javamail netbeans



Obtener correo de GMail en la aplicaciĆ³n Java usando IMAP (10)

Debe conectarse a GMail solo con SSL. Establecer las siguientes propiedades lo forzará por usted.

props.setProperty("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.setProperty("mail.imap.socketFactory.fallback", "false");

Deseo acceder a los mensajes en GMail desde una aplicación Java utilizando JavaMail e IMAP. ¿Por qué recibo una 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); }

Establecí los valores de tiempo de espera para que no demorara "para siempre". Además, MyAuthenticator también tiene el nombre de usuario y la contraseña, que parecen redundantes con la URL. ¿Hay alguna otra forma de especificar el protocolo? (No lo vi en JavaDoc para IMAP.)


Debe usar 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");

Nota que es "imaps", no "imap", ya que el protocolo que está utilizando es imaps (IMAP + SSL)


En JavaMail, puede usar imaps como el esquema de URL para usar IMAP sobre SSL. (Consulte SSLNOTES.txt en su distribución JavaMail para obtener más detalles.) Por ejemplo, imaps://username%[email protected]/INBOX .

Del mismo modo, use smtps para enviar correos electrónicos a través de Gmail. por ejemplo, smtps://username%[email protected]/ . Nuevamente, lea SSLNOTES.txt para más detalles. ¡Espero eso ayude!


Esto es lo que funcionó para mi equipo y para mí, me dieron 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 cuenta comercial.

En el caso clásico, y si usa una antigua dependencia de JavaMail, no olvide bajar la seguridad de la cuenta aquí: https://www.google.com/settings/security/lesssecureapps

En ambos casos, compruebe la configuración de GMail => Reenviar POP / IMAP si IMAP está habilitado para la cuenta.

¡Espero eso ayude!

Para llegar más lejos :


Necesita tener JSSE instalado para usar SSL con Java


Si desea obtener más código de muestra para usar JavaMail con Gmail (por ejemplo, convertir etiquetas de Gmail a nombres de carpeta IMAP, o usar IMAP IDLE), consulte mi programa GmailAssistant en SourceForge .


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"


Usar imaps fue una gran sugerencia. Ninguna de las respuestas provistas me funcionó, 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 saca el Autenticador redundante de la imagen. Me alegro de que esto funcionó porque SSLNOTES.txt me hizo girar la cabeza.



URLName server = new URLName("imaps://<gmail-user-name>:<gmail-pass>@imap.gmail.com/INBOX");