Boa tarde pessoas!
Bom, fiz algumas pesquisas mas não obtive êxito ainda.
Eis o que acontece: tenho um bean que usa a API javaMail pra… enviar emails (d’oh!) vez ou outra com alguns arquivos anexos de relatórios gerados pelo jasper.
O que acontece é que gero um relatório em arquivo pdf e o jasper me retorna em um vetor de bytes que quero anexar no email.
Posso muito bem (e funciona) salvar esse arquivo em disco (transformando-o em pdf) e então anexa-lo,
Mas estou tentando pular esse passo, anexar direto o vetor de bytes como pdf pra evitar gargalos e outra simplicações.
O que acontece é que fazendo assim ele da um problema de Encode64 e não envia o email.
Pesquisei e encontrei uma biblioteca da Apache (commons-codec) que faz esse Encoding64 no vetor de bytes, retornando outro vetor de bytes convertido.
Assim o anexo foi criado e o email enviado corretamente, MASS, porém, entretanto, ao abrir o anexo recebo uma mensagem do sistema semelhante a: “a extensão do arquivo diz que ele é pdf, mas o conteúdo diz que é do tipo texto” e não abre =(
Aqui vai o código que gera o email:
public void enviarEmail() throws Exception {
try {
Session session = null;
Context ctx = new InitialContext();
Object obj = ctx.lookup("java:/Mail");
session = (Session) obj;
MimeMessage m = new MimeMessage(session);
m.setFrom(new InternetAddress("censurado"));
Address[] to = new InternetAddress[] {new InternetAddress("censurdo")};
m.setRecipients(Message.RecipientType.TO, to);
m.setSubject("[Teste] TITULO");
m.setSentDate(new java.util.Date());
m.setText("TESTANDO EMAIL");
Multipart corpo = new MimeMultipart();
InternetHeaders headers = new InternetHeaders();
headers.addHeader("Content-Type", "application/pdf"); //diz o mime type, é isso que ele ta se confundindo depois de codificar pra base64
byte[] encoded = Base64.encodeBase64(relatorio()); //codifica para base64 pra montar o email
//essas tres proximas linhas é pra teste, ele salvou em disco e deu o msm bug de achar que eh arquivo texto, tudo culpa do base 64 =/
OutputStream os = new FileOutputStream("/usr/local/jboss/teste1.pdf");
os.write(encoded);
os.close();
MimeBodyPart partPhoto = new MimeBodyPart(headers,encoded);
partPhoto.setDisposition(javax.mail.Part.ATTACHMENT);
partPhoto.setFileName("anexo2.pdf");
corpo.addBodyPart(partPhoto);
m.setContent(corpo);
Transport.send(m);
} catch (Exception ex) {
throw new Exception(ex.getMessage() + FONTE + "enviarEmail()");
}
}
E ai galera, alguma dica?!
Abraços!