Acessar o Miscrosoft Exchange com a API JavaMail parece ser uma odisséia, tendo em vista que ele usa protocolo NTLM para autenticação de usuário.
Eu até consigo enviar e-mails sem autenticação, via SMTP, porém acessá-lo com autenticação, para usar os recursos do próprio MSE parace missão impossível.
Voce precise que seja com JavaMail ? Voce pode utilizar a interface de WebDAV que o Exchange possui (que é a mesma utilizada pelo OWA) para enviar as mensagens e move-las para o Inbox. Eu ja fiz isso em projetos passados e não é muito dificil não. Pra dar uma ajuda, aqui vai um link com um exemplo, que apesar de estar em uma linguagem diferente deve servir para voce ver o formato da mensagem que voce envia pro exchange usando WebDAV.
Deixa eu ti perguntar, vcs conseguiram enviar e-mail via MS Exchange passando autenticação de usuario e senha? Eu tenho uma classe utilizando javax.mail mas não consigo enviar quando o e-mail passa autenticação, ele não me gera mensagem de erro porem não envia a mensagem. Aqui na empresa que eu trabalho nos filtramos essas mensagem e percebemos que eu só consigo enviar a mensagem quando é para o mesmo domínio. E tambem percebi que o cabeçario do e-mail esta bem diferente do enviado pelo Exchange, será que estou fazendo algo errado? Olha minha classe abaixo.
publicvoidenviar()throwsException{Propertiesprops=System.getProperties();props.put("mail.smtp.host",(Global.isEmpty(SMTPServer)?"localhost":SMTPServer));javax.mail.Sessionsession=null;if(!Global.isEmpty(usuario)&&!Global.isEmpty(senha)){props.put("mail.smtp.auth","true");javax.mail.Authenticatorauth=auth=newjavax.mail.Authenticator(){@Overridepublicjavax.mail.PasswordAuthenticationgetPasswordAuthentication(){returnnewjavax.mail.PasswordAuthentication(usuario,senha);}};session=javax.mail.Session.getInstance(props,auth);}else{props.put("mail.smtp.auth","false");session=javax.mail.Session.getDefaultInstance(props);}javax.mail.Messagemessage=newjavax.mail.internet.MimeMessage(session);javax.mail.internet.InternetAddressiaFrom=newjavax.mail.internet.InternetAddress(from);javax.mail.internet.InternetAddressiaTo[]=javax.mail.internet.InternetAddress.parse(to);message.setFrom(iaFrom);message.setRecipients(javax.mail.Message.RecipientType.TO,iaTo);message.setSubject(subject);message.setSentDate(newjava.util.Date());//Define uma mensagem de varias partesMultipartmultipart=newMimeMultipart();//define o corpo da mensagemMimeBodyPartmessageBodyPart=newMimeBodyPart();//define o texto da mensagemmessageBodyPart.setText(text);//insere o corpo da mensagemmultipart.addBodyPart(messageBodyPart);if(!Global.isEmpty(arquivo)){Stringarqs[]=arquivo.split(";");for(inti=0;i<arqs.length;i++){if(arqs[i].length()!=0){//define o arquivo a ser anexadomessageBodyPart=newMimeBodyPart();DataSourcesource=newFileDataSource(arqs[i]);messageBodyPart.setDataHandler(newDataHandler(source));messageBodyPart.setFileName(arqs[i]);//insere o arquivo anexadomultipart.addBodyPart(messageBodyPart);}}}//message.setContent(multipart, (Global.isEmpty(content) ? "text/plain" : content));message.setContent(multipart);javax.mail.Transport.send(message);}