Java tutorial
/* * 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; } }