maia/.svn/pristine/bd/bde7b6029110f38916128062829...

490 lines
13 KiB
Plaintext
Executable File

/*
*
*/
package com.fp.mail;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
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 javax.mail.util.ByteArrayDataSource;
import com.fp.common.logger.APPLogger;
import com.fp.common.properties.PropertiesHandler;
// TODO: Auto-generated Javadoc
/**
* Class Mail encargada del envío de correos.
*
* @author gfiallos
*/
public class Mail {
/**
* Class SMTPAuthenticator encargada de establecer los parametros de autenticación con el Servidor de Correo.
*
* @author gfiallos
*/
private class SMTPAuthenticator extends Authenticator {
/**
* Obtiene el valor de password authentication.
*
* @return Valor de password authentication
*/
@Override
public PasswordAuthentication getPasswordAuthentication() {
try {
PropertiesHandler ph = new PropertiesHandler("mail");
String username = ph.getStringValue("mail.smtp.user");
String password1 = ph.getStringValue("mail.smtp.password");
return new PasswordAuthentication(username, password1);
} catch (Exception e) {
APPLogger.getLogger().error(e);
}
return null;
}
}
/** El valor de bcc. */
private String bcc;
/** El valor de cc. */
private String cc;
/** El valor de cont. */
private String cont = null;
/** El valor de from. */
private String from;
/** El valor de mailer. */
private String mailer = "";
/** El valor de port. */
private int port;
/** El valor de user. */
private String user;
/** El valor de password. */
private String password;
/** El valor de auth. */
private boolean auth;
/** El valor de mail data. */
private MimeMultipart mailData;
/** El valor de mailhost. */
private String mailhost = null;
/** El valor de subject. */
private String subject = null;
/** El valor de to. */
private String to = null;
/** El valor de smtps. */
private boolean smtps;
/** El valor de content message type. */
private String contentMessageType = "text/html";
/**
* Crea una nueva instancia de mail.
*
* @param pSubject the subject
* @param pMessage the message
* @param pTo the to
* @throws Exception la exception
*/
public Mail(String pSubject, String pMessage, String pTo) throws Exception {
this(pSubject, pMessage, pTo, null, null, true);
}
/**
* Crea una nueva instancia de mail.
*
* @param pSubject the subject
* @param pMessage the message
* @param pTo the to
* @param pCopy the copy
* @throws Exception la exception
*/
public Mail(String pSubject, String pMessage, String pTo, String pCopy) throws Exception {
this(pSubject, pMessage, pTo, pCopy, null, true);
}
/**
* Crea una nueva instancia de mail.
*
* @param pSubject the subject
* @param pMessage the message
* @param pTo the to
* @param pCopy the copy
* @param pBcc the bcc
* @param pInit the init
* @throws Exception la exception
*/
public Mail(String pSubject, String pMessage, String pTo, String pCopy, String pBcc, boolean pInit) throws Exception {
if (pInit) {
this.init();
}
this.to = pTo;
this.subject = pSubject;
this.cc = pCopy;
this.bcc = pBcc;
this.cont = pMessage;
if (this.cont != null) {
this.manageContent();
}
}
/**
* Permite poner una plantilla de descripcion al mail
* @param pMessage
* @throws Exception
*/
public void setCuerpoMail(String pMessage) throws Exception {
this.cont = pMessage;
if (this.cont != null) {
this.manageContent();
}
}
/**
* Método que implementa la construcción del contenido del mail.
*
* @throws Exception la exception
*/
private void manageContent() throws Exception {
BodyPart content = new MimeBodyPart();
ByteArrayDataSource bad = new ByteArrayDataSource(this.cont.getBytes(), this.contentMessageType);
DataHandler dh = new DataHandler(bad);
content.setDataHandler(dh);
this.mailData = new MimeMultipart();
this.mailData.addBodyPart(content);
}
/**
* Entrega el valor de contentMessageType.
*
* @return Valor de contentMessageType
*/
public String getContentMessageType() {
return this.contentMessageType;
}
/**
* Fija un nuevo valor en contentMessageType.
*
* @param pContentMessageType nuevo valor para contentMessageType
*/
public void setContentMessageType(String pContentMessageType) {
this.contentMessageType = pContentMessageType;
}
/**
* Inicia los datos básicos para el envío del Correo.
*
* @throws Exception la exception
*/
protected void init() throws Exception {
PropertiesHandler ph = new PropertiesHandler("mail");
this.from = ph.getValue("mail.from");
this.mailhost = ph.getValue("mail.smtp.server");
this.port = ph.getIntValue("mail.smtp.port");
this.user = ph.getStringValue("mail.smtp.user");
this.password = ph.getStringValue("mail.smtp.password");
this.auth = ph.getBooleanValue("mail.smtp.auth");
this.smtps = ph.getBooleanValue("mail.smtps");
}
/**
* Configura el envío de Correos.
*
* @param pFrom Remitente
* @param pMailhost Servidor SMTP
* @param pPort Puerto SMTP
* @param pUser Usuario de ingreso al servidor SMTP
* @param pPassword Password de ingreso al servidor SMTP
* @param pAuth Indicador si se requiere autenticación con el Servidor
* @param pSMTPS Indicador si el servidor maneja protocolo seguro
* @throws Exception la exception
*/
public void config(String pFrom, String pMailhost, int pPort, String pUser, String pPassword, boolean pAuth, boolean pSMTPS) throws Exception {
this.from = pFrom;
this.mailhost = pMailhost;
this.port = pPort;
this.user = pUser;
this.password = pPassword;
this.auth = pAuth;
this.smtps = pSMTPS;
}
/**
* Adiciona un attachment.
*
* @param pName the name
* @param pPath the path
* @throws Exception la exception
*/
public void addAttachment(String pName, String pPath) throws Exception {
try{
BodyPart attach = new MimeBodyPart();
attach.setDataHandler(new DataHandler(new FileDataSource(pPath)));
attach.setFileName(pName);
if(mailData==null){
this.mailData = new MimeMultipart();
}
this.mailData.addBodyPart(attach);
}catch(Exception err){
APPLogger.getLogger().error(err);
}
}
/**
* Adiciona un attachment.
*
* @param pName the name
* @param bytesAttachment the bytes attachment
* @param contentType the content type
* @throws Exception la exception
*/
public void addAttachment(String pName, byte[] bytesAttachment, String contentType) throws Exception {
try{
BodyPart attach = new MimeBodyPart();
ByteArrayDataSource bad = new ByteArrayDataSource(bytesAttachment, contentType);
DataHandler dh = new DataHandler(bad);
attach.setDataHandler(dh);
attach.setFileName(pName);
if(mailData==null){
this.mailData = new MimeMultipart();
}
this.mailData.addBodyPart(attach);
}catch(Exception err){
APPLogger.getLogger().error(err);
}
}
/**
* Envía el Correo.
*
* @throws Exception la exception
*/
public void send() throws Exception {
if (this.mailData == null) {
this.manageContent();
}
Properties props = System.getProperties();
props.put("mail.smtp.localhost", "mail.google.com");
if (this.mailhost != null) {
props.put("mail.smtp.host", this.mailhost);
props.setProperty("mail.smtp.port", "" + this.port);
if (this.smtps) {
props.put("mail.smtp.ssl", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
}
props.setProperty("mail.smtp.auth", "" + this.auth);
}
Session session = null;
if (this.smtps) {
@SuppressWarnings("synthetic-access")
Authenticator auth1 = new SMTPAuthenticator();
session = Session.getDefaultInstance(props, auth1);
} else {
session = Session.getDefaultInstance(props, null);
}
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(this.from));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(this.to, false));
if (this.cc != null) {
msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(this.cc, false));
}
if (this.bcc != null) {
msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(this.bcc, false));
}
msg.setSubject(this.subject);
msg.setContent(this.mailData);
msg.setHeader("X-Mailer", this.mailer);
msg.setSentDate(new Date());
Transport t = null;
if (this.smtps || !this.auth) {
Transport.send(msg);
}
else {
t = session.getTransport("smtp");
t.connect(this.mailhost, this.port, this.user, this.password);
t.sendMessage(msg, msg.getAllRecipients());
t.close();
}
}
/**
* Entrega el valor de bcc.
*
* @return Valor de bcc
*/
public String getBcc() {
return this.bcc;
}
/**
* Fija un nuevo valor en bcc.
*
* @param pBcc nuevo valor para bcc
*/
public void setBcc(String pBcc) {
this.bcc = pBcc;
}
/**
* Entrega el valor de cc.
*
* @return Valor de cc
*/
public String getCc() {
return this.cc;
}
/**
* Fija un nuevo valor en cc.
*
* @param pCc nuevo valor para cc
*/
public void setCc(String pCc) {
this.cc = pCc;
}
/**
* Entrega el valor de cont.
*
* @return Valor de cont
*/
public String getCont() {
return this.cont;
}
/**
* Fija un nuevo valor en cont.
*
* @param pCont nuevo valor para cont
*/
public void setCont(String pCont) {
this.cont = pCont;
}
/**
* Entrega el valor de from.
*
* @return Valor de from
*/
public String getFrom() {
return this.from;
}
/**
* Fija un nuevo valor en from.
*
* @param pFrom nuevo valor para from
*/
public void setFrom(String pFrom) {
this.from = pFrom;
}
/**
* Entrega el valor de mailer.
*
* @return Valor de mailer
*/
public String getMailer() {
return this.mailer;
}
/**
* Fija un nuevo valor en mailer.
*
* @param pMailer nuevo valor para mailer
*/
public void setMailer(String pMailer) {
this.mailer = pMailer;
}
/**
* Entrega el valor de subject.
*
* @return Valor de subject
*/
public String getSubject() {
return this.subject;
}
/**
* Fija un nuevo valor en subject.
*
* @param pSubject nuevo valor para subject
*/
public void setSubject(String pSubject) {
this.subject = pSubject;
}
/**
* Entrega el valor de to.
*
* @return Valor de to
*/
public String getTo() {
return this.to;
}
/**
* Fija un nuevo valor en to.
*
* @param pTo nuevo valor para to
*/
public void setTo(String pTo) {
this.to = pTo;
}
public Mail() {
}
public static void main(String[] args) {
try {
Mail m = new Mail();
m.config("notificacion@sbs.gob.ec", "5.9.144.187", 26, null, null, false, false);
m.setTo("pruebas@sbs.gob.ec");
m.setSubject("Prueba mail maia");
m.setCont("texto de prueba de correo");
m.send();
} catch (Exception e) {
APPLogger.getLogger().error(e);
}
}
}