Acessar MS Exchange com JavaMail

3 respostas
danieldestro

Caros,

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.

Achei uma API de terceiros (http://www.javaexchangeconnector.com), mas não consegui fazer funcionar o teste que vem.

Alguém obteve sucesso nessa jornada? Podem dar alguma ajuda?

Grato

3 Respostas

danieldestro

Eu precisava enviar e-mail via Exchange e gravar a mensagem enviada no Inbox, por exemplo.
Consegui via IMAP: http://www.guj.com.br/posts/list/72600.java#407411

L

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.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/e2k3/e2k3/_esdk_sending_a_message_webdav.asp

luisbizzan

Bom dia cara,

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.

public void enviar() throws Exception{
        Properties props = System.getProperties();
        props.put("mail.smtp.host", (Global.isEmpty(SMTPServer) ? "localhost" : SMTPServer));
        
        javax.mail.Session session = null;

        if (!Global.isEmpty(usuario) && !Global.isEmpty(senha)){
            props.put("mail.smtp.auth", "true");
            javax.mail.Authenticator auth = auth = new javax.mail.Authenticator() {
                @Override
                public javax.mail.PasswordAuthentication getPasswordAuthentication() {
                    return new javax.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.Message message = new javax.mail.internet.MimeMessage(session);
        javax.mail.internet.InternetAddress iaFrom = new javax.mail.internet.InternetAddress(from);
        javax.mail.internet.InternetAddress iaTo[] = javax.mail.internet.InternetAddress.parse(to);
        
        message.setFrom(iaFrom);
        message.setRecipients(javax.mail.Message.RecipientType.TO,iaTo);
        message.setSubject(subject);
        message.setSentDate(new java.util.Date());

        //Define uma mensagem de varias partes
        Multipart multipart = new MimeMultipart();
        //define o corpo da mensagem
        MimeBodyPart messageBodyPart = new MimeBodyPart();
        //define o texto da mensagem
        messageBodyPart.setText(text);
        //insere o corpo da mensagem
        multipart.addBodyPart(messageBodyPart);

        if (!Global.isEmpty(arquivo)){
            String arqs [] = arquivo.split(";");
            for(int i=0;i<arqs.length;i++){
               if(arqs[i].length() != 0){
                  //define o arquivo a ser anexado
                  messageBodyPart = new MimeBodyPart();
                  DataSource source = new FileDataSource(arqs[i]);
                  messageBodyPart.setDataHandler(new DataHandler(source));
                  messageBodyPart.setFileName(arqs[i]);
                  //insere o arquivo anexado
                  multipart.addBodyPart(messageBodyPart);
               }
            }
        }
        
        //message.setContent(multipart, (Global.isEmpty(content) ? "text/plain" : content));
        message.setContent(multipart);
        javax.mail.Transport.send(message);
    }

Se alguem souber agradeço a ajuda !!! >

Criado 30 de novembro de 2007
Ultima resposta 8 de nov. de 2011
Respostas 3
Participantes 3