Resolver erro javax.correio.Autenticaçãofailedexception
não estou familiarizado com esta função para enviar correio em java. Estou a receber um erro ao enviar e-mail para repor a senha. Espero que me possa dar uma solução.
Abaixo está o meu 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;
}
}
lança o seguinte erro:
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)
14 answers
Devias mudar a porta para {[[1]}, Eu testei o teu código e está a funcionar bem
Se ainda ocorrer um erro, por favor mude a variável de sessão para o código abaixo:
Session session = Session.getInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
});
Pode ser este problema causa pela protecção da conta do Gmail. Basta carregar abaixo do link e desactivar a segurança settings.It vai funcionar. https://www.google.com/settings/security/lesssecureapps
- https://www.google.com/settings/security/lesssecureapps Vai para a tua conta e liga a segurança que vai funcionar.
A maior parte do erro de excepção de Autenticationfiel ocorreu quando o sinal foi impedido, autentique-se primeiro no seu gmail e vá para https://www.google.com/settings/security/lesssecureapps e verificar ligar. Resolvi este tipo de problema assim.
Por omissão, a conta Gmail é altamente segura. Quando usamos o Gmail smtp da ferramenta não-gmail, o email é bloqueado. Para testar no nosso ambiente local, torne a sua conta gmail menos segura como
- autenticar-se no Gmail.
- acesse o URL como https://www.google.com/settings/security/lesssecureapps
- Seleccione "Ligar"
Alterar isto (definir a aplicação menos segura): https://www.google.com/settings/security/lesssecureapps
Se estiver a aceder à sua conta do gmail a partir de uma nova aplicação ou dispositivo, o Google pode estar a bloquear esse dispositivo. Tente seguir estes passos:
Para proteger a sua conta, o Google pode dificultar a entrada na sua conta se suspeitarmos que não é o Senhor. Por exemplo, a Google pode pedir informações adicionais para além do seu nome de utilizador e senha se estiver a viajar ou se tentar entrar na sua conta a partir de um novo dispositivo.Ir para https://g.co/allowaccess a partir de um dispositivo diferente que tenha usado anteriormente para aceder à sua conta Google e seguir as instruções. Tente assinar de novo a partir da aplicação bloqueada.
Quando mudei a depuração da sessão para true
Session session = Session.getDefaultInstance(props, new GMailAuthenticator("[email protected]", "xxxxx"));
session.setDebug(true);
Tenho o url de Ajuda https://support.google.com/mail/answer/78754 da consola juntamente com o javax.correio.A autenticação falhou.
A partir dos degraus do link, segui cada passo. Quando eu mudei minha senha com mistura de letras, números e símbolos para ser minha surpresa, o email foi gerado sem exceção de autenticação. Nota: O meu velho a senha era menos segura.2 possíveis razões:
- o seu nome de utilizador pode necessitar de todo o id de E-mail '[email protected]"
- mais óbvio: a senha está errada. Depurar para ver se a senha que está a ser usada está correcta.
trying to connect to host "smtp.gmail.com", port 465, isSSL false
Enganou-se na configuração do smtp do gmail. O Gmail necessita de SSL. Por favor, veja tutoriais sobre como enviar e-mail via Java via SMTP Gmail, eg: http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/
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();
}
}
}
Os problemas de autenticação podem ser aliviados activando a verificação de 2 passos do google para a conta em uso e criando uma senha específica do aplicativo. Tive o mesmo problema da operação.
-
Primeiro Passo
package com.student.mail; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; /** * * @author jorge santos */ public class GoogleMail { public static void main(String[] args) { Properties props = new Properties(); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.socketFactory.port", "465"); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.port", "465"); Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("[email protected]","Silueta95#"); } }); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress("[email protected]")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]")); message.setSubject("Testing Subject"); message.setText("Test Mail"); Transport.send(message); System.out.println("Done"); } catch (MessagingException e) { throw new RuntimeException(e); } } }
-
Activar a segurança do gmail
https://myaccount.google.com/u/2/lesssecureapps?pli=1&pageId=none