Uso a API JavaMail para enviar emails, e na hora de usar o comando:
Transport.send(message);
ele retorna um erro caso o endereço seja inválido, mesmo sendo tratado com try e catch ele pára de enviar, como faço para que ele continue enviando a listagem até o fim, mesmo com algum e-mail dando erro?
Queria aprender a usar essa API… (posta o código please) =D
E pro povo te ajudar, vc tem que postar o código para ver onde tá o erro (posta o código please)²
Bom galera, como vocês desenterraram o tópico vou responder e postar o código, passou tanto tempo que consegui resolver o problema, mas acabei esquecendo de avisar aqui, o que estava ocorrendo era o seguinte:
Preciso enviar vários e-mails, mas na api javamail na hora de enviar um e-mail se der erro ele dispara uma excessão, até aí tudo bem, o problema mesmo estava por que eu queria que ele continuasse enviando, mesmo com o erro, a solução foi fazer um loop (while) e colocar o try e catch dentro deste loop, quando der a exception ele apenas exibe uma mensagem e mais nada, vou postar o código abaixo, mas não dá para entender o funcionamento da javamail só pelo código, se alguém precisar de mais alguma informação pode perguntar que respondo, segue o código:
try{
///Comeco do envio de html
Autenticador autentica = new Autenticador();
Session sessaoHtml = Session.getInstance(props, autentica);
sessaoHtml.setDebug(true);
Message message = new MimeMessage(sessaoHtml);
// Estipula quem esta enviando
message.setFrom(new InternetAddress(from));
message.setSubject(subject);
MimeMultipart mpRoot = new MimeMultipart("mixed");
MimeMultipart mpContent = new MimeMultipart("alternative");
MimeBodyPart contentPartRoot = new MimeBodyPart();
//enviando texto
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setText("Inscrição no processo seletivo FCE.");
mpContent.addBodyPart(mbp1);
//enviando html
MimeBodyPart mbp2 = new MimeBodyPart();
int k = 0;
int conta = 0;
while(k < fim){
///Para pegar cliques de quem ler a mensagem
int tagBody = mensagemHtml.indexOf("/body");
String wcampanha = Form.jTextField9.getText();
String tagPegaEmail = "<p> <img src='http://www.ipca.br/Funcoes.jsp?email="+listadeNomes[k]+"&nomedacampanha="+wcampanha+"'" + " /> </p>";
String novamensagemHtml = mensagemHtml.substring(0,tagBody-1) + tagPegaEmail + mensagemHtml.substring(tagBody-1, mensagemHtml.length());
tagPegaEmail="";
mbp2.setContent(novamensagemHtml,"text/html");
contentPartRoot.setContent(mpContent);
mpRoot.addBodyPart(contentPartRoot);
mpContent.addBodyPart(mbp2);
message.setContent(mpRoot);
try{
message.addRecipient(Message.RecipientType.TO, para[k]);
}catch(AddressException qq){
System.out.println("Deu erro");
}
message.saveChanges();
int diaAtual, mesAtual, anoAtual;
Date pegaDatadeHoje = new Date();
diaAtual = pegaDatadeHoje.getDate();
mesAtual = pegaDatadeHoje.getMonth();
anoAtual = pegaDatadeHoje.getYear();
anoAtual = anoAtual + 1900;
mesAtual = mesAtual + 1;
String wdataAtual = diaAtual + "/" + mesAtual + "/" + anoAtual;
DAO cadastra = new DAO();
cadastra.InsereEmails(listadeNomes[k], wdataAtual, wcampanha);
///Aqui dava a exception e estava o problema.
Transport.send(message);
conta++;
String valor;
String somadora = Form.jTextField11.getText();
if(contadora > 1){
contadora = Integer.parseInt(somadora);
}
contadora++;
valor = String.valueOf(contadora);
Form.jTextField11.setText(valor);
Form.jTextField11.setEditable(false);
message = new MimeMessage(sessaoHtml);
message.setFrom(new InternetAddress(from));
message.setSubject(subject);
message.setContent(mpRoot);
mpRoot.removeBodyPart(contentPartRoot);
indiceDoErro = k;
k++;
}
JOptionPane.showMessageDialog(null, " Processo Concluído!\n" + " " + k + " emails enviados com sucesso." );
}catch (Exception ex) {
System.out.println("Erro de mensagem. ");
}
}
É isso aí, o programa pega uma página em HTML, insere uma string no final que se o usuário abre conta como um clique e arquiva no banco de dados.