eu tenho que salvar o arquivo atualizado no pc, pra mandar pro email, tem alguma forma de manipular FileDataSource fds = new FileDataSource("C:/reports/Acampamentos.jasper"); mbp2.setDataHandler(new DataHandler(fds)); mbp2.setFileName(fds.getName()); em vez de colocar C:e tal, colocar outro endereço que pegue esse esse pdf, não sei se pude explicar de forma correta
vai sim, só que ele pega sempre o primeiro relatório sabe, tipo se eu criar um relatório dia 20 por exemplo, se esse for o primeiro relatorio do sistema ele manda sem problemas, agora se eu criar outro depois, ele não encontra. não sei se pude explicar
Session mailSession = Session.getDefaultInstance(props, null);
mailSession.setDebug(sessionDebug);
Message msg = new MimeMessage(mailSession);
msg.setFrom(new InternetAddress(remetente, nomeRemetente)); msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(destinatario));
msg.setSubject(assunto);
msg.setSentDate(new Date());
// cria a primeira parte da mensagem
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setContent(mensagem, "text/html;charset=UTF-8");
// cria a segunda parte da mensage
MimeBodyPart mbp2 = new MimeBodyPart();
// anexa o arquivo na mensagem
FileDataSource fds = new FileDataSource("C:/reports/Acampamentos.jasper");
mbp2.setDataHandler(new DataHandler(fds));
mbp2.setFileName(fds.getName());
// cria a Multipart
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2);
// adiciona a Multipart na mensagem
msg.setContent(mp);
// configura a data: cabecalho
msg.setSentDate(new Date());
// envia a mensagem
Transport transport = mailSession.getTransport("smtp");
transport.connect(host, usuario, senha);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
System.out.println("Enviado com Sucesso");
} catch (MessagingException ex) {
System.out.println(ex);
}
}
O Evento da onde eu quero que faça tanto imprimir pro usuário, como mandar pro email ( ou poderia colocar pra enviar Email em um horário do dia)
Assim, talvez eu tenha formulado a pergunta de forma errada. Ele pega e manda por email, só o que foi salvo, por exemplo, tenho na pasta do ireport, alguns pdf, se eu colocar um desse arquivo, lá na saida do enviar email, ele vai mandar sem problemas, só que vai fica desatualizados, sempre vai mandar aquele, queria que fosse atualizado, pro responsável estar sempre ciente dos lucros do dia.
Se o nome do arquivo é o mesmo e vc está de fato salvando o novo relatório, o anexo tem que ir correto.
Uma solução é vc criar um arquivo temporário (com nomes diferentes, tipo, financeiro-joao-paulo-21062020210323) e enviar. Depois de enviado, vc pode apagar esse arquivo temporário e manter só os que importam.
O nome do relatório foi composto por:
financeiro - tipo de relatorio
joao-paulo - nome do cliente
21/06/2020 - data (sem as barras)
21:03:23 - horario(sem os traços)
Baseado na sua explicação o que eu posso auxiliar é nisso.
só mais uma duvida, quando clico no botão visualizar relatórios, ele gera um pdf através da FillReport, posso pegar esse FillReport e jogar no enviar email?? assim eu teria quem sabe o email atualizado.
vou mandar os eventos responsáveis de imprimir e mandar por Email os relatórios. O imprimir ta funcionando bem. Só que pra mandar por email, ele manda sempre o primeiro salvo como falei anteriormente. Será que posso mandar por email, sem salvar no PC, mas sim quando é clicado no botão visualizar relatórios??
private void RelatorioAcampActionPerformed(java.awt.event.ActionEvent evt) {
// painel mensagem de confirmação
int confirma = JOptionPane.showConfirmDialog(null, "Confirma Emissão Deste Realatório?","Atenção",JOptionPane.YES_NO_OPTION);
if(confirma ==JOptionPane.YES_OPTION){
// imprimir relatorio com frame
try {
JasperPrint imprimir= JasperFillManager.fillReport("C:/reports/Acampamentos.jasper",null,conexao);
// // linha exibe relatorio
JasperViewer.viewReport(imprimir,false);
EnviarJava e = new EnviarJava();
try {
e.envioAnexo( "Fulano","teste", "teste", "alexandremenna@hotmail.com", "C:\\reports\\Acampamentos.jasper");
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(TelaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (JRException e) {
JOptionPane.showMessageDialog(null, e);
}
}
} texto pré-formatado por 4 espaços