title: Javamail NTLM Authentication Failure
body: <p>Trying to connect to Exchange server using NTLM in JavaMail.  I can connect to SMTP, but not IMAP.  I can also authenticate via the OS X Mail.app application using the identical host/username/password, account type = "IMAP", Port 143, ssl=false, authentication=NTLM, Domain Name="".</p>
  
  <p>The connecting code:</p>
  
  <pre><code>import javax.mail.Session;
  import javax.mail.Transport;
  import javax.mail.Store;
  import java.util.Properties;
  
      public class NTLMTest {
          public static void main(String[] args) throws Exception {
              final String host = "example.com";
              final String user = "bob";
              final String password = "password";
  
              final Properties properties = new Properties();
              Session session = Session.getDefaultInstance(properties);
              session.setDebug(true);
  
              // SMTP CONNECT
              final Transport transport = session.getTransport("smtp");
              transport.connect(host, user, password);
              System.out.println("SMTP Connect successful");
  
              // IMAP CONNECT
              final Store store = session.getStore("imap");
              store.connect(host, user, password);
              System.out.println("IMAP Connect Successful");
  
          }
      }
  </code></pre>
  
  <p>The output:</p>
  
  <pre><code>DEBUG: setDebug: JavaMail version 1.4.3
  DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
  DEBUG SMTP: useEhlo true, useAuth false
  DEBUG SMTP: trying to connect to host "example.com", port 25, isSSL false
  220 server18.example.com ESMTP Sendmail 8.14.3/8.14.3/Debian-5+lenny1; Thu, 2 Dec 2010 18:05:30 +0100; (No UCE/UBE) logging access from: xxx.xxx.xxx.xxx
  DEBUG SMTP: connected to host "example.com", port: 25
  
  EHLO 192.168.1.107
  250-server18.example.com Hello c-xxxx [xxx.xxx.xxx.xxx], pleased to meet you
  250-ENHANCEDSTATUSCODES
  250-PIPELINING
  250-8BITMIME
  250-SIZE 20971520
  250-DSN
  250-ETRN
  250-AUTH DIGEST-MD5 CRAM-MD5 LOGIN PLAIN
  250-STARTTLS
  250-DELIVERBY
  250 HELP
  DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
  DEBUG SMTP: Found extension "PIPELINING", arg ""
  DEBUG SMTP: Found extension "8BITMIME", arg ""
  DEBUG SMTP: Found extension "SIZE", arg "20971520"
  DEBUG SMTP: Found extension "DSN", arg ""
  DEBUG SMTP: Found extension "ETRN", arg ""
  DEBUG SMTP: Found extension "AUTH", arg "DIGEST-MD5 CRAM-MD5 LOGIN PLAIN"
  DEBUG SMTP: Found extension "STARTTLS", arg ""
  DEBUG SMTP: Found extension "DELIVERBY", arg ""
  DEBUG SMTP: Found extension "HELP", arg ""
  DEBUG SMTP: Attempt to authenticate
  DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM 
  AUTH LOGIN
  334 VXNlcm5hbWU6
  YWR2aWVzZW5raWVzMDU=
  334 UGFzc3dvcmQ6
  ZGlja2hvbmluZw==
  235 2.0.0 OK Authenticated
  SMTP Connect successful
  DEBUG: getProvider() returning javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc]
  DEBUG: mail.imap.fetchsize: 16384
  DEBUG: mail.imap.statuscachetimeout: 1000
  DEBUG: mail.imap.appendbuffersize: -1
  DEBUG: mail.imap.minidletime: 10
  DEBUG: trying to connect to host "example.com", port 143, isSSL false
  * OK server18.example.com Cyrus IMAP4 v2.1.18-IPv6-Debian-2.1.18-5.1 server ready
  A0 CAPABILITY
  * CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ MAILBOX-REFERRALS NAMESPACE UIDPLUS ID NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES IDLE AUTH=DIGEST-MD5 AUTH=NTLM AUTH=CRAM-MD5 ANNOTATEMORE
  A0 OK Completed
  IMAP DEBUG: AUTH: DIGEST-MD5
  IMAP DEBUG: AUTH: NTLM
  IMAP DEBUG: AUTH: CRAM-MD5
  DEBUG: protocolConnect login, host=example.com, user=bob, password=&lt;non-null&gt;
  DEBUG NTLM: type 1 message: Type1Message[suppliedDomain=,suppliedWorkstation=192.168.1.107,flags=0x00000201]
  DEBUG NTLM: type 1 message length: 45
  A1 AUTHENTICATE NTLM
  + 
  TlRMTVNTUAABAAAAASIAAAAAAAAAAAAADQANACAAAAAxOTIuMTY4LjEuMTA3
  + TlRMTVNTUAACAAAAAAAAADAAAAABIgAApdhJrA6NzmwAAAAAAAAAAAAAAAAAAAAA
  TlRMTVNTUAADAAAAGAAYAEAAAAAwADAAWAAAAAAAAAAAAAAAHAAcAIgAAAAaABoApAAAAAAAAAAAAAAAAQIAALV6mIutJKdZSH4IZGmvNqNFxJafzInd0yJDR4J3oe3LyBls0Y75UuwBAQAAAAAAANAS9yNDkssBVbH5v087iUIAAAAAAAAAAGEAZAB2AGkAZQBzAGUAbgBrAGkAZQBzADAANQAxADkAMgAuADEANgA4AC4AMQAuADEAMAA3AA==
  A1 NO authentication failure
  Exception in thread "main" javax.mail.AuthenticationFailedException: authentication failure
      at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:613)
      at javax.mail.Service.connect(Service.java:291)
      at javax.mail.Service.connect(Service.java:172)
      at com.prosc.emailplugin.NTLMTest.main(NTLMTest.java:25)
  Disconnected from the target VM, address: '127.0.0.1:56125', transport: 'socket'
  
  Process finished with exit code 1
  </code></pre>
  
  <p>I tried wrapping the username with backslashes, per <a href="http://www.oracle.com/technetwork/java/faq-135477.html#Exchange-login" rel="noreferrer">http://www.oracle.com/technetwork/java/faq-135477.html#Exchange-login</a> I get the following error:</p>
  
  <pre><code>Exception in thread "main" javax.mail.AuthenticationFailedException: One time use of a plaintext password will enable requested mechanism for user
  </code></pre>
  
  <p>Backslashes around the username in the SMTP connect portion cause it to fail.  I can't tell if the "One time use" error is a step in the right direction or not.</p>