maia/registro/.svn/pristine/55/55d1cc5c6af98801f30fcb5e2ec...

116 lines
4.4 KiB
Plaintext
Executable File

package com.fp.general.mail.impl;
import java.util.Map;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import com.fp.general.mail.EnvioMail;
import com.fp.general.mail.dto.EnvioCorreoDTO;
import com.fp.general.mail.exception.EnvioMailException;
import com.fp.general.mail.logger.EnvioMailLogger;
import com.fp.general.mail.resources.MailMessages;
/**
* Esta clase implementa {@link EnvioMail} y que determina el envío por default de correos
*
* @author dcruz
*
*/
public abstract class EnvioMailBaseImpl implements EnvioMail, EnvioMailLogger{
@Override
public void envioMail(EnvioCorreoDTO correo) throws EnvioMailException{
log.info("Ingreso a envio mail");
try {
long tiempoInicial = System.currentTimeMillis();
MimeMessage message = new MimeMessage(this.getEnvioMailSession());
message.setSubject(correo.getAsunto());
message.setFrom(new InternetAddress(correo.getCorreoDesde()));
message.addRecipients(Message.RecipientType.TO, obtenerDireccionesCorreo(correo.getCorreoPara()));
if(correo.getCorreoCC() != null && correo.getCorreoCC().length > 0){
message.addRecipients(MimeMessage.RecipientType.CC, obtenerDireccionesCorreo(correo.getCorreoCC()));
}
if(correo.getCorreoCCO() != null && correo.getCorreoCCO().length > 0){
message.addRecipients(MimeMessage.RecipientType.BCC, obtenerDireccionesCorreo(correo.getCorreoCCO()));
}
message.setContent(obtenerDetallesCorreo(correo));
Transport.send(message);
long tiempoFinal = System.currentTimeMillis();
log.info("Tiempo de envio mail: {}ms", tiempoFinal-tiempoInicial);
} catch (AddressException e) {
log.info(e.getMessage(), e);
throw new EnvioMailException(MailMessages.getInstancia().getString("mensajeria.mensaje.error.direccion.incorrecta"), e);
} catch (MessagingException e) {
log.info(e.getMessage(), e);
throw new EnvioMailException(MailMessages.getInstancia().getString("mensajeria.mensaje.error.mensaje.creacion"), e);
} catch (Throwable e) {
log.info(e.getMessage(), e);
throw new EnvioMailException(MailMessages.getInstancia().getString("mensajeria.mensaje.error.mensaje.creacion"), e);
}
}
/**
* A partir de un arreglo de correos los devuelve transformados en un arreglo de {@link InternetAddress}
* @param direcciones
* @return
* @throws AddressException
*/
private InternetAddress[] obtenerDireccionesCorreo(String[] direcciones) throws AddressException{
InternetAddress[] direccionesCorreo = new InternetAddress[direcciones.length];
int i = 0;
for (String direccionCorreo : direcciones) {
direccionesCorreo[i] = new InternetAddress(direccionCorreo);
i++;
}
return direccionesCorreo;
}
/**
* Este método agrega los detalles faltantes al correo como son adjuntos, imágenes y mensaje del correo en html
* @throws MessagingException
* @return
*/
private Multipart obtenerDetallesCorreo(EnvioCorreoDTO correo) throws MessagingException{
Multipart multipart = new MimeMultipart();
MimeBodyPart contenidoHTML = new MimeBodyPart();
contenidoHTML.setContent(correo.getMensajeHTML(), MailMessages.getInstancia().getString("mensajeria.tipo.contenido.html"));
multipart.addBodyPart(contenidoHTML);
if(correo.getAdjuntos() != null && !correo.getAdjuntos().isEmpty()){
for (Map.Entry<String, byte[]> entradaAdjunto : correo.getAdjuntos().entrySet()) {
MimeBodyPart adjuntoCorreo = new MimeBodyPart();
adjuntoCorreo.setFileName(entradaAdjunto.getKey());
adjuntoCorreo.setContent(entradaAdjunto.getValue(), MailMessages.getInstancia().getString("mensajeria.tipo.contenido.general"));
multipart.addBodyPart(adjuntoCorreo);
}
}
return multipart;
}
@Override
public void registraLogError(EnvioCorreoDTO envioCorreo){
if(envioCorreo != null){
log.error("Error al enviar el mail");
log.error("Datos de mail fallido");
log.error("-------------------");
log.error("Envio desde: {}", envioCorreo.getCorreoDesde());
log.error("Envio para: {}", envioCorreo.getCorreoPara());
log.error("Envio cc: {}", envioCorreo.getCorreoCC());
log.error("Envio cco: {}", envioCorreo.getCorreoCCO());
log.error("Asunto correo: {}", envioCorreo.getAsunto());
log.error("-------------------");
}
}
}