providers mail framework example java javamail

framework - javamail netbeans



Resuelve el error javax.mail.AuthenticationFailedException (13)

2 posibles razones:

  • Su nombre de usuario puede requerir el ID de correo electrónico completo ''[email protected]''
  • Más obvio: la contraseña es incorrecta. Depurar para ver si la contraseña que se usa es correcta.

No estoy familiarizado con esta función para enviar correos en java. Recibo un mensaje de error al enviar un correo electrónico para restablecer la contraseña. Espero que puedas darme una solución.

A continuación está mi código:

public synchronized static boolean sendMailAdvance(String emailTo, String subject, String body) { String host = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-ADDRESS"); String userName = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-USERNAME"); String password = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-PASSWORD"); String port = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-PORT"); String starttls = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-STARTTLS"); String socketFactoryClass = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-SOCKET-CLASS"); String fallback = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-ALLOW-FALLBACK"); try { java.util.Properties props = null; props = System.getProperties(); props.put("mail.smtp.user", userName); props.put("mail.smtp.host", host); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.debug", "true"); if(!"".equals(port)) { props.put("mail.smtp.port", port); props.put("mail.smtp.socketFactory.port", port); } if(!"".equals(starttls)) props.put("mail.smtp.starttls.enable",starttls); if(!"".equals(socketFactoryClass)) props.put("mail.smtp.socketFactory.class",socketFactoryClass); if(!"".equals(fallback)) props.put("mail.smtp.socketFactory.fallback", fallback); Session session = Session.getDefaultInstance(props, null); session.setDebug(true); MimeMessage msg = new MimeMessage(session); msg.setFrom(new InternetAddress(userName)); msg.setSubject(subject); msg.setText(body, "ISO-8859-1"); msg.setSentDate(new Date()); msg.setHeader("content-Type", "text/html;charset=/"ISO-8859-1/""); msg.addRecipient(Message.RecipientType.TO, new InternetAddress(emailTo)); msg.saveChanges(); Transport transport = session.getTransport("smtp"); transport.connect(host, userName, password); transport.sendMessage(msg, msg.getAllRecipients()); transport.close(); return true; } catch (Exception mex) { mex.printStackTrace(); return false; } }

Lanza el siguiente error:

DEBUG: setDebug: JavaMail version 1.4.1ea-SNAPSHOT DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc] DEBUG SMTP: useEhlo true, useAuth true DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL false 220 mx.google.com ESMTP m4sm5929870pbg.38 - gsmtp DEBUG SMTP: connected to host "smtp.gmail.com", port: 465 EHLO fatin 250-mx.google.com at your service, [175.139.198.14] 250-SIZE 35882577 250-8BITMIME 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN 250-ENHANCEDSTATUSCODES 250 CHUNKING DEBUG SMTP: Found extension "SIZE", arg "35882577" DEBUG SMTP: Found extension "8BITMIME", arg "" DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN" DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg "" DEBUG SMTP: Found extension "CHUNKING", arg "" DEBUG SMTP: Attempt to authenticate AUTH LOGIN 334 VXNlcm5hbWU6 YWNjb3VudEBibG9vbWluZy5jb20ubXk= 334 UGFzc3dvcmQ6 Ymxvb21pbmc= 535-5.7.8 Username and Password not accepted. Learn more at 535 5.7.8 http://support.google.com/mail/bin/answer.py?answer=14257 m4sm5929870pbg.38 - gsmtp [STDOUT] javax.mail.AuthenticationFailedException [STDOUT] at javax.mail.Service.connect(Service.java:319) [STDOUT] at javax.mail.Service.connect(Service.java:169) [STDOUT] at com.vlee.util.mail.SendMail.sendMailAdvance(SendMail.java:283) [STDOUT] at com.vlee.servlet.ecommerce.DoMemberLogin.fnSendPwd(DoMemberLogin.java:251) [STDOUT] at com.vlee.servlet.ecommerce.DoMemberLogin.doPost(DoMemberLogin.java:72)



Deberías cambiar el puerto a 587 , probé tu código y funciona bien

Si aún ocurre un error, cambie la variable de sesión al siguiente código:

Session session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(userName, password); } });


En caso de que alguien venga buscando una solución para este problema.

Los problemas de autenticación se pueden aliviar activando la verificación de Google en dos pasos para la cuenta en uso y creando una contraseña específica de la aplicación. Tuve el mismo problema que el OP. Habilitar 2 pasos funcionaba.


He estado recibiendo el mismo error por mucho tiempo.

Cuando cambié la depuración de la sesión a verdadero

Session session = Session.getDefaultInstance(props, new GMailAuthenticator("[email protected]", "xxxxx")); session.setDebug(true);

Obtuve la url de ayuda https://support.google.com/mail/answer/78754 desde la consola junto con javax.mail.AuthenticationFailedException.

De los pasos en el enlace, seguí cada paso. Cuando cambié mi contraseña con una combinación de letras, números y símbolos para ser una sorpresa, el correo electrónico se generó sin excepción de autenticación.

Nota: Mi contraseña anterior era menos segura.


La mayoría de los errores de AuthenticationFieldException ocurren cuando se intentó evitar el inicio de sesión, ingrese su cuenta de gmail primero y vaya a google.com/settings/security/lesssecureapps y verifique que se activen. Resolví este tipo de problema de esta manera.


Por defecto, la cuenta de Gmail es altamente segura. Cuando utilizamos gmail smtp desde una herramienta que no es de Gmail, el correo electrónico está bloqueado. Para probar en nuestro entorno local, haga que su cuenta de Gmail sea menos segura ya que

  1. Ingresa a Gmail.
  2. Acceda a la URL como google.com/settings/security/lesssecureapps
  3. Seleccione "Activar"

Puede ser este problema causado por la protección de la cuenta de Gmail. Simplemente haga clic en el enlace a continuación y desactive la configuración de seguridad. Funcionará. google.com/settings/security/lesssecureapps


Si está iniciando sesión en su cuenta de Gmail desde una nueva aplicación o dispositivo, es posible que Google esté bloqueando ese dispositivo. Intente seguir estos pasos:

Para proteger su cuenta, Google puede dificultar el acceso a su cuenta si sospechamos que no es usted. Por ejemplo, Google podría solicitar información adicional además de su nombre de usuario y contraseña si está viajando o si intenta iniciar sesión en su cuenta desde un nuevo dispositivo.

Vaya a https://g.co/allowaccess desde un dispositivo diferente que haya utilizado anteriormente para acceder a su cuenta de Google y siga las instrucciones. Intenta iniciar sesión nuevamente desde la aplicación bloqueada.


Tuve este problema también, pero la solución no tenía nada que ver con la codificación. Asegúrese de poder conectarse a Gmail. Ping smtp.gmail.com. Si no obtiene una respuesta, consulte la configuración de su firewall. También podría ser un problema de configuración de proxy.


import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class SendMail1 { public static void main(String[] args) { // Recipient''s email ID needs to be mentioned. String to = "valid email to address"; // Sender''s email ID needs to be mentioned String from = "valid email from address"; // Get system properties Properties properties = System.getProperties(); properties.put("mail.smtp.starttls.enable", "true"); properties.put("mail.smtp.host", "smtp.gmail.com"); properties.put("mail.smtp.port", "587"); properties.put("mail.smtp.auth", "true"); Authenticator authenticator = new Authenticator () { public PasswordAuthentication getPasswordAuthentication(){ return new PasswordAuthentication("userid","password");//userid and password for "from" email address } }; Session session = Session.getDefaultInstance( properties , authenticator); try{ // Create a default MimeMessage object. MimeMessage message = new MimeMessage(session); // Set From: header field of the header. message.setFrom(new InternetAddress(from)); // Set To: header field of the header. message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // Set Subject: header field message.setSubject("This is the Subject Line!"); // Now set the actual message message.setText("This is actual message"); // Send message Transport.send(message); System.out.println("Sent message successfully...."); }catch (MessagingException mex) { mex.printStackTrace(); } } }