2

我正在尝试使用 java mail api 发送邮件。除了 Authenticator 类之外,代码中的所有内容都正常。它发出警告...

Constructor PasswordAuthentication can not be applied to given types.
required java.lang.String,java.lang.char[]

这是我收到警告错误但无法解决问题的代码片段...

Authenticator auth = new Authenticator() {

        @Override
        public PasswordAuthentication getPasswordAuthentication() {
 error           return new PasswordAuthentication(userName, password);
        }
    };
      error   Session session = Session.getInstance(properties, auth);

这两行带有 //error 的代码中给出了错误..

请帮我。提前致谢..

4

4 回答 4

8

PasswordAuthentication构造函数只接受一个String和一个char数组作为参数。所以你应该这样做:

return new PasswordAuthentication(userName, password.toCharArray());

编辑 :

问题是Session.getInstance(java.util.Properties props, Authenticator authenticator) 需要包中的一个Authentificator对象javax.mail

我认为您导入了错误的包。它应该是javax.mail.Authenticator而不是java.net.Authenticator

所以你应该使用包中的对象PasswordAuthenticationjavax.mail接受两个Strings作为参数),而不是包中的对象(PasswordAuthentification接受java.net一个String和一个char数组)。

于 2013-11-14T09:08:49.727 回答
1

当你调用构造函数时PasswordAuthentication(String a, char[] b)

异常告诉您您在参数中传递了错误的类型,例如:

你的代码:return new PasswordAuthentication(userName, password);

userName 或 password 类型错误,可能 userName 不是 String 或 password 不是 char[],请仔细查看。

于 2013-11-14T09:09:25.420 回答
1

尝试

Session session = Session.getInstance(properties,
          new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
          });
于 2013-11-14T09:14:25.983 回答
0

如果您使用的是 gmail 帐户,则必须禁用两步验证,或者您可以在您的 gmail 帐户应用程序密码上设置并在您的应用程序中使用应用程序密码。

https://support.google.com/accounts/answer/185833?hl=en

于 2016-11-07T22:00:39.590 回答