Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javamail验证器不工作_Java_Smtp_Jakarta Mail_Gssapi_Authenticator - Fatal编程技术网

javamail验证器不工作

javamail验证器不工作,java,smtp,jakarta-mail,gssapi,authenticator,Java,Smtp,Jakarta Mail,Gssapi,Authenticator,这是我向smtp服务器发送邮件的配置 但它不使用会话验证器并强制我从控制台输入凭证,当我从控制台输入凭证时,它会成功地发送邮件,这部分配置是错误的 Properties properties = new Properties(); //clear it later properties.setProperty("mail.debug", "true"); properties.put("mail.smtp.socketFactory.port", "5

这是我向smtp服务器发送邮件的配置 但它不使用会话验证器并强制我从控制台输入凭证,当我从控制台输入凭证时,它会成功地发送邮件,这部分配置是错误的

        Properties properties = new Properties();
    //clear it later 

    properties.setProperty("mail.debug", "true");
    properties.put("mail.smtp.socketFactory.port", "587");
    properties.put("mail.smtp.auth", true);
    properties.put("mail.smtp.starttls.enable", "true");
    properties.put("mail.smtp.host", "mail.example.com");
    properties.put("mail.smtp.port", "587");

    properties.put("mail.smtp.host", "mail.example.com");
    properties.put("mail.smtp.sasl.enable","true");   
    properties.put("mail.smtp.sasl.mechanisms","GSSAPI");
    properties.put("mail.smtp.sasl.authorizationid","admin");
    properties.put("mail.smtp.sasl.realm","EXAMPLE.COM");

    System.setProperty( "sun.security.krb5.debug", "true");
    System.setProperty( "java.security.krb5.realm", "EXAMPLE.COM");
    System.setProperty( "java.security.krb5.kdc", "ipa.example.com"); 


    URL jaasConfigURL = this.getClass().getResource("jaas.conf");
    jaasConfigURL.getFile();
    String jaasConfigFile = jaasConfigURL.getFile();
    System.out.println(jaasConfigFile);
    System.setProperty( "java.security.auth.login.config", jaasConfigFile);
    System.setProperty( "javax.security.auth.useSubjectCredsOnly", "false");

    session = Session.getInstance(properties, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication(){
            return new PasswordAuthentication("admin", "password");
        }
     });
        session.setDebug(true);
    MimeMessage mime = new SMTPMessage(session);
    mime.setFrom(new InternetAddress(from));
    mime.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
    mime.setSubject("test");
    mime.setText("hello world!");
    Transport.send(mime);
还有我的jaas.conf文件

krb5_initiate{
com.sun.security.auth.module.krb5LoginModule required
useTicketCache="true"
doNotPrompt="true"
debug="true";
};

如中所述,GSSAPI SASL实现不使用任何SASL回调,这就是从未使用JavaMail验证器的原因。SASL文档还描述了如何使用JAAS登录Kerberos。我自己没有这方面的经验。如果这不起作用,你可能会在办公室里找到更多的帮助。@BillShannon非常感谢比尔