Bom dia amigos, estou apanhando desde cedo para tentar baixar os anexos que estão em um e-mail que foram encaminhados do Outlook/Thunderbird para uma conta de e-mail que é gerenciada por um aplicativo meu. Este meu aplicativo fica “observando” uma determinada conta de e-mail e a cada X tempo, ele baixa os anexos dos novos e-mails. Estas mensagem que são encaminhadas possuem uma particularidade aonde o e-mail original é “empacotado” num arquivo com extensão eml, anexados ao e-mail e encaminhado para uma conta de e-mail qqr. Se você abrir este arquivo eml no bloco de notas, por exemplo, você irá perceber que os arquivos anexados ao email original agora fazem parte do conteudo do arquivo eml, porém estão codificados, por exemplo:
...
This is a multi-part message in MIME format.
This email requires a MIME compatible email reader.
----=_NextPart_000_d20090818t175506.47c1r898756
Content-Type: multipart/alternative;
boundary="--=_NextPart_001_d20090818t175506.47c1r898756"
----=_NextPart_001_d20090818t175506.47c1r898756
Content-Type: text/plain;
charset=us-ascii
Content-Transfer-Encoding: 7bit
----=_NextPart_001_d20090818t175506.47c1r898756--
----=_NextPart_000_d20090818t175506.47c1r898756
Content-Type: application/x-unknown;
name="35090844016707000161550020000017360484256096.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="35090844016707000161550020000017360484256096.pdf"
JVBERi0xLjMNJeLjz9MNCjEgMCBvYmoNCjw8IA0KL0NyZWF0aW9uRGF0ZSAoRDoyMDA5MDgxODAw
MTI0MikNCi9UaXRsZSAoTm90YSBGaXNjYWwgRWxldHK2bmljYSAtIE6mIDAwMC4wMDEuNzM2IC0g
U9pyaWUgMikNCi9DcmVhdG9yIChVbmltYWtlIFNvZnR3YXJlcyAtIHd3dy51bmltYWtlLmNvbS5i
cikNCi9Qcm9kdWNlciAoVW5pREFORmUgdi4yIFBsdXMgLSB3d3cudW5pZGFuZmUuY29tLmJyKQ0K
L01vZERhdGUgKEQ6MjAwOTA4MTgxNzU1MDMpDQovU3ViamVjdCAoTkNIIEJSQVNJTCBMVERBLikN
Ci9BdXRob3IgKE5DSCBCcmFzaWwgLyBVbmlORmUgLSB3d3cudW5pbWFrZS5jb20uYnIvdW5pbmZl
KQ0KL0tleXdvcmRzIChORi1lLCBOb3RhIEZpc2NhbCBFbGV0crZuaWNhLCBEQU5GRSwgRG9jdW1l
bnRvIEF1eGlsaWFyIGRhIE5vdGEgRmlzY2FsIEVsZXRytm5pY2EsIFVuaU5GZSwgT3BlbiBTb3Vy
Y2UsIFVuaURBTkZlLCBGcmVlLCBQbHVzLCBTRUZBWiwgQnJhc2lsKQ0KPj4gDQplbmRvYmoNCjIg
MCBvYmoNCjw8IA0KL1R5cGUgL0NhdGFsb2cNCi9PdXRsaW5lcyA1IDAgUg0KL1BhZ2VzIDMgMCBS
DQo+PiANCmVuZG9iag0KNiAwIG9iag0KPDwgL0ZpbHRlciAvRmwgL0xlbmd0aCAxMDMgPj4NCnN0
cmVhbQ0KeJwr5OUystSzNDVSMDQy0zMxN1IwNTbSszQxUdC11APyilJ5ucIV8ni5nEJ4ufTdDBUs
FELSeLkMFECwKJ2XyxDMMlSAmWJoATYlJFchWkNXYURDzViFEC9eLldgyAXycgEAhII6yWVuZHN0
cmVhbQ0KZW5kb2JqDQo3IDAgb2JqDQo8PCAvRmlsdGVyIC9GbCAvTGVuZ3RoIDY5ID4+DQpzdHJl
YW0NCnici45VMFBI4eUyUADBIHcgS8/c0EyhnJfLyFLP0tRIwdDQUM/EyETB1NhIz9LEREHXxFDP
0txMoSiVl6uYlwsAk9YMSWVuZHN0cmVhbQ0KZW5kb2JqDQo4IDAgb2JqDQo8PCAvRmlsdGVyIC9G
....
Eu fiz o seguinte tratamento para tentar pegar este conteúdo codificado:
for (int messageNumber = 0; messageNumber < messages.length; messageNumber++) {
Message message = messages[messageNumber];
Object msgObj = message.getContent();
if (msgObj instanceof Multipart) {
Multipart multipart = (Multipart) message.getContent();
for (int i = 0; i < multipart.getCount(); i++) {
Part part = multipart.getBodyPart(i);
// ...
//Algumas checagens, inclusive uma para verificar se o anexo é do tipo EML. Só entrará no bloco abaixo se for deste tipo de arquivo
Message msg = (Message) part.getContent();
Object msgContent = msg.getContent();
if (msgContent instanceof Multipart) {
MimeMultipart mmp = (MimeMultipart) msg.getContent();
for (int i = 0; i < mmp.getCount(); i++) {
MimeBodyPart mbp = (MimeBodyPart) mmp.getBodyPart(i);
FileOutputStream fileOutputStream = new FileOutputStream(mbp.getFileName());
InputStream stream = mbp.getInputStream();
int ch = -1;
while ((ch = stream.read()) != -1) {
fileOutputStream.write(ch);
}
}
}
}
}
}
Quando o aplicativo passa pela linha InputStream stream = mbp.getInputStream(); dá a seguinte exception:
java.io.IOException: No content
at javax.mail.internet.MimePartDataSource.getInputStream(MimePartDataSource.java:109)
at javax.activation.DataHandler.getInputStream(DataHandler.java:238)
at javax.mail.internet.MimeBodyPart.getInputStream(MimeBodyPart.java:558)
at action.ReadEmailAction.trataArquivoEML(ReadEmailAction.java:315)
at action.ReadEmailAction.processMail(ReadEmailAction.java:101)
at action.ProcessaEmailAction.run(ProcessaEmailAction.java:133)
at thread.ProcessaEmailThread.run(ProcessaEmailThread.java:32)
Já virei a internet e não consigo encontrar a solução… Acredito que seja algo simples e que eu esteja comendo bola.
Aonde será que eu estou errando?
Obrigado!