java - from - No se pudo conectar al host SMTP: smtp.gmail.com, puerto: 465, respuesta:-1
send email java maven (5)
Al enviar el correo me sale este error.
java.lang.RuntimeException: javax.mail.SendFailedException: error de envío; la excepción anidada es: clase javax.mail.MessagingException: no se pudo conectar al host SMTP: smtp.gmail.com, puerto: 465, respuesta: -1
mi código es:
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("email","password");
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("email"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(this.to));
message.setSubject("Testing");
message.setText("Hey, this is the testing email.");
Transport.send(message);
Cualquier ayuda sería apreciada.
Gracias por adelantado.
El puerto 465 es para "smtp sobre SSL".
http://javamail.kenai.com/nonav/javadocs/com/sun/mail/smtp/package-summary.html
[...] For example, use
props.put("mail.smtp.port", "888");
to set the mail.smtp.port property, which is of type int.
Note that if you''re using the "smtps" protocol to access SMTP over SSL,
all the properties would be named "mail.smtps.*"
En mi caso fue Avast Antivirus interfiriendo con la conexión. Acciones para deshabilitar esta función: Avast -> Configuración -> Componentes -> Mail Shield (Personalizar) -> Escaneo SSL -> desmarque "Escanear conexiones SSL".
He estado experimentando este problema al depurar usando NetBeans, incluso ejecutando el archivo jar real. El antivirus bloquearía el envío de correo electrónico. Debería desactivar temporalmente su antivirus durante la depuración o excluir NetBeans y el archivo jar real de la exploración. En mi caso, estoy usando Avast.
Vea este enlace sobre cómo Excluir: Cómo agregar una excepción de archivo / sitio web en avast! Antivirus 2014
Esto funciona para mi.
Lo que hice fue comentar el
props.put("mail.smtp.starttls.enable","true");
Porque aparentemente para G-mail no lo necesitabas. Entonces, si aún no lo ha hecho, debe crear una contraseña de aplicación en G-mail para su programa. Hice eso y funcionó perfectamente. Aquí, este enlace le mostrará cómo: https://support.google.com/accounts/answer/185833 .
Necesita decirle que está utilizando SSL:
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
En caso de que se pierda algo, aquí está funcionando el código:
String d_email = "[email protected]",
d_uname = "Name",
d_password = "urpassword",
d_host = "smtp.gmail.com",
d_port = "465",
m_to = "[email protected]",
m_subject = "Indoors Readable File: " + params[0].getName(),
m_text = "This message is from Indoor Positioning App. Required file(s) are attached.";
Properties props = new Properties();
props.put("mail.smtp.user", d_email);
props.put("mail.smtp.host", d_host);
props.put("mail.smtp.port", d_port);
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.debug", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.socketFactory.port", d_port);
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
SMTPAuthenticator auth = new SMTPAuthenticator();
Session session = Session.getInstance(props, auth);
session.setDebug(true);
MimeMessage msg = new MimeMessage(session);
try {
msg.setSubject(m_subject);
msg.setFrom(new InternetAddress(d_email));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(m_to));
Transport transport = session.getTransport("smtps");
transport.connect(d_host, Integer.valueOf(d_port), d_uname, d_password);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
} catch (AddressException e) {
e.printStackTrace();
return false;
} catch (MessagingException e) {
e.printStackTrace();
return false;
}