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.
Verifique http://g4j.sourceforge.net/ . Hay un cliente mínimo de Gmail creado con esta API.
URLName server = new URLName("imaps://<gmail-user-name>:<gmail-pass>@imap.gmail.com/INBOX");