2015-08-24 3 views
0

Я видел несколько сообщений, которые предлагают решение чего-то очень похожего на мою ситуацию, но по какой-то причине это не работает для меня.JavaMail через сервер Exchange с аутентификацией SSO

Например, here представлен в качестве рабочего примера, иллюстрирующего связанную с ним проблему, и here в качестве фактического ответа.

Мне нужно отправить электронное письмо как я с моей учетной записи Exchange через SMTP с использованием SSO UserID и пароля. Все это происходит в ограниченной корпоративной среде.

Из того, что я понимаю из информации об отладке, я успешно подключаюсь к SMTP-серверу, а затем завершает аутентификацию пользователя с помощью 530 5.7.1 Client was not authenticated. NTLM само по себе кажется включенным.

DEBUG:

DEBUG: setDebug: JavaMail version 1.5.4 
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle] 
DEBUG SMTP: useEhlo true, useAuth false 
DEBUG SMTP: trying to connect to host "server.bank.com", port 25, isSSL false 
220 server1.corp.bank.com Microsoft ESMTP MAIL Service ready at Mon, 24 Aug 2015 17:15:24 -0400 
DEBUG SMTP: connected to host "server.bank.com", port: 25 

EHLO server2.corp.bank.com 
250-server1.corp.bank.com Hello [xxx.xxx.xxx.xxx] 
250-SIZE 
250-PIPELINING 
250-DSN 
250-ENHANCEDSTATUSCODES 
250-X-ANONYMOUSTLS 
250-AUTH NTLM LOGIN 
250-X-EXPS GSSAPI NTLM 
250-8BITMIME 
250-BINARYMIME 
250-CHUNKING 
250-XEXCH50 
250-XRDST 
250 XSHADOW 
DEBUG SMTP: Found extension "SIZE", arg "" 
DEBUG SMTP: Found extension "PIPELINING", arg "" 
DEBUG SMTP: Found extension "DSN", arg "" 
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg "" 
DEBUG SMTP: Found extension "X-ANONYMOUSTLS", arg "" 
DEBUG SMTP: Found extension "AUTH", arg "NTLM LOGIN" 
DEBUG SMTP: Found extension "X-EXPS", arg "GSSAPI NTLM" 
DEBUG SMTP: Found extension "8BITMIME", arg "" 
DEBUG SMTP: Found extension "BINARYMIME", arg "" 
DEBUG SMTP: Found extension "CHUNKING", arg "" 
DEBUG SMTP: Found extension "XEXCH50", arg "" 
DEBUG SMTP: Found extension "XRDST", arg "" 
DEBUG SMTP: Found extension "XSHADOW", arg "" 
DEBUG SMTP: use8bit false 
MAIL FROM:<[email protected]> 
530 5.7.1 Client was not authenticated 
DEBUG SMTP: got response code 530, with response: 530 5.7.1 Client was not authenticated 

Существенная часть моего кода:

static void sendEmail(){ 

    Properties props = System.getProperties(); 
    props.setProperty("mail.smtp.host", host); 
    props.setProperty("mail.smtp.port", "25"); 
    // props.setProperty("mail.debug", "true"); 
    // props.setProperty("mail.debug.auth", "true"); 
    props.setProperty("mail.smtp.starttls.enable","true"); 
    props.setProperty("mail.smtp.auth.mechanisms", "NTLM"); 
    props.setProperty("mail.smtp.auth.ntlm.domain", user_sso_domain); 

    // Session session = Session.getDefaultInstance(props); 
    Session session = Session.getDefaultInstance(props, 
      new javax.mail.Authenticator() { 
       @Override 
       protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(user_sso_id, user_sso_password); 
       } 
      }); 
    session.setDebug(true); 

    try { 
     MimeMessage message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(email_from)); 
     message.addRecipient(Message.RecipientType.TO, 
       new InternetAddress(email_to)); 
     message.setSubject("Test Message"); 
     message.setText("This is my test message"); 
     Transport.send(message); 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 

Я был бы признателен за ваши предложения для дальнейшего поиска неисправностей.

EDIT

Работа кода после реализации исправления и улучшения практики от the accepted answer:

private static void sendEmail(){ 

    Properties props = System.getProperties(); 
    props.setProperty("mail.smtp.host", host); 
    props.setProperty("mail.smtp.port", "25"); 
    // props.setProperty("mail.debug", "true"); 
    // props.setProperty("mail.debug.auth", "true"); 
    props.setProperty("mail.smtp.auth", "true"); 
    props.setProperty("mail.smtp.starttls.enable","true"); 
    props.setProperty("mail.smtp.auth.mechanisms", "NTLM"); 
    props.setProperty("mail.smtp.auth.ntlm.domain", user_sso_domain); 

    Session session = Session.getInstance(props); 
    session.setDebug(true); 

    try { 
     MimeMessage message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(email_from)); 
     message.addRecipient(Message.RecipientType.TO, 
       new InternetAddress(email_to)); 
     message.setSubject("Test Message"); 
     message.setText("This is my test message"); 
     Transport.send(message, user_sso_id, user_sso_password); 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 

ответ

1

Вы должны установить "mail.smtp.auth" к "истинным".

Или, еще лучше, исправьте эти common mistakes и сделайте вашу программу намного проще.

+0

У меня определенно было это. Должно быть, он потерял эту настройку во время одной из перестановок. –

Смежные вопросы