Estou criando um programa que gerar PDFs e envia Email automaticamente. Abrindo o programa pelo executar dentro do Netbeans tudo funciona perfeitamente. O problema é guando compilo o JAR. Ao disparar um evento para enviar os e-mails se houver uma instancia do javax.activation.FileDataSource, necessário para se criar um Anexo, a instancia da classe Email nem se quer é feita, é como se a linha com a mesma nem existisse. Não gera exceção, tendo em vista que nem mesmo o construtor da classe Email é carregado. Quando removo as instancias de javax.activation.FileDataSource a classe Email passa a ser instanciada normalmente.Digo que o problema acontece com uma mera instanciação de javax.activation.FileDataSource, mesmo que não seja usada em outras linhas, mas só ao executar o programa a partir de um JAR independente do NetBeans.
Me ajudem, já pesquisei em diversos fóruns e nada relacionado com o assunto. Será alguma configuração da JVM, alguma configuração de Segurança?
Importar javax.activation.FileDataSource não causa o problema no JAR só se houver qualquer tipo de instanciamento.
Abaixo segue a classe
package certifica_ajs;
import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.Address;
//import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Part; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; //import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.Multipart;
/** * Esta classe configura o envio de um e-mail com anexo. * @author JaimeJR */ public class Email { public Email() { // javax.swing.JOptionPane.showMessageDialog(null, "Olá sou o email!"); } /** * Método que envia o e-mail com anexo. * * @param origem * @param senha * @param destino * @param assunto * @param corpo * @param anexo_ * @param servidor * @param porta * @param useTLS * @param autentica * @param tipo * @param anexoLogo * @return Se o e-mail foi enviado corretamente ou se não foi(neste caso é a excessão. */ public String sendAttachEmail(String origem, String senha, String destino, String assunto, String corpo, String anexo_, String servidor, String porta, String useTLS, String autentica, String tipo, boolean anexoLogo) { DataSource fds; MimeBodyPart anexo = new MimeBodyPart();//anexo MimeBodyPart textPart = new MimeBodyPart();//Corpo do Texto MimeBodyPart logo = new MimeBodyPart();//anexo Properties props = new Properties(); //propriedades da conexão com o servidor do e-mail // Parâmetros de conexão com servidor Gmail props.put("mail.smtp.host", servidor); props.put("mail.smtp.socketFactory.port", porta); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.auth", autentica); props.put("mail.smtp.port", porta); //Inciando a seção de autenticação Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(origem, senha); } }); // Ativa Debug para sessão session.setDebug(true); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress(origem)); //Remetente
Address[] toUser = InternetAddress //Destinatário(s) .parse(destino); //para mais destinatários cooque os outros endreços de e-mails na mesma string separados por virgula como argumentos message.setRecipients(Message.RecipientType.TO, toUser); message.setSubject(assunto);//Assunto // message.setText("Enviei este email utilizando JavaMail com minha conta BOL jaimejr1987!\n Este é um teste usando Java.\nMais um passo em fazer o profgrama CertificA²JS enviar automanticamente os e-mails."); textPart.setContent(corpo, tipo); //tipo = text/plain ou text/html //Criando anexo do certificado **fds = new FileDataSource(anexo_);** anexo.setDisposition(Part.ATTACHMENT); anexo.setDataHandler(new DataHandler(fds)); anexo.setFileName(fds.getName()); //TA COM PROBLEMA NO JAR COMPILADO NA HORA DE ANEXAR. SE USAR A CLASSE FILEDATASOURCE DA PAU NO JAR, NÃO CRIA O OBJETO EMAIL //Anexo do logo if(anexoLogo){ fds = new **FileDataSource("C:\\Users\\JaimeJR\\Documents\\NetBeansProjects\\CertificA²JS\\dist\\SplashCertificaAJS.png");** logo.setDisposition(Part.ATTACHMENT); logo.setDataHandler(new DataHandler(fds)); logo.setFileName(fds.getName()); } Multipart mps = new MimeMultipart(); mps.addBodyPart(anexo,0); int x = 1; //deve inciar em 1, em 0 é para teste if(anexoLogo){ mps.addBodyPart(logo,x);// se a opção estiver marcada enviar o logo do CertificA²JS como anexo. x++; } mps.addBodyPart(textPart,x);//Sempre insria o index apos o objeto da BodyPart se não o anexo sobrecreve o texto. //Método para enviar a mensagem criada message.setContent(mps); Transport.send(message); return "E-mail para " + destino +"foi enviado com SUCESSO!"; } catch (MessagingException e) { return "FALHA: E-mail para " + destino +" NÃO foi enviado."; } catch(Exception e){ return "FALHA: E-mail para " + destino +" NÃO foi enviado por falha no software."; } } }