Tratar excessão

16 respostas
E

pessoal preciso de ajuda

estou utilizando commons mail apache para enviar email, so que esta lançando uma exceção que não estou conseguindo tratar com EmailException, vejam execeção abaixo:

DEBUG SMTP: Invalid Addresses

DEBUG SMTP:   [email removido] <a href="mailto:[email removido]">[email removido]</a>

DEBUG SMTP: Sending failed because of invalid destination addresses

RSET

250 flushed

javax.mail.SendFailedException: Invalid Addresses;

nested exception is:

com.sun.mail.smtp.SMTPAddressFailedException: 511 sorry, cant find a valid MX for rcpt domain (#5.1.1 - chkuser)

como poderia estar tratando esta execeção utlizando commons mail ?

no aguardo!!!

16 Respostas

A

Como assim não está conseguindo tratar?

Ve da onde ela vem o põe o pai de todos no catch()…

tipo assim:

catch(Throwable t)
{

}
E

essa exceção mostraria para mim o email inválido

como ficaria o catch com Throwable ?

A

ahhhh entendi…

bom, vc tem que fazer catch(SendFailedException sfe)

huehuehuee foi mals ai nao tinha entendido

A

Por que Throwable ?

Eu faria assim:

Try{

//Suas instruções

}

catch (Exception e){

//Tratamento do erro AQUI

}

Acho interessante tratar Exception e não SendFailedException, porque se der outra exception seu código estará defensivo.
Mas tb podes tratar a SendFailedException

A
Try{

//Suas instruções
}catch (SendFailedException sfe){
    System.out.println(sfe.getMessage());
}catch (Exception e){
   System.out.println(e.getMessage());
}

vai tratando tudo que achar necessário antes do erro geral.

A

andrestrindade:
Por que Throwable ?

Eu faria assim:

Try{

//Suas instruções

}

catch (Exception e){

//Tratamento do erro AQUI

}

Acho interessante tratar Exception e não SendFailedException, porque se der outra exception seu código estará defensivo.
Mas tb podes tratar a SendFailedException

Bom depende se ele quer identificar qual é o erro exatamente, tem que tratar com a exception específica e não uma genérica… Foi isso que entendi que ele tinha perguntado…

Se para ele tanto faz o erro que acontecer, aí sim, mete um Throwable que é o pai de todos e pronto…

A

Tá, mas o throwable não vai tratar o erro… Se for web por exemplo, o usuário vai se deparar com o erro, se não for “jogado pra um tratamento” não é ?

E

eu preciso pegar o adress mail que deu erro e jogar para cima
mas a classe EmailException não me possibilita isso, tentei com Throwable tambem nao deu
teria de ser SendFailedException mas nao consigo,
não sei se e limitação de commons Email, por isso to aqui
pedindo ajuda da galera, algum de nos pode ja ter se deparado
com esse problema e ter resolvido de alguma forma.

A

Cara, segue a documentação: http://download.oracle.com/javaee/1.3/api/javax/mail/SendFailedException.html

O que você está fazendo parece estar certo, se der um throws SendFailedException no método é pra subir essa exceção…

Coloca seu código aí fazendo favor…

E

olha o codigo

try {
	                     email.setDebug(true);  
	                     email.setHostName(servidor);
		     email.setSmtpPort(Integer.parseInt(porta));
		     email.setAuthenticator(new DefaultAuthenticator(remetente, senha));
		     email.setSSL(false);
		     email.setTLS(false);
		     email.setSubject(titulo);
	  	     email.setMsg(mensagem);
	  	     email.setFrom(remetente);
	  	     email.setBounceAddress(remetente);
	                     email.send();
	  	     paginacaoEmail(colecao,tipoPessoa,titulo,"");
	  	     
	  	} catch (EmailException e) {
	  		throw new NegocioException("Operação Inválida - Não foi possivel enviar os emails contate o administrador");
		}

com commons mail sou obrigado a lançar EmailException eu nao consigo lançar outra exceção a nao ser Throwable >> Exception >> EmailException

Obs. com email exception e nao encontrei como jogar pra cima Invalid adress.

A

Você tem que ver que Invalid Adress é apenas a mensagem dentro do SendFailedException…

Eu faria diferente… Nesse seu método de envio de email eu não colocaria try catch, apenas throws, o eclipse faz isso para você…

Na chamada desse método eu colocaria um try catch…

try
{
   enviaEmail();
}
catch(Throwable t)
{
   // uma validação qualquer ou lança pra cima isso ainda como vc fez
   throw new NegocioException("Operação Inválida - Não foi possivel enviar os emails contate o administrador");
}
E

ta mas como eu pego o endereço de email inválido.
porque esta dando a exceção os emails nao são passados
para no email que o sevidor nao aceitou por ter
um dominio inválido.

eu queria retornar esse email para usuario para ele arrumar
eu tirar da lista e enviar novamento o email

A

Eu acho que via exception você não vai conseguir qual o email exato que deu erro para enviar…

o que são aquels linhas com DEBUG na fente?

DEBUG SMTP: “[email removido]” [email removido]

de onde veio isso? Este email que está dando erro?

E

e a exception que esta sendo lançada e nao tradada
eu copiei do console para postar

debug e do commons mail mostra o que acontece
no console.

a exceção Invalid adress acontece eu so não consigo tratar,
se coloco catch com a classe SendFailedException o eclipse
diz que a exceção nunca vai acontecer, mas ela acontece.

no commons Mail essa parte de exceção e meio engessada
ao que me parece pq na documentação fala que
EmailException >> Exception >> Thowable, esta exceção
que quero lançar não esta nesta arvore.

A

e a SMTPAddressFailedException? consegue lançar?

E

tambem não consigo, diz que nunca vai acontecer tb.

Criado 18 de abril de 2011
Ultima resposta 19 de abr. de 2011
Respostas 16
Participantes 4