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

时间:2011-12-23 21:52:05

标签: java gmail javamail

我想创建一个可以向任何指定收件人(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;
        }
    }

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

有两个解决方案:

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