116 lines
4.4 KiB
Plaintext
Executable File
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("-------------------");
|
|
}
|
|
}
|
|
|
|
}
|