Lendo conteúdo de e-mails

1 resposta
P

Bom dia a todos.

Tenho um fábrica de "Suportes Para Vasos de Plantas" (www.copaibaartefatos.com.br).

Pois bem! Eu mesmo desenvolvo minhas aplicações.

Desenvolvi um robô que envia e-mails para meus clientes via uma consulta em tabelas de e-mails de clientes (MySQL).

Tenho uma tabela de documentos que armazena todos os folders e demais documentos que envio com seus respectivos ID (Como número de edição de uma revista!). Quando envio e-mail marco (flag) na tabela de e-mails enviados que o mesmo já foi enviado ao cliente tal.

Agora que vem o complicador!

Preciso criar um robô que leia os e-mails de erros de retorno, para poder saber quais deles não conseguiram chegar. Sendo assim desmarco na tabela que o e-mail tal não foi recebido e volto a coloca-lo na lista de envios da próxima remessa.

Talvez não tenha sido muito claro, mas como sei que aqui só tem pessoas safas, sei que irão entender e me ajudar.

Desde já agradeço a colaboração de todos.

Abaixo a classe que envia os e-mails.

======================================================================

[color=green]
/**
*
*/
package principal;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.util.Date;

import java.util.Properties;
import javax.activation.DataHandler;

import javax.activation.FileDataSource;

import javax.mail.Authenticator;

import javax.mail.Message;

import javax.mail.PasswordAuthentication;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeBodyPart;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMultipart;

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;

/**

  • @author prsantos
*/

public class Enviar {

private boolean bolAutenticacaoServidor;

private String strServidorSMTP;

private String strPortaServidorSMTP;

private String strUsuarioSMTP;

private String strSenhaSMTP;

private String strNomeRemetente;

private String streMailRemetente;

private String strNomeDestinatario;

private String streMailDestinatario;

private String[] streMailDestinatarioCC;

private String[] streMailDestinatarioBCC;

private File[] fAnexos;

private String strAssunto;

private StringBuffer sbMensagem;

private boolean bolAvisoRecebimento;
public Enviar(final boolean bolAutenticacaoServidor,
              final String strServidorSMTP,
              final String strPortaServidorSMTP,
              final String strUsuarioSMTP,
              final String strSenhaSMTP,
              final String strNomeRemetente,
              final String streMailRemetente,
              final String strNomeDestinatario,
              final String streMailDestinatario,
              final String[] streMailDestinatarioCC,
              final String[] streMailDestinatarioBCC,
              final File[] fAnexos,
              final String strAssunto,
              final StringBuffer sbMensagem,
              final boolean bolAvisoRecebimento) {

    boolean deuErro = false;
    String mensagem = "";
//        if (strServidorSMTP == null || strServidorSMTP.trim().length() == 0)

//        {    mensagem = mensagem + “Faltou especificar servidor SMTP” + ‘\n’;

//            deuErro= true;

//        }

//        if (strUsuarioSMTP == null || strUsuarioSMTP.trim().length() == 0)

//        {    mensagem = mensagem + “Faltou especificar o usuario” + ‘\n’;

//            deuErro= true;

//        }
if(deuErro)
    {    // Efetuar log
       
    } else {
        this.bolAutenticacaoServidor = bolAutenticacaoServidor;
        this.strServidorSMTP = strServidorSMTP;
        this.strPortaServidorSMTP = strPortaServidorSMTP;
        this.strUsuarioSMTP = strUsuarioSMTP;
        this.strSenhaSMTP = strSenhaSMTP;
        this.strNomeRemetente = strNomeRemetente;
        this.streMailRemetente = streMailRemetente;
        this.strNomeDestinatario = strNomeDestinatario;
        this.streMailDestinatario = streMailDestinatario;
        this.streMailDestinatarioCC = streMailDestinatarioCC;
        this.streMailDestinatarioBCC = streMailDestinatarioBCC;
        this.fAnexos = fAnexos;
        this.strAssunto = strAssunto;
        this.sbMensagem = sbMensagem;
        this.bolAvisoRecebimento = bolAvisoRecebimento;
       
        this.envia();
    }
}

private void envia() {
    try {
        //Configura algumas propriedades e pega a seção padrão
       
        Properties props = new Properties();
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.host", this.strServidorSMTP);
        props.put("mail.smtp.auth", this.bolAutenticacaoServidor);
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.port", this.strPortaServidorSMTP);

// props.put("mail.mime.charset", "ISO-8859-1");
// props.put("mail.mime.charset", "UTF-8");

Session session;
       
        if (this.bolAutenticacaoServidor) {
            session = Session.getDefaultInstance(props,    new Authenticator() {
                public PasswordAuthentication getPasswordAuthentication() {
                      //Dados de acesso ao email do remetente
//                          return new PasswordAuthentication(strUsuarioSMTP, strSenhaSMTP);

return new PasswordAuthentication("[email removido]", "************");

//                          return new PasswordAuthentication(<a>"[email removido]</a>", "************");

}

});

} else {

session = Session.getDefaultInstance(props, null);

};
session.setDebug(false);
       
        //Cria Mensagem
        MimeMessage msg = new MimeMessage(session);
       
        //Define o endereço do remetente (DE / FROM)
        msg.setFrom(new InternetAddress(this.streMailRemetente, strNomeRemetente));
       
        //Define o endereço do destinatário (PARA / TO)
        msg.setRecipient(Message.RecipientType.TO, new InternetAddress(streMailDestinatario, strNomeDestinatario));
       
        //Define os endereços dos destinatário (Com Cópias / CC)
        if (this.streMailDestinatarioCC.length &gt; 0) {
            InternetAddress[] iaEmailDestinatarioCC = new InternetAddress[streMailDestinatarioCC.length];
            for (int i = 0; i &lt; streMailDestinatarioCC.length; i++) {
                iaEmailDestinatarioCC[i] = new InternetAddress(streMailDestinatarioCC[i]);
            }
            msg.setRecipients(Message.RecipientType.CC, iaEmailDestinatarioCC);
        } else {
            //
        }
       
        //Define os endereços dos destinatário (Com Cópias / BCC)
        if (this.streMailDestinatarioBCC.length &gt; 0) {
            InternetAddress[] iaEmailDestinatarioBCC = new InternetAddress[streMailDestinatarioBCC.length];
            for (int i = 0; i &lt; streMailDestinatarioBCC.length; i++) {
                iaEmailDestinatarioBCC[i] = new InternetAddress(streMailDestinatarioBCC[i]);
            }
            msg.setRecipients(Message.RecipientType.BCC, iaEmailDestinatarioBCC);
        } else {
            //
        }

        //Define o assunto
        msg.setSubject(this.strAssunto);
       
        //Aviso de Recebimento
        if (bolAvisoRecebimento) {
            msg.addHeaderLine("ReturnReceipt");
            msg.setHeader("ReturnReceipt", "1");
           
            msg.addHeaderLine("Disposition-Notification-To");
            msg.setHeader("Disposition-Notification-To", strNomeRemetente);
        }
       
        //Define data
        msg.setSentDate(new Date());
   
        //Cria e preenche a primeira parte da mensagem
        MimeBodyPart mbpCorpoMensagem = new MimeBodyPart();
       
        //Mensagem
        mbpCorpoMensagem.setContent(readFileAsString("C:\\FolderCopaíba.html"), "text/html");

// mbpCorpoMensagem.setContent(readFileAsString("http://www.copaibaartefatos.com.br//mail-mkt/\index.html"),"text/html; charset=utf-8");
//mbpCorpoMensagem.setText(sbMensagem.toString());

//Cria MultiParte
        MimeMultipart mmpMultiParte = new MimeMultipart();
       
        //
        mmpMultiParte.addBodyPart(mbpCorpoMensagem);
        msg.setContent(mmpMultiParte);       
       
        if (this.fAnexos.length &gt; 0) {
            for (int i = 0; i &lt; this.fAnexos.length; i++) {
                if (!this.fAnexos[i].isDirectory()) {
                    //Anexa arquivo
                    //Cria e preenche a segunda parte da mensagem
                    MimeBodyPart mbpAnexos = new MimeBodyPart();
                    FileDataSource fdsArquivoAnexo = new FileDataSource(fAnexos[i].toString());
                    DataHandler dhArquivoAnexo = new DataHandler(fdsArquivoAnexo);
                    mbpAnexos.setDataHandler(dhArquivoAnexo);
                    mbpAnexos.setFileName(fdsArquivoAnexo.getName());
                    mmpMultiParte.addBodyPart(mbpAnexos);
                    msg.setContent(mmpMultiParte);       
               
                    //Implementa corpo da mensagem
                    MimeBodyPart mbpCorpoMensagem2 = new MimeBodyPart();
                    mbpCorpoMensagem2.setText(fdsArquivoAnexo.getName());
                    mmpMultiParte.addBodyPart(mbpCorpoMensagem2);
                    msg.setContent(mmpMultiParte);       

                    System.out.println("Local do Arquivo a enviar - " + fdsArquivoAnexo.getFile());
       
                    mbpCorpoMensagem2 = null;
                    dhArquivoAnexo = null;
                    fdsArquivoAnexo = null;
                    mbpAnexos = null;
                }
            }
        }       
       
        //Envia mensagem
        Transport.send(msg);
       
        System.out.println("Email Enviado com sucesso ...");
    } catch (Exception mex) {
        mex.printStackTrace();
    }
}


private void envia2() {
    SimpleEmail email = new SimpleEmail();
    try {
        //Configurações ITMNetworks
        email.setHostName("72.232.2.188");
        email.addTo("[email removido]", "Paulo Santos");
        email.setFrom("[email removido]");
        email.setSubject("Teste de Mensagem");
        email.setMsg("Este é um simples teste ...");

// email.setAuthentication(strUsuarioSMTP, strSenhaSMTP);
email.setSmtpPort(25);

//            //Configurações GMAIL

//            email.setHostName("<a href="http://smtp.gmail.com">smtp.gmail.com</a>");

//            email.addTo(<a>"[email removido]</a>", "Paulo Santos");

//            email.setFrom(<a>"[email removido]</a>");

//            email.setSubject("Teste de Mensagem");

//            email.setMsg("Este é um simples teste …");

////            email.setAuthentication(strUsuarioSMTP, strSenhaSMTP);

//            email.setSmtpPort(465);
email.send();
       
        System.out.println("Email Enviado com sucesso ...");
       
        //Indica que o email foi enviado ao endereço
    } catch (EmailException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
   
/** @param filePath the name of the file to open. Not sure if it can accept URLs or just filenames. Path handling could be better, and buffer sizes are hardcoded
    */
    private static String readFileAsString(String filePath)
    throws java.io.IOException{
        StringBuffer fileData = new StringBuffer(1000);
        BufferedReader reader = new BufferedReader(new FileReader(filePath));
        char[] buf = new char[1024];
        int numRead=0;
        while((numRead=reader.read(buf)) != -1){
            String readData = String.valueOf(buf, 0, numRead);
            fileData.append(readData);
            buf = new char[1024];
        }
        reader.close();
        return fileData.toString();
    }

}
[/color]

1 Resposta

novellietibr

prsantos,

Em primeiro lugar… qdo postar codigo, utilize as tags (code) (/code), ok?

Se entendi bem seu problema, acredito que este código vai lhe ajudar. O que você precisa fazer é configurar para receber os emails de retorno para outra caixa postal e depois ler essa caixa postal.

http://www.lucianosilva.com/2009/02/23/lendo-seus-e-mails-com-java/

Espero ter ajudado… mais dúvidas, posta ai.

Criado 29 de agosto de 2011
Ultima resposta 29 de ago. de 2011
Respostas 1
Participantes 2