javax. mail. Authenticationfailedexception: connection failed, no password specified?
                                        
                    •
                    Java                                    
                This program attempts to send an email but throws a runtime exception:
javax.mail.AuthenticationFailedException: Failed to connect,no password specified?
Why do I receive this exception when I provide the correct user name and password for authentication?
Both sender and recipient have g - mail accounts Both sender and recipient have g - mail accounts The sender has disabled the two-step verification process
This is the code:
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
class tester {
    public static void main(String args[]) {
        Properties props = new Properties();
        props.put("mail.smtp.host","smtp.gmail.com");
        props.put("mail.stmp.user","username");
        //To use TLS
        props.put("mail.smtp.auth","true"); 
        props.put("mail.smtp.starttls.enable","true");
        props.put("mail.smtp.password","password");
        //To use SSL
        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,null);
        String to = "me@gmail.com";
        String from = "from@gmail.com";
        String subject = "Testing...";
        Message msg = new MimeMessage(session);
        try {
            msg.setFrom(new InternetAddress(from));
            msg.setRecipient(Message.RecipientType.TO,new InternetAddress(to));
            msg.setSubject(subject);
            msg.setText("Working fine..!");
            Transport transport = session.getTransport("smtp");
            transport.connect("smtp.gmail.com",465,"username","password");
            transport.send(msg);
            System.out.println("fine!!");
        }
        catch(Exception exc) {
            System.out.println(exc);
        }
    }
}
Even if a password is provided, I get an exception Why not certification?
Solution
Try creating a javax mail. Authenticator object and send the attribute object to the session object
Authenticator edit:
You can modify this accept user name and password, you can store them there, or where you want
public class SmtpAuthenticator extends Authenticator {
public SmtpAuthenticator() {
    super();
}
@Override
public PasswordAuthentication getpasswordAuthentication() {
 String username = "user";
 String password = "password";
    if ((username != null) && (username.length() > 0) && (password != null) 
      && (password.length   () > 0)) {
        return new PasswordAuthentication(username,password);
    }
    return null;
}
In the course you email:
SmtpAuthenticator authentication = new SmtpAuthenticator();
javax.mail.Message msg = new MimeMessage(Session
                    .getDefaultInstance(emailProperties,authenticator));
                
                            The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
                        
                                            
                        THE END
                    
                    
                    
                                                        二维码
                        
                        
                                                
                        