isjexecact.br.com.inso.Funcionalidades.EnviarEmail.EnviarEmail.java Source code

Java tutorial

Introduction

Here is the source code for isjexecact.br.com.inso.Funcionalidades.EnviarEmail.EnviarEmail.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package isjexecact.br.com.inso.Funcionalidades.EnviarEmail;

import isjexecact.AppSettings;
import isjexecact.br.com.inso.dao.Isjwfmaillog.Isjwfmaillog;
import isjexecact.br.com.inso.dao.Isjwfmaillog.IsjwfmaillogDAOHibernate;
import isjexecact.br.com.inso.dao.Isjwfmaillog.IsjwfmaillogId;
import isjexecact.br.com.inso.utils.ErrorSys;
import isjexecact.br.com.inso.utils.Funcoes;
import static isjexecact.br.com.inso.utils.Funcoes.getDataAtual;
import static isjexecact.br.com.inso.utils.Funcoes.getHoraAtual;
import isjexecact.br.com.inso.utils.HibernateUtil;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
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.MimeMultipart;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

/**
 *
 * @author glauber.duma
 */
public class EnviarEmail implements IEnviarEmail {
    private String de;
    private String para;
    private String comcopia;
    private String comcopiaoculta;
    private String smtp;
    private String porta;
    private String assunto;
    private String mensagem;
    private String arquivo;
    private boolean autentica;
    private String login;
    private String senha;
    private String statusRetorno;
    private boolean textohtml;

    /**
     * Construtor padro.
     */
    public EnviarEmail() {
        this.de = AppSettings.getValue("mailSender");
        this.para = "";
        this.smtp = AppSettings.getValue("mailHost");
        this.porta = AppSettings.getValue("mailPort");
        this.assunto = "";
        this.mensagem = "";
        this.arquivo = "";
        this.autentica = !AppSettings.getValue("mailCredentials").toLowerCase().equals("false");
        this.login = AppSettings.getValue("mailuserName");
        this.senha = AppSettings.getValue("mailpassWord");
        this.statusRetorno = "";
        this.textohtml = false;
        this.comcopia = "";
        this.comcopiaoculta = "";

    }

    @Override

    /**
    * Enviar e-mail.
    * 
    */

    public void SendEmail() {

        // Verifica as configuraes necessria do servidor smtp e caso no esteja preenchida. tentar carregar da configurao da aplicao.

        this.statusRetorno = "OK";

        // cria algumas propriedades e obtem uma sessao padrao
        Properties props = System.getProperties();

        inicializapropertiesemail(props);

        Session session = Session.getInstance(props, null);

        try {
            // cria a mensagem
            MimeMessage msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(this.de));

            // Adiciona destinatarios, com copia e com copia oculta
            adicionarDestinatarios(msg);

            // Adicionar o assunto
            msg.setSubject(this.assunto);

            // cria a Multipart
            Multipart mp = new MimeMultipart();

            // cria a primeira parte da mensagem
            MimeBodyPart mbp1 = new MimeBodyPart();
            if (!textohtml) {
                mbp1.setText(this.mensagem);
            } else {
                mbp1.setContent(this.mensagem, "text/html");
            }
            mp.addBodyPart(mbp1);

            // anexa o arquivo na mensagem
            if (!"".equals(this.arquivo)) {
                // cria a segunda parte da mensage
                MimeBodyPart mbp2 = new MimeBodyPart();

                FileDataSource fds = new FileDataSource(this.arquivo);
                mbp2.setDataHandler(new DataHandler(fds));
                mbp2.setFileName(fds.getName());
                mp.addBodyPart(mbp2);
            }

            // adiciona a Multipart na mensagem
            msg.setContent(mp);

            // configura a data: cabecalho
            msg.setSentDate(new Date());

            // Cria o objeto de transporte utilizando smtp e passando os dados de autenticao

            if (this.autentica) {
                Transport tr = session.getTransport("smtp");
                tr.connect(this.smtp, this.login, this.senha);
                msg.saveChanges();
                // envia a mensagem
                tr.sendMessage(msg, msg.getAllRecipients());
                tr.close();
            } else {
                Transport.send(msg);
            }

            // Gravar o e-mail enviado na tabela de log de e-mail

            GravaLogEmail();

        } catch (MessagingException mex)
        //catch (SendFailedException mex)                  
        {
            //this.statusRetorno = mex.toString() ;                
            this.statusRetorno = ErrorSys.getStackTrace(mex);
            // Gravar o e-mail enviado na tabela de log de e-mail
            GravaLogEmail();
        }

    }

    /** 
    * Adicionar os destinatarios da mensagem.
      * Entende-se por destinatrios, os destinatrios, com cpia e com cpia oculta
    *
    * @since              11/08/2014
    * @param 
    * @param  msg       Objeto do tipo MimeMessage.       
    * @return             void.
    * @author             Glauber Vicente Duma 
    */

    private void adicionarDestinatarios(MimeMessage msg) throws MessagingException {
        // Glauber - Estou ajustando este trecho para permitir mais de um destinrio no email.
        // Isto  necessario porque existem alguns clientes com regra de EMAIL onde o primeiro email deve ser o que desbloqueia a regra do
        // servidor de email.
        // Tratar virgula

        // Destinatarios da mensagem

        String destinatarios[] = null;

        if (this.para != null && (this.para.contains(";") || this.para.contains(","))) {

            this.para = this.para.replace(";", ",");
            destinatarios = this.para.split(",");

            for (int i = 0; i <= (destinatarios.length - 1); i++) {
                Address address[] = { new InternetAddress(destinatarios[i].trim()) };
                msg.addRecipients(Message.RecipientType.TO, address);
            }
        } else {
            msg.addRecipients(Message.RecipientType.TO, this.para);
        }
        // Com copia

        if (this.comcopia == null) {
            this.comcopia = "";
        }

        if ((this.comcopia.contains(";") || this.comcopia.contains(","))) {

            this.comcopia = this.comcopia.replace(";", ",");
            destinatarios = this.comcopia.split(",");

            for (int i = 0; i <= (destinatarios.length - 1); i++) {
                Address address[] = { new InternetAddress(destinatarios[i].trim()) };
                msg.addRecipients(Message.RecipientType.CC, address);
            }
        } else {
            msg.addRecipients(Message.RecipientType.CC, this.comcopia);
        }

        // Com copia oculta

        if (this.comcopiaoculta == null) {
            this.comcopiaoculta = "";
        }

        if ((this.comcopiaoculta.contains(";") || this.comcopiaoculta.contains(","))) {
            this.comcopiaoculta = this.comcopiaoculta.replace(";", ",");
            destinatarios = this.comcopiaoculta.split(",");

            for (int i = 0; i <= (destinatarios.length - 1); i++) {
                Address address[] = { new InternetAddress(destinatarios[i].trim()) };
                msg.addRecipients(Message.RecipientType.BCC, address);
            }
        } else {
            msg.addRecipients(Message.RecipientType.BCC, this.comcopiaoculta);
        }
    }

    /** 
    * Inicializar a properties que  utilizada pelo objeto session.
    *
    * @since              04/07/2012
    * @param 
    * @param  props       Properties que deve ser seu contedo alimentado.       
    * @return             void.
    * @author             Glauber Vicente Duma 
    */

    private void inicializapropertiesemail(Properties props) {
        props.put("mail.smtp.host", this.smtp);
        if (!"".equals(this.porta))
            props.put("mail.smtp.port", this.porta);
        if (this.autentica) {
            props.put("mail.smtp.auth", true);
            props.put("mail.smtp.user", this.login);
        }
    }

    /**
     * Grava o log com o resultado do envio do e-mail.
     */
    private void GravaLogEmail() {
        //
        // Glauber 25/07/2014
        // 
        // Caso ocorra um erro de gravao da tabela de log de e-mail, utilizo o campo statusRetorno para informar do ocorrido.
        //
        try {

            // Criar o contexto de sesso do hibernate e abrir a conexo.

            SessionFactory sessionFactory = HibernateUtil.getSessionFactory(null);
            org.hibernate.Session sessao = sessionFactory.openSession();
            Transaction tx = sessao.beginTransaction();

            // Cria o objeto que  a foto do registro na tabela conforme mapeamento do hibernate

            IsjwfmaillogId isjwfmaillogid = new IsjwfmaillogId();
            isjwfmaillogid.setData(getDataAtual());
            isjwfmaillogid.setHora(getHoraAtual());
            isjwfmaillogid.setOrigem(Funcoes.TruncarString(this.de, 250));
            isjwfmaillogid.setDestino(Funcoes.TruncarString(this.para, 250));
            isjwfmaillogid.setAssuntoEmail(Funcoes.TruncarString(this.assunto, 250));
            isjwfmaillogid.setCorpo(Funcoes.TruncarString(this.mensagem, 4000));
            isjwfmaillogid.setStatusEnvio(Funcoes.TruncarString(statusRetorno, 4000));

            // Criar o objeto principal

            Isjwfmaillog isjwfmaillog = new Isjwfmaillog();
            isjwfmaillog.setId(isjwfmaillogid);

            // Criar o objeto responsvel pela persistncia, injeta o contexto de sesso e chama o metodo para persistir o objeto.

            IsjwfmaillogDAOHibernate crudmail = new IsjwfmaillogDAOHibernate();

            crudmail.setSession(sessao);
            crudmail.inserirRegistro(isjwfmaillog);
            tx.commit();
            sessao.close();
            sessionFactory.close();
        } catch (Exception ex) {
            this.statusRetorno = "Erro ao gravar o log de envio de email(isjwfmaillog):" + ex.getMessage();
        }

    }

    // Gets & Sets

    @Override
    public boolean isAutentica() {
        return autentica;
    }

    @Override
    public void setAutentica(boolean autentica) {
        this.autentica = autentica;
    }

    @Override
    public String getDe() {
        return de;
    }

    @Override
    public void setDe(String de) {
        this.de = de;
    }

    @Override
    public String getPara() {
        return para;
    }

    @Override
    public void setPara(String para) {
        this.para = para;
    }

    @Override
    public String getSmtp() {
        return smtp;
    }

    @Override
    public void setSmtp(String smtp) {
        this.smtp = smtp;
    }

    @Override
    public String getPorta() {
        return porta;
    }

    @Override
    public void setPorta(String porta) {
        this.porta = porta;
    }

    @Override
    public String getAssunto() {
        return assunto;
    }

    @Override
    public void setAssunto(String assunto) {
        this.assunto = assunto;
    }

    @Override
    public String getMensagem() {
        return mensagem;
    }

    @Override
    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }

    @Override
    public String getArquivo() {
        return arquivo;
    }

    @Override
    public void setArquivo(String arquivo) {
        this.arquivo = arquivo;
    }

    @Override
    public String getLogin() {
        return login;
    }

    @Override
    public void setLogin(String login) {
        this.login = login;
    }

    @Override
    public String getSenha() {
        return senha;
    }

    @Override
    public void setSenha(String senha) {
        this.senha = senha;
    }

    @Override
    public String getStatusRetorno() {
        return statusRetorno;
    }

    public boolean isTextohtml() {
        return textohtml;
    }

    public void setTextohtml(boolean textohtml) {
        this.textohtml = textohtml;
    }

    public String getComcopia() {
        return comcopia;
    }

    public void setComcopia(String comcopia) {
        this.comcopia = comcopia;
    }

    public String getComcopiaoculta() {
        return comcopiaoculta;
    }

    public void setComcopiaoculta(String comcopiaoculta) {
        this.comcopiaoculta = comcopiaoculta;
    }

}