通过具有双向身份验证的gmail帐户中的java发送电子邮件

通过具有双向身份验证的gmail帐户中的java发送电子邮件,java,gmail,jakarta-mail,Java,Gmail,Jakarta Mail,我想做一个功能,可以发送电子邮件给任何指定的收件人(gmail)。我面临的问题是,当我试图提供在gmail中使用双向身份验证的凭据时,身份验证失败。由于帐户没有双向身份验证,因此工作正常。那么,在启用双向身份验证的情况下,我必须做些什么才能使事情发生呢 下面是我用来发送电子邮件的代码 public static boolean sendMail(String fromMail, String fromPassword, String toMail, String message) {

我想做一个功能,可以发送电子邮件给任何指定的收件人(gmail)。我面临的问题是,当我试图提供在gmail中使用双向身份验证的凭据时,身份验证失败。由于帐户没有双向身份验证,因此工作正常。那么,在启用双向身份验证的情况下,我必须做些什么才能使事情发生呢

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

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;
        }
    }

通过在创建特定于应用程序的密码。还可以查看特定于应用程序的密码。

有两种解决方案:

  • 您可以通过“friek”提供的链接生成特定于应用程序的密码,即https://accounts.google.com/IssuedAuthSubTokens“并使用生成的应用程序特定密码替换原始密码。我已经做到了这一点,它的工作
  • 出现异常(javax.mail.AuthenticationFailedException:535-5.7.1需要特定于应用程序的密码)的原因是您可能已激活gmail帐户的两步验证。如果您使用的帐户未激活两步验证,则可以使用原始密码发送电子邮件。我也试过这个,效果很好

  • 我检查了链接并获得了一个特定于应用程序的密码,我能够成功登录到浏览器。但是在这里的代码中的某个地方,我也需要指定密码。因为它在生成特定于应用程序的密码后仍然给我错误。很有趣。不久前,当我遇到这个问题时,谷歌smtp服务给了我一条双向身份验证特定的错误消息。你查过了吗?是的,我只是在说那个。我收到了一个名为“javax.mail.AuthenticationFailedException:535-5.7.1需要特定于应用程序的密码”的错误。因此,如何解决这个问题呢?我可以想象的唯一方法是,在我之前提供的url上创建特定于应用程序的密码,并将其用于身份验证。如果需要特定于应用程序的密码,您不应该再使用原始密码。您是对的,我刚刚创建了一个新帐户,没有两步身份验证,它对我很顺利。谢谢你的帮助!!