Caminho para projeto

4 respostas
S

Galera, estou para criar um projeto que faz o seguinte trabalho de forma online via web, preciso fazer analise em um banco de dados, gerar um relatorio com partes graficas tb, e enviar por email, gostaria da opinião de vcs para me dizer quais os topicos que eu devo estudar para fazer tudo isso?

Acho que seria estes.

JavaMail
IReport e/ou JasperReport

Já possuo a base de dados online, e um webservice que popula esta base e faz consulta, irei agora adicionar um novo modulo para suprir as necessidades acima.

E ae o que vcs acham, qual seria o funcionamento do sistema para que funcione de forma correta? Terei que criar o relatorio em pdf e enviar de forma anexada por email?

Obrigado!

4 Respostas

ridelmar

Fala Shakall,

Segue a minha opinião para o projeto citado:
+ para o envio do e-mail utilizar a API do projeto Jakarta Apache -> Commons-email.
+ para a geração do relatorio utilizar a ultima versão do JasperReport.

  • Envio de e-mail (Commons-email):

O desenvolvimento utilizando a API Commons-email é bem mais simples que a API JavaMail pois realiza a abstração da JavaMail. Está API proporciona os mesmo recursos da JavaMail podendo enviar e-mail simples, em formato HTML e anexar documentos.

Documentação Commons-email:
http://jakarta.apache.org/commons/email/userguide.html

  • Geração do relatorio (JasperReport):

Para a geração do relatório gráfico utilizar o JasperReport, gerando-o no formato HTML/PDF para ser anexado ao e-mail.

Documentação JasperReports
http://jasperforge.org/sf/projects/jasperreports

[]´s e boa sorte

S

valeu já consegui enviar um email com um pdf de 4.5mb em anexo usando o JavaMail, com o seguinte código

package Principal;

import java.io.*;
import java.util.*;
import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;

public class Email {

    private static String EMAIL_REMETENTE = "seuemail";
    private static String NOME_REMETENTE = "seunome";
    private static String SERVIDOR_SMTP = "enderecosmtp";
    private static String SENHA = "senha";

    public void enviarEmail(String assunto, String conteudo, Cliente destinatario, String arquivo) throws AddressException, MessagingException {
        Session sessao = obterSessao();
        Message mensagem = criarMensagem(sessao, assunto, destinatario);
        adicionarConteudoEAnexo(mensagem, conteudo, destinatario, arquivo);
        mensagem.saveChanges();
        Transport transport = null;
        try {
            transport = sessao.getTransport("smtp");
            transport.send(mensagem);
        } finally {
            transport.close();
        }
    }

    private Message criarMensagem(Session session, String assunto, Cliente destinatario) throws MessagingException, AddressException {
        MimeMessage mensagem = new MimeMessage(session);
        Address enderecoRemetente = null;
        Address enderecoDestinatario = null;
        try {
            enderecoDestinatario = new InternetAddress(destinatario.getEmail(), destinatario.getNome());
            enderecoRemetente = new InternetAddress(EMAIL_REMETENTE, NOME_REMETENTE);
        } catch (UnsupportedEncodingException ex) {
            throw new AddressException(ex.getMessage());
        }
        mensagem.addRecipient(Message.RecipientType.TO, enderecoDestinatario);
        mensagem.setFrom(enderecoRemetente);
        mensagem.setSubject(assunto);
        mensagem.setSentDate(new Date());
        return mensagem;
    }

    private void adicionarConteudoEAnexo(Message message, String conteudo, Cliente destinatario, String arquivo) throws MessagingException, AddressException {
        // Cria um Multipart que será composto pelo conteudo e pelo anexo
        Multipart multipart = new MimeMultipart();
        // Cria a parte do corpo da mensagem (texto do conteúdo do e-mail)
        BodyPart messageBodyPartConteudo = new MimeBodyPart();
        messageBodyPartConteudo.setContent(conteudo, "text/html");
        // Adiciona o corpo da mensagem ao Multipart
        multipart.addBodyPart(messageBodyPartConteudo);
        if (arquivo != null && !arquivo.equals("")) {
            // Cria uma segunda parte do corpo (anexos do contéudo do e-mail)
            BodyPart messageBodyPartAnexo = new MimeBodyPart();
            // Cria o anexo
            DataSource source = new FileDataSource(arquivo);
            // Define o data handler para o anexo
            messageBodyPartAnexo.setDataHandler(new DataHandler(source));
            // Define o nome do arquivo
            String nomeArquivo = new File(arquivo).getName();
            messageBodyPartAnexo.setFileName(nomeArquivo);
            // Adiciona o anexo ao Multipart
            multipart.addBodyPart(messageBodyPartAnexo);
        }
        // Adiciona o Multipart a mensagem
        message.setContent(multipart);
    }

    private Session obterSessao() {
        Session sessao = null;
        Properties props = new Properties();
        props.put("mail.smtp.host", SERVIDOR_SMTP);
        props.put("mail.smtp.auth", "true");
        sessao = Session.getDefaultInstance(props, new Autenticador(EMAIL_REMETENTE, SENHA));
        return sessao;
    }

    public class Autenticador extends javax.mail.Authenticator {

        private String user;
        private String senha;

        public Autenticador() {
        }

        public Autenticador(String user, String senha) {
            this.user = user;
            this.senha = senha;
        }

        @Override
        public PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(user, senha);
        }
    }
}


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Principal;

import java.io.Serializable;

/**
 *
 * @author Junior
 */
public class Cliente implements Serializable {

    private long id;
    private String nome = "";
    private String email = "";
    private String telefone = "";

    public Cliente() {
    }

    public Cliente(String nome, String email, String telefone) {
        this.nome = nome;
        this.email = email;
        this.telefone = telefone;

    }

    public Cliente(long id, String nome, String email, String telefone) {
        this(nome, email, telefone);
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public String getNome() {
        return nome;
    }
}

A parte de relatorio eu to estudando pra ver como fazer graficos e tal, estou gostando até o momento, estou usando jasper e a ferramenta ireport para construir os relatorios.

ridelmar

Fala Shakall !!

Cara, desculpa a demora na resposta, acabei de sair do inferno de um projeto q não tinha tempo pra nada !!

O código que vc mandou é muito bom, já desenvolvi um parecido que enviava vários anexos de diversos formatos (HTML/PDF/JPG), caso vc tenha que enviar vários anexos de tamanho relativamente grande tome cuidado com essa parte do código para não comprometer o desempenho do objeto da classe Message que será encapsulado.

if (arquivo != null && !arquivo.equals("")) {   
        // Cria uma segunda parte do corpo (anexos do contéudo do e-mail)   
        BodyPart messageBodyPartAnexo = new MimeBodyPart();   
        // Cria o anexo   
        DataSource source = new FileDataSource(arquivo);   
        // Define o data handler para o anexo   
        messageBodyPartAnexo.setDataHandler(new DataHandler(source));   
        // Define o nome do arquivo   
        String nomeArquivo = new File(arquivo).getName();   
        messageBodyPartAnexo.setFileName(nomeArquivo);   
        // Adiciona o anexo ao Multipart   
        multipart.addBodyPart(messageBodyPartAnexo);   
    }

Recomendo utilizar a Jasper/Ireport, o proprio Jasper tem recursos para converter documentos em formatos PDF/HTML evitando programação.

[]´s e boa sorte

S

Valeu pelas dicas!!!

Criado 5 de janeiro de 2009
Ultima resposta 19 de jan. de 2009
Respostas 4
Participantes 2