Problemas com header no Javamail

Boa tarde

Estou com um sério problema: Estou desenvolvendo uma rotina que vai até o servidor e pega todos os e-mail q voltaram(por email inexiste ou caixa cheia, etc) mas estou tendo um grande problema com a não padronização dos servers.,
Por exemplo:

Enumeration enum = ((MimeMessage)((MimeMultipart)m).getBodyPart(2).getContent()).getAllHeaders();

Como estão vendo eu pego o terceiro indice dos BodyParts (getBodyPart(2)). Ai está o problema, tem servidor que me gera apenas 2 BodyParts, e desses 2, nenhum é do tipo MimeMessage, então nao consigo pegar os devidos Headers que preciso…
To apanhando disto já faz mais de 1 dia… alguem sabe como posso fazer?
:?

Acho que não adianta você tentar “bitolar” o número da parte da mensagem. O protocolo de email é assim mesmo… Dependendo de que caminho a mensagem percorreu, cada servidor de email envolvido pode adicionar ou remover headers e partes na mensagem. Provavelmente você vai ter de fazer algo com instanceof.

Odeio servidores de e-mail sem padrão :x

Mas isso é que faz parte do padrão :wink:

O protocolo funciona assim: antigamente não existia conexão direta de qualquer lugar para qualquer lugar, como agora existe com a Internet pública.
Para um email chegar ao seu destino, era necessário que ele ficasse “pulando” (hops) de servidor em servidor, até que ele chegasse.
Isso funcionava mais ou menos (podia ser que a mensagem se perdesse pelo caminho…), e para isso funcionar cada servidor adicionava ou removia headers e outras partes à mensagem. Isso era chamado “relay” (se você acompanha atletismo sabe que “relay” refere-se a corrida de revezamento).
Havia um monte de regras para roteamento, e protocolos como UUCP.
Hoje em dia dificilmente um servidor de email tem o tal do “relay” habilitado, mas a idéia de adicionar, alterar ou remover headers continua. (assim como aquela filtragem de emails, que costuma remover aquele seu arquivo .exe que você queria mandar…)

E tem mais uma coisa…
Se você está pegando mensagens de retorno prepare-se para arrancar os cabelos - sempre vai ter uma mensagem que vai acabar escapando.
Além disso, nem todos os servidores de email retornam a mensagem original quando o destinatário não existe. Alguns só retornam algumas linhas…
Acho que você vai ter de fazer algo como analisar o título da mensagem e ter um arquivo de configuração com um monte de títulos comuns. Isso parece uma versão bem menor do problema “como pegar um spam”.

Puuutz!!! isso é pra matar qualquer programador hein!
Rrsrsrs…
Eu consegui fazer um jeito aqui…

if(m instanceof MimeMultipart){ int bps = ((MimeMultipart)m).getCount(); for(int z=0; z<bps; z++){ if(((MimeMultipart)m).getBodyPart(z).getContent() instanceof MimeMessage){ Enumeration enum = ((MimeMessage)((MimeMultipart)m).getBodyPart(z).getContent()).getAllHeaders(); while(enum.hasMoreElements()){ ... ...

Meio gambita né, mas deu pra pegar os Headers que eu queria :slight_smile:

Valeu pela força cara! :stuck_out_tongue: