miércoles, 5 de enero de 2011

JAVA, Clase para el envio de correos electronicos

Cualquier inquietud no duden en preguntar...

Para el correctu funcionamiento de esta clase es necesario descargar la libreria javamail-1.4.3 e instanciar mail.jar
Abstraccion del medio de envio Correo Electronico.

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
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 router.Bin.Agentes.clSistema;
/***
 * Clase que representa el mdio de envio correo electronico
 * @author Diego Fernando Carvajal Rodriguez
 * @version 001
 * @see #################
 * @since 03/11/2010 - JDK 1.6
 */


public class clCorreo {
    private List<String> lsPrtclo;
    private String sUsrio;
    private String sClve;
    private String sPrtclo;
    private int iTpoEnvio;// 1 == Correo; 2 == ftp
    private int iPrto;
    private String sDe;
    private List<String> lsPra;
    private List<String> lsCpiaOclta;
    private String sTxto;
    private String sAsnto;
    private String sHost;
    private BodyPart bpAdjnto;
    private BodyPart bpTxto;
    private MimeMultipart mmCrpo;
    private String sDscpcionError;
    private Properties pPrpddes;
    private boolean bTls;
    private boolean bAtntccion;
    private boolean bLog;
    private Session sSssion;
    private Transport tEnvio;
    private MimeMessage msCrreo;
    private String sTpoArchvo;
    private String sEstndar;
    private List<String> lsCntndo;
    private clPlano oclPlno;
    private String arsPra2[];
    private String arsCpiaOclta[];
    private int iCont;
    private DataSource dsArchvo;
    private List<File> lsArchvo;
    private List <String> lsPrtclosSprtdos;
    private boolean bEstdo;
    public clCorreo(){
        this.lsPrtclo = new ArrayList();
        this.lsCntndo = new ArrayList();
        this.lsPrtclo = lsProtocolosSoportados();
        this.sUsrio = "";
        this.sClve = "";
        this.sPrtclo = "";
        this.iPrto = -1;
        this.sDe = "";
        this.lsPra = new ArrayList();
        this.arsPra2 = null;
        this.arsCpiaOclta = null;
        this.lsCpiaOclta = new ArrayList();
        this.sTxto = "";
        this.sHost = "";
        this.bpAdjnto = new MimeBodyPart();
        this.bpTxto = new MimeBodyPart();
        this.mmCrpo = new MimeMultipart();
        this.sDscpcionError = "";
        this.pPrpddes = new Properties();
        this.bTls = false;
        this.bAtntccion = false;
        this.sSssion = null;
        this.bLog = false;
        this.tEnvio = null;
        this.sAsnto = "";
        this.msCrreo = null;
        this.sTpoArchvo = "";
        this.sEstndar = "";
        this.oclPlno = new clPlano();
        this.arsPra2 = null;
        this.arsCpiaOclta = null;
        this.iCont = 0;
        this.dsArchvo = null;
        this.lsArchvo = new ArrayList();
        this.lsPrtclosSprtdos = new ArrayList();
        this.bEstdo = true;
        this.iTpoEnvio = 0;
    }
    public int getiTpoEnvio() {
        return this.iTpoEnvio;
    }
    public void setiTpoEnvio(int iTpoEnvio) {
        this.iTpoEnvio = iTpoEnvio;
    }
    public boolean isbAtntccion() {
        return bAtntccion;
    }
    public void setbAtntccion(boolean bAtntccion) {
        this.bAtntccion = bAtntccion;
    }
    public String getsEstndar() {
        return sEstndar;
    }
    public void setsEstndar(String sEstndar) {
        this.sEstndar = sEstndar;
    }
    public String getsAsnto() {
        return sAsnto;
    }
    public void setsAsnto(String sAsnto) {
        this.sAsnto = sAsnto;
    }
    public List<String> getLsCntndo() {
        return lsCntndo;
    }
    public void setLsCntndo(List<String> lsCntndo) {
        this.lsCntndo = lsCntndo;
    }
    public String getsTpoArchvo() {
        return sTpoArchvo;
    }
    public void setsTpoArchvo(String sTpoArchvo) {
        this.sTpoArchvo = sTpoArchvo;
    }
    public String getsClve() {
        return this.sClve;
    }
    public boolean isbLog() {
        return this.bLog;
    }
    public boolean isbTls() {
        return this.bTls;
    }
    public int getiPrto() {
        return this.iPrto;
    }
    public List<String> getLsCpiaOclta() {
        return this.lsCpiaOclta;
    }
    public List<String> getLsPrtclo() {
        return this.lsPrtclo;
    }
    public String getsDe() {
        return this.sDe;
    }
    public String getsHost() {
        return this.sHost;
    }
    public String getsPrtclo() {
        return this.sPrtclo;
    }
    public String getsTxto() {
        return this.sTxto;
    }
    public String getsUsrio() {
        return this.sUsrio;
    }
    public void setbLog(boolean bLog) {
        this.bLog = bLog;
    }
    public void setbTls(boolean bTls) {
        this.bTls = bTls;
    }
    public void setiPrto(int iPrto) {
        this.iPrto = iPrto;
    }
    public void setLsCpiaOclta(List<String> lsCpiaOclta) {
        this.lsCpiaOclta = lsCpiaOclta;
    }
    public void setsClve(String sClve) {
        this.sClve = sClve;
    }
    public void setsDe(String sDe) {
        this.sDe = sDe;
    }
    public void setsHost(String sHost) {
        this.sHost = sHost;
    }
    public void setsPrtclo(String sPrtclo) {
        this.sPrtclo = sPrtclo;
    }
    public void setsTxto(String sTxto) {
        this.sTxto = sTxto;
    }
    public void setsUsrio(String sUsrio) {
        this.sUsrio = sUsrio;
    }
    public List<String> getLsPra() {
        return this.lsPra;
    }
    public void setLsPra(List<String> lsPra) {
        this.lsPra = lsPra;
    }

    /***
     * Metodo para cargar los protocolos del servidor de correo
     * @return lista de protocolos soportados por la aplicacion
     */
    private List <String> lsProtocolosSoportados(){
        this.lsPrtclosSprtdos = new ArrayList();
        this.lsPrtclosSprtdos.add("smtp");
        this.lsPrtclosSprtdos.add("pop3");
        this.lsPrtclosSprtdos.add("imap");
        return this.lsPrtclosSprtdos;
    }
    /***
     * Metodo que envia un correo electronico
     * @param lsCntndo Lista con el contenido escrito del correo
     * @param lsArchvo Lista con el contenido adjunto del correo
     * @return boolean true == proceso exitoso; false == proceso fallido
     */
    public synchronized boolean fnbEnviarCorreo(List <String> lsCntndo, List <File> lsArchvo){
        this.bEstdo = true;
        this.bEstdo = fnbCorreo(lsCntndo, lsArchvo);
        if(this.bEstdo){
            try {
                this.tEnvio = this.sSssion.getTransport(this.sPrtclo);
                if(this.bAtntccion){
                    this.tEnvio.connect(this.sUsrio, this.sClve);
                }
                Transport.send(this.msCrreo, this.msCrreo.getAllRecipients());
                this.tEnvio.close();
            } catch (NoSuchProviderException ex) {
                this.sDscpcionError = ex.getMessage();
                System.out.println("\nEXCEPCION: "+this.sDscpcionError);
                this.oclPlno.fnExcepcion("EXCEPCION: "+this.sDscpcionError+" clCorreo:fnbEnviarCorreo:1");
                this.bEstdo = false;
            } catch (MessagingException ex){
                this.sDscpcionError = ex.getMessage();
                System.out.println("\nEXCEPCION: "+this.sDscpcionError);
                this.oclPlno.fnExcepcion("EXCEPCION: "+this.sDscpcionError+" clCorreo:fnbEnviarCorreo:2");
                this.bEstdo = false;
            }
        }
        return this.bEstdo;
    }
    /***
     * Metodo que envia un correo electronico
     * @param lsCntndo Lista con el contenido escrito del correo
     * @param flArchvo Archivo tipo File con el contenido adjunto
     * @return boolean true == proceso exitoso; false == proceso fallido
     */
    public synchronized boolean fnbEnviarCorreo(List <String> lsCntndo, File flArchvo, clSistema oclSstma){
        this.bEstdo = true;
        this.lsArchvo = new ArrayList();
        this.lsArchvo.add(flArchvo);
        this.bEstdo = fnbCorreo(lsCntndo, this.lsArchvo);
        if(this.bEstdo){
            try {
                this.tEnvio = this.sSssion.getTransport(this.sPrtclo);
                if(this.bAtntccion){
                    this.tEnvio.connect(this.sUsrio, this.sClve);
                }
                Transport.send(this.msCrreo, this.msCrreo.getAllRecipients());
                this.tEnvio.close();
            } catch (NoSuchProviderException ex) {
                this.sDscpcionError = ex.getMessage();
                System.out.println("\nEXCEPCION: "+this.sDscpcionError);
                this.oclPlno.fnExcepcion("EXCEPCION: "+this.sDscpcionError+" clCorreo:fnbEnviarCorreo:1");
                this.oclPlno.fnbMueveArchivoWin(flArchvo, oclSstma.getsDrccionRpstrio()+"noProcesado");
                this.bEstdo = false;
            } catch (MessagingException ex){
                this.sDscpcionError = ex.getMessage();
                System.out.println("\nEXCEPCION: "+this.sDscpcionError);
                this.oclPlno.fnExcepcion("EXCEPCION: "+this.sDscpcionError+" clCorreo:fnbEnviarCorreo:2");
                this.oclPlno.fnbMueveArchivoWin(flArchvo, oclSstma.getsDrccionRpstrio()+"noProcesado");
                this.bEstdo = false;
            }
        }
        return this.bEstdo;
    }
    /***
     * Metodo que envia un correo electronico
     * @param flArchvo Archivo tipo File con el contenido adjunto
     * @return boolean true == proceso exitoso; false == proceso fallido
     */
    public synchronized boolean fnbEnviarCorreo(File flArchvo, clSistema oclSstma){
        this.bEstdo = true;
        this.lsArchvo = new ArrayList();
        this.lsArchvo.add(flArchvo);
        this.bEstdo = fnbCorreo(this.lsCntndo, this.lsArchvo);
        if(this.bEstdo){
            try {
                this.tEnvio = this.sSssion.getTransport(this.sPrtclo);
                if(this.bAtntccion){
                    this.tEnvio.connect(this.sUsrio, this.sClve);
                }
                Transport.send(this.msCrreo, this.msCrreo.getAllRecipients());
                this.tEnvio.close();
            } catch (NoSuchProviderException ex) {
                this.sDscpcionError = ex.getMessage();
                System.out.println("\nEXCEPCION: "+this.sDscpcionError);
                this.oclPlno.fnExcepcion("EXCEPCION: "+this.sDscpcionError+" clCorreo:fnbEnviarCorreo:3");
                this.bEstdo = false;
                this.oclPlno.fnbMueveArchivoWin(flArchvo, oclSstma.getsDrccionRpstrio()+"noProcesado");
            } catch (MessagingException ex){
                this.sDscpcionError = ex.getMessage();
                System.out.println("\nEXCEPCION: "+this.sDscpcionError);
                this.oclPlno.fnExcepcion("EXCEPCION: "+this.sDscpcionError+" clCorreo:fnbEnviarCorreo:4");
                this.oclPlno.fnbMueveArchivoWin(flArchvo, oclSstma.getsDrccionRpstrio()+"noProcesado");
                this.bEstdo = false;
            }
        }
        return this.bEstdo;
    }
    /***
     * Metodo que envia un correo electronico
     * @param lsCntndo Lista con el contenido escrito del correo
     * @return boolean true == proceso exitoso; false == proceso fallido
     */
    public synchronized boolean fnbEnviarCorreo(List <String> lsCntndo){
        this.bEstdo = true;
        this.lsArchvo = new ArrayList();
        this.bEstdo = fnbCorreo(lsCntndo, this.lsArchvo);
        if(this.bEstdo){
            try {
                this.tEnvio = this.sSssion.getTransport(this.sPrtclo);
                if(this.bAtntccion){
                    this.tEnvio.connect(this.sUsrio, this.sClve);
                }
                Transport.send(this.msCrreo, this.msCrreo.getAllRecipients());
                this.tEnvio.close();
            } catch (NoSuchProviderException ex) {
                this.sDscpcionError = ex.getMessage();
                System.out.println("\nEXCEPCION: "+this.sDscpcionError);
                this.oclPlno.fnExcepcion("EXCEPCION: "+this.sDscpcionError+" clCorreo:fnbEnviarCorreo:5");
                this.bEstdo = false;
            } catch (MessagingException ex){
                this.sDscpcionError = ex.getMessage();
                System.out.println("\nEXCEPCION: "+this.sDscpcionError);
                this.oclPlno.fnExcepcion("EXCEPCION: "+this.sDscpcionError+" clCorreo:fnbEnviarCorreo:6");
                this.bEstdo = false;
            }
        }
        return this.bEstdo;
    }
    /***
     * Metodo que construye el correo
     * @param lsCntndo Lista con el contenido escrito del correo
     * @param lsArchvo Lista con el contenido adjunto del correo
     * @return boolean true == se construllo el correo exitosamente; false == fallo la construccion del correo
     */
    private boolean fnbCorreo(List <String> lsCntndo, List <File> lsArchvo){
        this.bEstdo = true;
        this.bEstdo = fnbCargaParametros();
        if(this.bEstdo){
            this.bEstdo = fnbCuerpo(lsCntndo, lsArchvo);
            if(this.bEstdo){
                this.iCont = 0;
                try {
                    this.msCrreo = new MimeMessage(this.sSssion);
                    this.msCrreo.setFrom(new InternetAddress(this.sDe));
                    if(!this.lsPra.isEmpty()){
                        this.arsPra2 = this.lsPra.get(0).split("\\;");
                        for(this.iCont = 0; this.iCont<this.arsPra2.length; this.iCont++){
                            this.msCrreo.addRecipient(RecipientType.TO, new InternetAddress(this.arsPra2[this.iCont]));
                        }
                    }else{
                        this.sDscpcionError = "El correo no tiene destinatarios";
                        System.out.println("\nEXCEPCION: "+this.sDscpcionError);
                        this.oclPlno.fnExcepcion("EXCEPCION: "+this.sDscpcionError+" clCorreo:fnbCorreo:1");
                        this.bEstdo = false;
                    }
                    if(this.bEstdo && !this.lsCpiaOclta.isEmpty()){
                        this.arsCpiaOclta = this.lsCpiaOclta.get(0).split("\\;");
                        for(this.iCont = 0; this.iCont<this.arsCpiaOclta.length; this.iCont++){
                            this.msCrreo.addRecipient(RecipientType.BCC, new InternetAddress(this.arsCpiaOclta[this.iCont]));
                        }
                    }
                    this.msCrreo.setSubject(this.sAsnto);
                    this.msCrreo.setContent(this.mmCrpo);
                } catch (MessagingException ex) {
                    this.sDscpcionError = ex.getMessage();
                    System.out.println("\nEXCEPCION: "+this.sDscpcionError);
                    this.oclPlno.fnExcepcion("EXCEPCION: "+this.sDscpcionError+" clCorreo:fnbCorreo:2");
                    this.bEstdo = false;
                }
            }
        }
        return this.bEstdo;
    }
    /***
     * Metodo que carga los parametros basicos previo al envio de correo
     * @return boolean true == si los parametros estan cargados, false == si los parametros no se encuentran cargados
     */
    private boolean fnbCargaParametros(){
        this.bEstdo = true;
        if(!this.sHost.equals("")){
            this.pPrpddes.setProperty("mail."+this.sPrtclo+".host", this.sHost);
        }else{
            this.bEstdo = false;
        }
        this.pPrpddes.setProperty("mail."+this.sPrtclo+".starttls.enable", String.valueOf(this.bTls));
        if(this.bEstdo && this.iPrto >= 0){
            this.pPrpddes.setProperty("mail."+this.sPrtclo+".port", String.valueOf(this.iPrto));
        }else{
            this.bEstdo = false;
        }
        if(this.bEstdo && !this.sUsrio.equals("")){
            this.pPrpddes.setProperty("mail."+this.sPrtclo+".user", this.sUsrio);
        }else{
            this.bEstdo = false;
        }
        if(this.bEstdo && this.bAtntccion){
            this.pPrpddes.setProperty("mail."+this.sPrtclo+".auth", String.valueOf(this.bAtntccion));
        }
        this.sSssion = Session.getDefaultInstance(this.pPrpddes);
        this.sSssion.setDebug(this.bLog);
        return this.bEstdo;
    }
    /***
     * Metodo que se encarga de crear el cuerpo del mensaje
     * @param lsCntndo Lista con el contenido escrito del correo
     * @param lsArchvo Lista con el contenido adjunto del correo
     * @return boolean true == si la construccion del cuerpo fue exitosa; false == si la construccion del cuerpo fue fallida
     */
    private boolean fnbCuerpo(List <String> lsCntndo, List <File> lsArchvo){
        this.bEstdo = true;
        this.mmCrpo = new MimeMultipart();
        try {
            if(lsCntndo.size() > 0){
                this.bEstdo = fnbAgregaTexto(lsCntndo);
                this.mmCrpo.addBodyPart(this.bpTxto);
            }
            if(this.bEstdo && lsArchvo.size() > 0){
                this.bEstdo = fnbAgregaAdjunto(lsArchvo);
                this.mmCrpo.addBodyPart(this.bpAdjnto);
            }
        } catch (MessagingException ex) {
            this.sDscpcionError = ex.getMessage();
            System.out.println("\nEXCEPCION: "+this.sDscpcionError);
            this.oclPlno.fnExcepcion("EXCEPCION: "+this.sDscpcionError+" clCorreo:fnbCuerpo:1");
            this.bEstdo = false;
        }
        return this.bEstdo;
    }
    /***
     * Metodo que agrega el texto al cuerpo del correo
     * @param lsCntndo Lista que contiene el texto que va en el cuerpo del correo
     * @return boolean true == proceso de escritura exitoso; false == proceso de escritura fallido
     */
    private boolean fnbAgregaTexto(List <String> lsCntndo){
        this.bEstdo = true;
        this.iCont = 0;
        this.bpTxto = new MimeBodyPart();
        try {
            for(this.iCont = 0; this.iCont<lsCntndo.size(); this.iCont++){
                this.bpTxto.setText(lsCntndo.get(this.iCont));
            }
        } catch (MessagingException ex) {
            this.sDscpcionError = ex.getMessage();
            System.out.println("\nEXCEPCION: "+this.sDscpcionError);
            this.oclPlno.fnExcepcion("EXCEPCION: "+this.sDscpcionError+" clCorreo:fnbAgregaTexto:1");
            this.bEstdo = false;
        }
        return this.bEstdo;
    }
    /***
     * Metodo que adjunta archivos al cuerpo del correo
     * @param lsArchvo Lista que contiene los archivos que van a ir adjuntos en el correo
     * @return boolean true == proceso de adjuntar archivos exitoso; false == proceso de adjuntar archivos fallido
     */
    private boolean fnbAgregaAdjunto(List <File> lsArchvo){
        this.bEstdo = true;
        this.iCont = 0;
        this.dsArchvo = null;
        this.bpAdjnto = new MimeBodyPart();
        try {
            for(this.iCont = 0; this.iCont<lsArchvo.size(); this.iCont++){
                this.dsArchvo = new FileDataSource(lsArchvo.get(this.iCont).getAbsolutePath());
                this.bpAdjnto.setDataHandler(new DataHandler(this.dsArchvo));
                this.bpAdjnto.setFileName(lsArchvo.get(this.iCont).getName());
            }
        } catch (MessagingException ex) {
            this.sDscpcionError = ex.getMessage();
            System.out.println("\nEXCEPCION: "+this.sDscpcionError);
            this.oclPlno.fnExcepcion("EXCEPCION: "+this.sDscpcionError+" clCorreo:fnbAgregaAdjunto:1");
            this.bEstdo = false;
        }
        return this.bEstdo;
    }
}

No hay comentarios:

Publicar un comentario en la entrada