Subversion Repositories Integrator Subversion

Rev

Blame | Last modification | View Log | Download | RSS feed

package br.edu.cesmac.sic.core.domain.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.mail.Address;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
import javax.mail.util.ByteArrayDataSource;

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;

import br.edu.cesmac.core.exception.NegocioException;
import br.edu.cesmac.core.util.ArquivoUtil;
import br.edu.cesmac.core.util.EmailBuilder;
import br.edu.cesmac.core.util.VerificadorUtil;
import br.edu.cesmac.sic.core.domain.model.Arquivo;
import br.edu.cesmac.sic.core.domain.model.ProjetoPesquisaRelatorio;

public class EmailUtil {
       
        private static final String MENSAGEM_TEXTO_SOBRE_MUDANCAS_SITUACAO_INSCRICAO_SISTEMA_INICIACAO_CIENTIFICA = "Houve atualização da situação da inscrição do projeto de pesquisa submetido. Para mais detalhes acesse o Sistema de Iniciação Científica.";
        private static final String ASSUNTO_EMAIL_SISTEMA_INICIACAO_CIENTIFICA = "SISTEMA DE INICIAÇÃO CIENTÍFICA";
        private static final String NOME_PROPRIEDADE_EMAIL_EMAILORIGEM = "email.emailorigem";
        private static final String NOME_PROPRIEDADE_EMAIL_SENHA = "email.senha";
        private static final String NOME_PROPRIEDADE_EMAIL_USUARIO = "email.usuario";
        private static final String NOME_PROPRIEDADE_EMAIL_PORTA = "email.porta";
        private static final String NOME_PROPRIEDADE_EMAIL_HOSTNAME = "email.hostname";
        private static final String NOME_ARQUIVO_EMAIL_PROPERTY = "/email.properties";
        private static final String NOME_ARQUIVO_PADRAO_EMAIL = "/mensagemPadrao.html";

       
        public static void enviarEmailComInformacoesSobreInscricao(String emailDestino, String observacao) {
                try {
                        HtmlEmail email = criarEmailHtmlIhAdicionarPropriedadePadrao();
                       
                        email.addTo(emailDestino);
                        email.setSubject(ASSUNTO_EMAIL_SISTEMA_INICIACAO_CIENTIFICA);
//                      String textoHtml = gerarHtmlMensagemDoEmail(usuario, senha);
//                      email.setHtmlMsg(textoHtml.toString());
//                      email.setHtmlMsg(observacao);
                        StringBuilder texto = new StringBuilder(MENSAGEM_TEXTO_SOBRE_MUDANCAS_SITUACAO_INSCRICAO_SISTEMA_INICIACAO_CIENTIFICA);
                        if (VerificadorUtil.naoEstaNuloOuVazio(observacao)) {
                                texto.append("\n\nOBSERVAÇÕES:\n");
                                texto.append(observacao);
                        }
                        email.setTextMsg(texto.toString());
                        email.send();
               
                } catch (EmailException | IOException e) {
                        throw new NegocioException("Erro ao enviar email: "+ e.getMessage());
                }
        }
       
        public static void enviarEmailComInformacoesSobreInscricao(String emailDestino, String mensagemPrincipal, String observacao) {
                try {
                        HtmlEmail email = criarEmailHtmlIhAdicionarPropriedadePadrao();
                       
                        email.addTo(emailDestino);
                        email.setSubject(ASSUNTO_EMAIL_SISTEMA_INICIACAO_CIENTIFICA);
                        StringBuilder texto = new StringBuilder(mensagemPrincipal);
                        if (VerificadorUtil.naoEstaNuloOuVazio(observacao)) {
                                texto.append("\n\nOBSERVAÇÕES:\n");
                                texto.append(observacao);
                        }
                        email.setTextMsg(texto.toString());
                        email.send();
               
                } catch (EmailException | IOException e) {
                        throw new NegocioException("Erro ao enviar email: "+ e.getMessage());
                }
        }
       
        public static void enviarEmailParaContatoProjetoPesquisa(String emailDestino, String tituloProjetoPesquisa, String conteudo) {
                try {
                        HtmlEmail email = criarEmailHtmlIhAdicionarPropriedadePadrao();
                       
                        email.addTo(emailDestino);
                        email.setSubject(ASSUNTO_EMAIL_SISTEMA_INICIACAO_CIENTIFICA + " : " + tituloProjetoPesquisa);
//                      email.setHtmlMsg(conteudo);
                        email.setTextMsg(conteudo);
                        email.send();
               
                } catch (EmailException | IOException e) {
                        throw new NegocioException("Erro ao enviar email: "+ e.getMessage());
                }
        }
       
        public static void enviarEmailRelatorioFinal(String emailDestino, ProjetoPesquisaRelatorio projetoPesquisaRelatorio, String legendaArquivo, Arquivo arquivo) {
                try {
                        final PropertiesUtil propertiesUtil = new PropertiesUtil(NOME_ARQUIVO_EMAIL_PROPERTY);
                       
                        MimeMessage email = new EmailBuilder(propertiesUtil.retornarPropriedadeDoArquivo(NOME_PROPRIEDADE_EMAIL_HOSTNAME),
                                                                                                 propertiesUtil.retornarPropriedadeDoArquivo(NOME_PROPRIEDADE_EMAIL_PORTA),
                                                                                                 propertiesUtil.retornarPropriedadeDoArquivo(NOME_PROPRIEDADE_EMAIL_EMAILORIGEM),
                                                                                                 propertiesUtil.retornarPropriedadeDoArquivo(NOME_PROPRIEDADE_EMAIL_SENHA))
                                                                        .comEmailOrigem(new PropertiesUtil(NOME_ARQUIVO_EMAIL_PROPERTY).retornarPropriedadeDoArquivo(NOME_PROPRIEDADE_EMAIL_EMAILORIGEM))
                                                                        .comDataEnvio(new Date())
                                                                        .comEmailDestino(emailDestino)
                                                                        .comAssunto(projetoPesquisaRelatorio.getProjetoPesquisa().getDescricaoDoProcessoSeletivo())
                                                                        .comConteudoHtml("<html>Código HTML da mensagem ")
                                                                        .adicionarAnexo(legendaArquivo, arquivo.getArquivo(), arquivo.getExtensao())
                                                                        .build();
                        Transport.send(email);
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
       
        private static Session criarSessaoPropriedadePadrao() throws IOException, EmailException {
                try {
                        final PropertiesUtil propertiesUtil = new PropertiesUtil(NOME_ARQUIVO_EMAIL_PROPERTY);
                        Properties props = new Properties();
                        props.put("mail.smtp.host", propertiesUtil.retornarPropriedadeDoArquivo(NOME_PROPRIEDADE_EMAIL_HOSTNAME));  
                        props.put("mail.smtp.auth", "true");  
                        props.put("mail.smtp.port", propertiesUtil.retornarPropriedadeDoArquivo(NOME_PROPRIEDADE_EMAIL_PORTA));  
                        props.put("mail.smtp.starttls.enable", "true");  
                        props.put("mail.smtp.socketFactory.port", propertiesUtil.retornarPropriedadeDoArquivo(NOME_PROPRIEDADE_EMAIL_PORTA));  
                        props.put("mail.smtp.socketFactory.fallback", "false");  
                        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
       
                        return Session.getDefaultInstance(props, new javax.mail.Authenticator() {
                                protected PasswordAuthentication getPasswordAuthentication() {
                                        try {
                                                return new PasswordAuthentication(propertiesUtil.retornarPropriedadeDoArquivo(NOME_PROPRIEDADE_EMAIL_EMAILORIGEM), propertiesUtil.retornarPropriedadeDoArquivo(NOME_PROPRIEDADE_EMAIL_SENHA));
                                        } catch (IOException e) {
                                                e.printStackTrace();
                                        }
                                        return null;
                                }
                          });
                        } catch (Exception e) {
                                e.printStackTrace();
                        }
                return null;
        }
       
        /*
        private static String gerarHtmlMensagemDoEmail(String usuario, String senha) {
                AbrirArquivo abrirArquivo = new AbrirArquivo();
                return abrirArquivo.retornarConteudoDoArquivo(NOME_ARQUIVO_PADRAO_EMAIL);
        }
        */

       
        private static HtmlEmail criarEmailHtmlIhAdicionarPropriedadePadrao() throws IOException, EmailException {
                PropertiesUtil propertiesUtil = new PropertiesUtil(NOME_ARQUIVO_EMAIL_PROPERTY);
               
                String hostname = propertiesUtil.retornarPropriedadeDoArquivo(NOME_PROPRIEDADE_EMAIL_HOSTNAME);
                String porta = propertiesUtil.retornarPropriedadeDoArquivo(NOME_PROPRIEDADE_EMAIL_PORTA);
                String usuarioEmail =propertiesUtil.retornarPropriedadeDoArquivo( NOME_PROPRIEDADE_EMAIL_USUARIO);
                String senha = propertiesUtil.retornarPropriedadeDoArquivo( NOME_PROPRIEDADE_EMAIL_SENHA);
                String emailOrigem = propertiesUtil.retornarPropriedadeDoArquivo(NOME_PROPRIEDADE_EMAIL_EMAILORIGEM);
                       
                HtmlEmail email = new HtmlEmail();
                email.setHostName(hostname);
                email.setSmtpPort(new Integer(porta));
                email.setAuthentication(usuarioEmail, senha);
                email.setSSLOnConnect(true);
                email.setFrom(emailOrigem);
                return email;
        }

        public static void enviarEmailComParecerDoRecurso(String emailDestino, String conteudo, Object object) {
                try {
                        HtmlEmail email = criarEmailHtmlIhAdicionarPropriedadePadrao();
                       
                        email.addTo(emailDestino);
                        email.setSubject(ASSUNTO_EMAIL_SISTEMA_INICIACAO_CIENTIFICA + " : PARECER");
                        email.setTextMsg(conteudo);
                        email.send();
               
                } catch (EmailException | IOException e) {
                        throw new NegocioException("Erro ao enviar email: "+ e.getMessage());
                }
        }

        public static class MailSenderPlus {
                //o tratamento de excessoes foi simplificado (throws MessagingException)
                //para facilitar o entendimento do exemplo
                public static void main(String[] args) throws MessagingException, FileNotFoundException, IOException {
                        /*
                        String hostname = propertiesUtil.retornarPropriedadeDoArquivo(NOME_PROPRIEDADE_EMAIL_HOSTNAME);
                        String porta = propertiesUtil.retornarPropriedadeDoArquivo(NOME_PROPRIEDADE_EMAIL_PORTA);
                        String usuarioEmail =propertiesUtil.retornarPropriedadeDoArquivo( NOME_PROPRIEDADE_EMAIL_USUARIO);
                        String senha = propertiesUtil.retornarPropriedadeDoArquivo( NOME_PROPRIEDADE_EMAIL_SENHA);
                        String emailOrigem = propertiesUtil.retornarPropriedadeDoArquivo(NOME_PROPRIEDADE_EMAIL_EMAILORIGEM);
                               
                        HtmlEmail email = new HtmlEmail();
                        email.setHostName(hostname);
                        email.setSmtpPort(new Integer(porta));
                        email.setAuthentication(usuarioEmail, senha);
                        email.setSSLOnConnect(true);
                        email.setFrom(emailOrigem);
                        */

                        //objeto para definicao das propriedades de configuracao do provider
//                      PropertiesUtil propertiesUtil = new PropertiesUtil(NOME_ARQUIVO_EMAIL_PROPERTY);
                        Properties props = new Properties();
                        //o valor "smtp.host.com.br" deve ser alterado para o seu servidor SMTP
//                      props.put("mail.host",propertiesUtil.retornarPropriedadeDoArquivo(NOME_PROPRIEDADE_EMAIL_HOSTNAME));
                       
                        props.put("mail.smtp.host", "smtp.gmail.com");  
                        props.put("mail.smtp.auth", "true");  
                        props.put("mail.smtp.port", "465");  
                        props.put("mail.smtp.starttls.enable", "true");  
                        props.put("mail.smtp.socketFactory.port", "465");  
                        props.put("mail.smtp.socketFactory.fallback", "false");  
                        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
                        //obtendo um Session com a configuração
                        //do servidor SMTP definida em props
                        Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
                                protected PasswordAuthentication getPasswordAuthentication() {
                                        return new PasswordAuthentication("brunolopespeixoto@gmail.com", "bruno0910");
                                }
                          });
                 
                        //criando a mensagem
                        MimeMessage message = new MimeMessage(session);

                        //substituir pelos e-mails desejados
//                      Address from = new InternetAddress(propertiesUtil.retornarPropriedadeDoArquivo(NOME_PROPRIEDADE_EMAIL_EMAILORIGEM));
                        Address from = new InternetAddress("brunolopespeixoto@gmail.com");
                        Address to = new InternetAddress("brunolopespeixoto@hotmail.com");

                        //configurando o remetente e o destinatario
                        message.setFrom(from);
                        message.addRecipient(RecipientType.TO, to);

                        //configurando a data de envio,  o assunto e o texto da mensagem
                        message.setSentDate(new Date());
                        message.setSubject("Enviando uma mensagem formatada com anexo");
                 
                        // conteudo html que sera atribuido a mensagem
                        String htmlMessage = "< h t m l > Código HTML da mensagem ";

                        //criando a Multipart
                        Multipart multipart = new MimeMultipart();

                        //criando a primeira parte da mensagem
                        MimeBodyPart attachment0 = new MimeBodyPart();
                        //configurando o htmlMessage com o mime type
                        attachment0.setContent(htmlMessage,"text/html; charset=UTF-8");
                        //adicionando na multipart
                        multipart.addBodyPart(attachment0);
                 
                        //arquivo que será anexado
                        String pathname = "C:/Users/bruno/Downloads/teste.jpeg";//pode conter o caminho
                        File file = new File(pathname);
                       
//                      ByteArrayDataSource dataSource = new ByteArrayDataSource(arquivo.getArquivo(), ArquivoUtil.retornarContentTypeArquivo(arquivo.getExtensao()));
                        ByteArrayDataSource dataSource = new ByteArrayDataSource(new Arquivo().getArquivo(), "");

                        //criando a segunda parte da mensagem
                        MimeBodyPart attachment1 = new MimeBodyPart();  
                        //configurando o DataHandler para o arquivo desejado
                        //a leitura dos bytes, descoberta e configuracao do tipo
                        //do arquivo serão resolvidos pelo JAF (DataHandler e FileDataSource)
//                      attachment1.setDataHandler(new DataHandler(new FileDataSource(file)));
                        attachment1.setDataHandler(new DataHandler(dataSource));
                    //configurando o nome do arquivo que pode ser diferente do arquivo
                        //original Ex: setFileName("outroNome.png")
//                      attachment1.setFileName(file.getName());
                        attachment1.setFileName("legendaArquivo");
                        //adicionando o anexo na multipart
                        multipart.addBodyPart(attachment1);

                        //adicionando a multipart como conteudo da mensagem
                        message.setContent(multipart);
                 
                        //enviando
                        Transport.send(message);
                 
                        System.out.println("E-mail enviado com sucesso!");
                }
        }

}