Я видел несколько сообщений, которые предлагают решение чего-то очень похожего на мою ситуацию, но по какой-то причине это не работает для меня.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();
}
}
У меня определенно было это. Должно быть, он потерял эту настройку во время одной из перестановок. –