通过具有双向身份validation的Gmail帐户中的java发送电子邮件

我想创建一个可以向任何指定收件人(gmail)发送电子邮件的function。 我遇到的问题是当我尝试提供在gmail中使用双向身份validation的凭据时,我的身份validation失败。 帐户没有双向身份validation,它工作正常。 那么我需要做些什么来启用双向身份validation?

以下是我用来发送电子邮件的代码。

public static boolean sendMail(String fromMail, String fromPassword, String toMail, String message) { try { final String user = fromMail, password = fromPassword; Properties prop = new Properties(); prop.setProperty("mail.smtp.host", "smtp.gmail.com"); prop.setProperty("mail.smtp.port", "465"); prop.setProperty("mail.smtp.auth", "true"); prop.setProperty("mail.smtp.ssl.enable", "true"); // prop.put("mail.debug", "true"); // prop.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); Session sess = Session.getDefaultInstance(prop, new Authenticator() { @Override protected javax.mail.PasswordAuthentication getPasswordAuthentication() { return new javax.mail.PasswordAuthentication(user, password); } }); // Session sess=Session.getDefaultInstance(prop); sess.setDebug(true); Message msg = new MimeMessage(sess); msg.setFrom(new InternetAddress(fromMail)); msg.setRecipient(Message.RecipientType.TO, new InternetAddress(toMail)); msg.setText(message); msg.setContent(message, "text/html"); Transport.send(msg); return true; } catch (MessagingException msgEx) { msgEx.printStackTrace(); return false; } } 

通过https://accounts.google.com/IssuedAuthSubTokens创建应用专用密码。 另请查看有关应用程序特定密码的YouTubevideo 。

这有两个解决方案:

  1. 您可以通过“friek”提供的链接生成应用程序专用密码,即“https://accounts.google.com/IssuedAuthSubTokens”,并使用生成的应用程序专用密码替换原始密码 。 我已经完成了这项工作

要么

  1. 出现exception(javax.mail.AuthenticationFailedException:535-5.7.1特定于应用程序的密码)的原因是您可能已激活gmail帐户的两步validation。 如果您使用的帐户未激活两步validation,则可以使用原始密码发送电子邮件。 我也试过这个,它的工作正常。