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]