quinta-feira, 11 de outubro de 2012

Enviar email usando SMTP - parte II

Vamos agora apresentar uma classe simples para os testes e os resultados da execução


/*
 * classe de teste
 */

package testeenvioemail;

/**
 *
 * @author Henrique
 */

public class TesteEnvioEmail {

    /**
     * @param args não utilizado
     */

    public static void main(String[] args) {
        /*
         * Cria o remetente cadastrando dados do usuário, senha, host etc
         *
         */

        EmailRemetente rmt = new EmailRemetente();
        rmt.setUsuarioNome("Henrique Moura");
        rmt.setUsuarioEmail("COLOQUE AQUI SEU EMAIL");
        rmt.setSenha("A SENHA DO PROVEDOR PARA SEU USUÁRIO");
        rmt.setNomeHost("ENDEREÇO DO SERVIDOR SMTP");
        rmt.setPortaAlternativa(); // no meu caso preciso usar a porta 587
       
         /*
          * cria a mensagem composta por
          * 1) destinatario
          * 2) assunto
          * 3) corpo
         */

        EmailMensagem msg = new EmailMensagem();
        msg.setDestinatario("ENDEREÇO DE EMAIL PARA TESTES", "Henrique");
        msg.setAssunto("Assunto da mensagem - teste");
        msg.setCorpo("teste de mensagem enviada por email... via java");
       
        try {
           
            /*
             * prepara e envia o email
             */

            EnviarEmail email = new EnviarEmail(rmt, msg);
                       
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
   }
}


No Netbeans você deve configurar as bibliotecas para tudo funcionar:



Vamos ver a saída do programa:
run:
DEBUG: JavaMail version 1.4.5
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: setDebug: JavaMail version 1.4.5
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.fournet.inf.br", port 587, isSSL false
220 parodius.seven.com.br ESMTP Postfix
DEBUG SMTP: connected to host "smtp.fournet.inf.br", port: 587

EHLO 192.168.0.113
250-SERVIDOR SELECIONADO
250-PIPELINING
250-SIZE 31457280
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250 8BITMIME
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "SIZE", arg "31457280"
DEBUG SMTP: Found extension "ETRN", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Attempt to authenticate
DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded
DEBUG SMTP: use8bit false
MAIL FROM:<EMAIL DO REMETENTE>
250 2.1.0 Ok
RCPT TO:<EMAIL DO DESTINATÁRIO>
250 2.1.5 Ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   EMAIL DO DESTINATÁRIO
DATA
354 End data with <CR><LF>.<CR><LF>
From: Henrique Moura <
EMAIL DO REMETENTE>
To:
EMAIL DO DESTINATÁRIOMessage-ID: <29930061.0.1350336137396.JavaMail.Henrique@Henrique-PC>
Subject: Assunto da mensagem - teste
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

teste de mensagem... via java
.
250 2.0.0 Ok: queued as 4B73B95D53
QUIT
221 2.0.0 Bye
CONSTRUÍDO COM SUCESSO (tempo total: 4 segundos)

Se você rodar o código conforme está neste post e no anterior, a primeira dúvida que vai surgir na sua cabeça é: como é que está aparecendo este tanto de linhas de debug na tela? É que na verdade eu acrescentei duas linhas dentro da classe EnviarEmail somente para que vocês vissem as mensagens. Estas mensagens ajudar a descobrir algum erro, como por exemplo autenticação, porta errada etc. As linhas que coloquei são:
  • props.put("mail.debug", "true");
  • session.setDebug(true);
A linha em verde acima também só vai aparecer se você estiver rodando no Netbeans. É uma informação da IDE sobre o tempo de montagem e compilação das classes no arquivo JAR.

Você agora pode incrementar as classes:
  • colocando autenticação para SSL e TLS;
  • pode colocar anexos;
  • pode colocar múltiplos destinatários;
  • etc.


Sem as linhas de debug ao rodar o programa você vai ter somente:
run:
CONSTRUÍDO COM SUCESSO (tempo total: 4 segundos)

Nenhum comentário:

Postar um comentário