Como pegar o caminho do ireport e enviar por email?

22 respostas Resolvido
java
H

Pessoal posso usar o exemplo do attachment.setPath(“mypictures/john.jpg”) pegar o caminho da imagem, em vez do caminho do exemplo, pegar o caminho do relatório do Ireport, posso pegar Ex ( c/ireport/relatorios), pois quero que o sistema, ao salvar no banco com o botão salvar, ele através do evento do botão?

22 Respostas

R

Tá um pouco confuso sua questão, explica melhor por favor

H

Não expliquei bem, quero pegar o caminho do relatório do ireport que é c/documentos, esse caminho será que posso usar no attachment.setPath(“mypictures/john.jpg”) no Java email, será que vai funcionar, pois quero enviar email automático pro responsável ao salvar no banco, com o botão salvar, que vem do método salvar

R

vc exportou seu relatório pra uma imagem? Mas sim, vc consegue passar o relatório gerado por email com o caminho absoluto.

C:/Relatórios/Seu Arquivo.extensao
H

Fiz assim, mas ainda da errado.
identar texto pré-formatado por 4 espaços
Classe Java do Emai
public class EnviarJava {

public  static void enviarEmail(String caminho, String descri, String nome) {
    MultiPartEmail email = new MultiPartEmail();
    email.setHostName("smtp.googlemail.com");
    email.setSslSmtpPort("465");
    email.setStartTLSRequired(true);
   email.setStartTLSEnabled(true);
   email.setSSLOnConnect(true);
    
    email.setAuthenticator(new DefaultAuthenticator("[email removido]", "senhaXX"));
    try {           
        email.setFrom("[email removido]");
        email.setSubject("teste");
        email.setMsg("teste mensagem");             
        email.addTo("[email removido]");

        email.setDebug(true);
        
        EmailAttachment anexo = new EmailAttachment();
        anexo.setPath(caminho);           
        anexo.setDisposition(EmailAttachment.ATTACHMENT);
        anexo.setDescription(descri);
        anexo.setName(nome);
        email.setDebug(true);
        //email.attach(anexo);
        //email.addTo(to); 
        //email.addReplyTo(to);
        email.send();
    } catch (EmailException ex) {
        Logger.getLogger(EnviarJava.class.getName()).log(Level.SEVERE, null, ex);
    }
}

Botão salvar

}
identar texto pré-formatado por 4 espaços

private void BotaoSalvarActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:
    
     EmitirAcampamento();
   
       EnviarJava.enviarEmail(arqui.getAbsolutePath(), arqui.getName(), arqui.getPath());
    
   

     
  
    
   
}                                           

private void CalcularActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    CalcularAC();
}
R

Cara, nao bota sua senha aqui, vou editar e ja respondo.

O que ta dando errado? Ta dando erro?

H
valeu, nem tinha visto kk. o Erro é esse xception in thread AWT-EventQueue-0 java.lang.NullPointerException

at br.com.sistemaPraia.telas.TelaAcampar.BotaoSalvarActionPerformed(TelaAcampar.java:484)

at br.com.sistemaPraia.telas.TelaAcampar.access$900(TelaAcampar.java:27)

at br.com.sistemaPraia.telas.TelaAcampar$10.actionPerformed(TelaAcampar.java:378)
R

Qual é a linha 484?

H

EnviarJava.enviarEmail(arqui.getAbsolutePath(), arqui.getName(), arqui.getPath());

R

Esse arqui vem de onde? ta vazio

H

ai que esta, agora vc chegou no ponto que eu queria, como resolver isso.

identar texto pré-formatado por 4 espaços
public  static void enviarEmail(String caminho, String descri, String nome) {

MultiPartEmail email = new MultiPartEmail();

email.setHostName(<a href="http://smtp.googlemail.com">smtp.googlemail.com</a>);

email.setSslSmtpPort(465);

email.setStartTLSRequired(true);

email.setStartTLSEnabled(true);

email.setSSLOnConnect(true);
email.setAuthenticator(new DefaultAuthenticator("[email removido]", "senha "));
    try {           
        email.setFrom("[email removido]");
        email.setSubject("teste");
        email.setMsg("teste mensagem");             
        email.addTo("[email removido]");

        email.setDebug(true);
        
        EmailAttachment anexo = new EmailAttachment();
        anexo.setPath(caminho);           
        anexo.setDisposition(EmailAttachment.ATTACHMENT);
        anexo.setDescription(descri);
        anexo.setName(nome);
        email.setDebug(true);
        //email.attach(anexo);
        //email.addTo(to); 
        //email.addReplyTo(to);
        email.send();
    } catch (EmailException ex) {
        Logger.getLogger(EnviarJava.class.getName()).log(Level.SEVERE, null, ex);
    }
}
R

qual api vc ta usando? javamail?

H

isso javaEmail

R

Faz assim (a string imagem pode ser o caminho de um arquivo):

public void envioAnexo(String nomeRemetente, String assunto, String mensagem, String destinatario, String imagem) {
        try {
            String host = "smtp.gmail.com";
            String usuario = "[email removido]";
            String senha = "xxxx";
            String remetente = "[email removido]";

            boolean sessionDebug = false;

            Properties props = System.getProperties();
            props.put("mail.smtp.starttls.enable", "true");
            props.put("mail.smtp.host", host);
            props.put("mail.smtp.port", "587");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.starttls.required", "true");
            props.put("mail.smtp.ssl.trust", "smtp.gmail.com");

//            jdk > 8
//            java.security.Security.addProvider(new Provider(host, remetente, senha) {
//            });

//            jdk == 8
            java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

            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(imagem);
            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) {
            ex.printStackTrace();
        } catch (UnsupportedEncodingException ex) {
            ex.printStackTrace();
        }
    }

pra chamar esse código vc faz:

envioAnexo(
    "Fulano", //Nome do Remetente
    "JavaMail Code", //Asunto
    "Abner mandou esse código",  //Mensagem
    "[email removido]", //Email do destinatário
    "c:\\caminho\\teste.pdf" //arquivo
);
H

mano sinceramente e com todo respeito eu te amo, so deu um erro javax.mail.AuthenticationFailedException

R

manda o erro completo

H

DEBUG SMTP: trying to connect to host “smtp.gmail.com”, port 25, isSSL false

R

mano, o erro completo

H

Texto pré-formatado
EBUG: setDebug: JavaMail version 1.4ea
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host “smtp.gmail.com”, port 25, isSSL false
javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 25;
nested exception is:
java.net.SocketException: Permission denied: connect
DEBUG: setDebug: JavaMail version 1.4ea
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host “smtp.gmail.com”, port 25, isSSL false
javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 25;
nested exception is:
java.net.SocketException: Permission denied: connect

R

mostra como vc colocou o seu codigo, e vê se tem algum tipo de software bloqueando o acesso do Java, (anti virus, firewall)

H

primeiro fiz assim
identar texto pré-formatado por 4 espaços

public class EnviarJava {

public void envioAnexo(String nomeRemetente, String assunto, String mensagem, String destinatario, String imagem) throws UnsupportedEncodingException {
    try {
        String host = "smtp.gmail.com";
        String usuario = "[email removido]";
        String senha = xxxxx7";
        String remetente = "[email removido]";

        boolean sessionDebug = true;

        Properties props = System.getProperties();
        props.put("mail.smtp.starttls.enable", true);
        props.put("mail.smtp.host", "host");
        props.put("mail.smtp.port", 587);
        props.put("mail.smtp.auth", true);
        props.put("mail.smtp.starttls.required", true);
        props.put("mail.smtp.ssl.trust", "smtp.gmail.com");
//            jdk > 8

//            java.security.Security.addProvider(new Provider(host, remetente, senha) {

//            });

// jdk == 8
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

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(imagem);
        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);
    }
}

}
e por fim

EmitirAcampamento();

EnviarJava e = new EnviarJava();
     
    try {
        e.envioAnexo( "Fulano","teste", "teste", "[email removido]", "C:\\Users\\PC\\Desktop");
    } catch (UnsupportedEncodingException ex) {
        Logger.getLogger(TelaAcampar.class.getName()).log(Level.SEVERE, null, ex);
    }


    
   

     
  
    
   
}
R
Solucao aceita

OK… Quando for postar códigos seleciona ele todo e clica em </>.

Da uma olhada nesse site
https://www.filebot.net/forums/viewtopic.php?t=3685

H

show, funcionou, te agradeço mesmo

Criado 19 de junho de 2020
Ultima resposta 20 de jun. de 2020
Respostas 22
Participantes 2