Using javamail, gmail refusing authentication due to application being less secure

后端 未结 3 883
逝去的感伤
逝去的感伤 2021-02-07 07:33

I am running a very basic Javamail program to try sending emails. This is stand-alone program with main(). Once I get it working, I plan to use Javamail in a servlet running und

3条回答
  •  温柔的废话
    2021-02-07 08:11

    how can I make my application more secure so that gmail does not refuse authentication?


    One good way in my opinion would be to enable two-way authentication and replace the normal Gmail password with the generated application specific password in your code.

    final String smtpServer = "smtp.gmail.com";
    final String userAccount = "****@gmail.com"; // Sender Account.
    final String password = "****"; // Password -> Application Specific Password.
    final String SOCKET_FACTORY = "javax.net.ssl.SSLSocketFactory";
    final String smtpPort = "587";
    final String PORT = "465";
    
    final Properties props = new Properties();
    props.put("mail.smtp.host", smtpServer);
    props.put("mail.smtp.user", userAccount);
    props.put("mail.smtp.password", password);
    props.put("mail.smtp.port", smtpPort);
    props.put("mail.smtp.auth", true);
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.debug", "false");
    props.put("mail.smtp.socketFactory.port", PORT);
    props.put("mail.smtp.socketFactory.class", SOCKET_FACTORY);
    props.put("mail.smtp.socketFactory.fallback", "false");
    
    Session session = Session.getInstance(props,
    new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(userAccount, password);
        }
    });
    MimeMessage mimeMessage = new MimeMessage(session);
    final Address toAddress = new InternetAddress("****@outlook.com"); // toAddress
    final Address fromAddress = new InternetAddress(userAccount);
    mimeMessage.setContent("This is a test mail...", "text/html; charset=UTF-8");
    mimeMessage.setFrom(fromAddress);
    mimeMessage.setRecipient(javax.mail.Message.RecipientType.TO, toAddress);
    mimeMessage.setSubject("Test Mail...");
    Transport transport = session.getTransport("smtp");
    transport.connect(smtpServer, userAccount, password);
    transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
    

提交回复
热议问题