Lendo conteúdo de e-mails

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("contato@copaibaartefatos.com.br", "************");
// return new PasswordAuthentication("prsantosbr@gmail.com", "************");
}
});
} 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 > 0) {
            InternetAddress[] iaEmailDestinatarioCC = new InternetAddress[streMailDestinatarioCC.length];
            for (int i = 0; i < 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 > 0) {
            InternetAddress[] iaEmailDestinatarioBCC = new InternetAddress[streMailDestinatarioBCC.length];
            for (int i = 0; i < 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 > 0) {
            for (int i = 0; i < 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("prsantosbr@gmail.com", "Paulo Santos");
        email.setFrom("contato@copaibaartefatos.com.br");
        email.setSubject("Teste de Mensagem");
        email.setMsg("Este é um simples teste ...");

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

// //Configurações GMAIL
// email.setHostName("smtp.gmail.com");
// email.addTo("prsantosbr@gmail.com", "Paulo Santos");
// email.setFrom("prsantosbr@gmail.com");
// 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]

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.