jump to navigation

Documentar el codigo JavaScript febrero 14, 2007

Posted by superpiwi in Javascript.
4 comments

Si necesitas documentar el codigo JavaScript puedes emplear JSDoc.

http://jsdoc.sourceforge.net/

Es una herramienta muy sencilla (eso si, necesitas tener un interprete de perl instalado en la maquina). Para documentar la sintaxis es:

perl jsdoc.pl <tufichero.js>

Ejemplo para el fichero «util.js» con este contenido:


/**
* @fileoverview Libreria con funciones de utilidad
*
* @author jose
* @version 0.1
*/
/**
* Muestra un mensaje de texto
* @param {String} metodo nombre del metodo
* @param {String} mensaje mensaje a mostrar
* @returns {integer} el codigo de retorno 0
*/
function trazas(metodo,mensaje)
{
alert("["+metodo+"]:"+mensaje);
return 0;
}
//--------

Al ejecutar:

perl jsdoc.pl util.js

se generan una serie de ficheros HTML en el directorio con la documentacion de la libreria javascript. El resultado es muy vistoso:

jsdoc.jpg

Enviar un correo HTML con Java febrero 14, 2007

Posted by superpiwi in Java.
53 comments

He escrito una clase para enviar correo mediante HTML. Lo primero, necesitas descargar la libreria de Java Mail API y la de Java Beans Activation Framework.

http://java.sun.com/products/javamail/
http://java.sun.com/products/javabeans/jaf/index.jsp

Usar la clase es muy sencillo. Un ejemplo para enviar un correo html y un par de ficheros atachados:


String contenidoHTML = HTMLMail.loadHTMLFile("/home/jose/articulo.html");
// propiedades de conexion al servidor de correo
HTMLMail mail = new HTMLMail("aqui_tu_server_correo","tu_user","tu_password");
mail.setFrom("javalangnullpointer");
mail.setSubject("NOTICIAS JAVALANGNULLPOINTER");
mail.setTo("aqui_aquien_envias@gmail.com");
// fijar el contenido
mail.addContent(contenidoHTML);
// CID de una imagen
mail.addCID("cidimage01", "/home/jose/firma.gif");
// enviar atachados un par de ficheros
mail.addAttach("/home/jose/image.gif");
//mail.addAttach("/home/jose/bison_1_0.zip");
// enviar el correo MULTIPART
mail.sendMultipart();

Y ya está. sencillo, verdad???

Te comento que es el CID de una imagen. Cuando quieres incrustar una imagen en el HTML debes poner algo de la forma:


<img src="CID:cid_de_la_imagen />

Donde cid_de_la_imagen es un nombre aleatoria que le das para identificarla. Esto en el correo tambien se referencia con el metodo addCID que lo que hace es embeber en el cuerpo del mensaje el contenido de la imagen asociandole ese cid o nombre que le hayas dado. Cuando el browser abra ese mensaje mostrara correctamente la imagen atachada. En el ejemplo el HTML contiene una imagen con cid igual a cidimage01 y por eso en el mensaje asociamos el fichero grafico con ese nombre.


<img src="CID:cidimage01" />

Lo interesante. Aqui el contenido de la clase:


/**
*
* HTMLMail.java
*
* clase para enviar correos HTML.
*
* @author jdelgado
* @revision 0.0.0.1 13 febrero 2007
* @since Eclipse 3.2 JDK 1.5
*
* TODO: enviar .css mediante CID, actualmente solo funciona si va incrustado en la pagina con <style></style>
*
*/
package comun.util.mail;
import java.io.*;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Part;
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;
public class HTMLMail {
/**
* Algunas constantes
*/
static public int SIMPLE = 0;
static public int MULTIPART = 1;
/**
* Algunos mensajes de error
*/
public static String ERROR_01_LOADFILE = "Error al cargar el fichero";
public static String ERROR_02_SENDMAIL = "Error al enviar el mail";
/**
* Variables
*/
private Properties props = new Properties();
private String host,protocol,user,password;
private String from,content,to;
private String subject="";
/**
* MultiPart para crear mensajes compuestos
*/
MimeMultipart multipart = new MimeMultipart("related");
// -----
/**
* Constructor
* @param host nombre del servidor de correo
* @param user usuario de correo
* @param password password del usuario
*/
public HTMLMail(String host,String user,String password)
{
props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", host);
props.setProperty("mail.user", user);
props.setProperty("mail.password", password);
}
//-----
/**
* Muestra un mensaje de trazas
*
* @param metodo
* nombre del metodo
* @param mensaje
* mensaje a mostrar
*/
static public void trazas(String metodo, String mensaje) {
// TODO: reemplazar para usar Log4J
System.out.println("[" + HTMLMail.class.getName() + "][" + metodo
+ "]:[" + mensaje + "]");
}
// -----
/**
* Carga el contenido de un fichero de texto HTML en un String
*
* @param pathname
* ruta del fichero
* @return un String con el contenido del fichero
* @throws Exception
* Excepcion levantada en caso de error
*/
static public String loadHTMLFile(String pathname) throws Exception
{
String content = "";
File f = null;
BufferedReader in = null;
try
{
f = new File(pathname);
if (f.exists())
{
long len_bytes = f.length();
trazas("loadHTMLFile", "pathname:" + pathname + ", len:"+ len_bytes);
}
in = new BufferedReader(new FileReader(f));
String str;
while ((str = in.readLine()) != null) {
// process(str);
str = str.trim();
content = content + str;
}
in.close();
return content;
}
catch (Exception e)
{
String MENSAJE_ERROR = ERROR_01_LOADFILE + ": ['" + pathname + "'] : " + e.toString();
throw new Exception(MENSAJE_ERROR);
}
finally
{
if (in != null) in.close();
}
}
// ----
/**
* Para probar el correcto funcionamiento de la clase
*
* @param args
* argumentos de entrada
* @throws Exception
* excepcion levantada en caso de error
*/
public static void main(String[] args) throws Exception {
try {
// cargar en un string el template del HTML que se va a enviar
String contenidoHTML = HTMLMail.loadHTMLFile("/home/jose/articulo.html");
System.out.println("contenido HTML:" + contenidoHTML);
// propiedades de conexion al servidor de correo
HTMLMail mail = new HTMLMail("correo","jose","jose");
mail.setFrom("javalangnullpointer");
mail.setSubject("NOTICIAS JAVALANGNULLPOINTER");
mail.setTo("jhon.doe@gmail.com");
// fijar el contenido
//contenidoHTML=contenidoHTML+"<br/>Saludos, JOSE<br/><img src='cidimage01'>";
mail.addContent(contenidoHTML);
// CID de una imagen
mail.addCID("cidimage01", "/home/jose/firma.gif");
// enviar atachados un par de ficheros
mail.addAttach("/home/jose/image.gif");
//mail.addAttach("/home/jose/bison_1_0.zip");
// enviar el correo MULTIPART
mail.sendMultipart();
// para un correo SIMPLE seria:
// mail.setContent(contenidoHTML);
// mail.send();
System.out.println("[ Mail enviado ]");
} catch (Exception e) {
e.printStackTrace();
}
}
// ------
/**
* Añade el contenido base al multipart
* @throws Exception Excepcion levantada en caso de error
*/
public void addContentToMultipart() throws Exception
{
// first part (the html)
BodyPart messageBodyPart = new MimeBodyPart();
String htmlText = this.getContent();
messageBodyPart.setContent(htmlText, "text/html");
// add it
this.multipart.addBodyPart(messageBodyPart);
}
// -----
/**
* Añade el contenido base al multipart
* @param htmlText contenido html que se muestra en el mensaje de correo
* @throws Exception Excepcion levantada en caso de error
*/
public void addContent(String htmlText) throws Exception
{
// first part (the html)
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(htmlText, "text/html");
// add it
this.multipart.addBodyPart(messageBodyPart);
}
// -----
/**
* Añade al mensaje un cid:name utilizado para guardar las imagenes referenciadas en el HTML de la forma <img src=cid:name />
* @param cidname identificador que se le da a la imagen. suele ser un string generado aleatoriamente.
* @param pathname ruta del fichero que almacena la imagen
* @throws Exception excepcion levantada en caso de error
*/
public void addCID(String cidname,String pathname) throws Exception
{
DataSource fds = new FileDataSource(pathname);
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setDataHandler(new DataHandler(fds));
messageBodyPart.setHeader("Content-ID","<"+cidname+">");
this.multipart.addBodyPart(messageBodyPart);
}
// ----
/**
* Añade un attachement al mensaje de email
* @param pathname ruta del fichero
* @throws Exception excepcion levantada en caso de error
*/
public void addAttach(String pathname) throws Exception
{
File file = new File(pathname);
BodyPart messageBodyPart = new MimeBodyPart();
DataSource ds = new FileDataSource(file);
messageBodyPart.setDataHandler(new DataHandler(ds));
messageBodyPart.setFileName(file.getName());
messageBodyPart.setDisposition(Part.ATTACHMENT);
this.multipart.addBodyPart(messageBodyPart);
}
// ----
/**
* Envia un correo multipart
* @throws Exception Excepcion levantada en caso de error
*/
public void sendMultipart() throws Exception
{
Session mailSession = Session.getDefaultInstance(this.props, null);
mailSession.setDebug(true);
Transport transport = mailSession.getTransport();
MimeMessage message = new MimeMessage(mailSession);
message.setSubject(this.getSubject());
message.setFrom(new InternetAddress(this.getFrom()));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(this.getTo()));
// put everything together
message.setContent(multipart);
transport.connect();
transport.sendMessage(message,
message.getRecipients(Message.RecipientType.TO));
transport.close();
}
// -----
/**
* Envia un correo simple
* @throws Exception Excepcion levantada en caso de error
*/
public void send() throws Exception
{
try
{
Session mailSession = Session.getDefaultInstance(this.props, null);
mailSession.setDebug(true);
Transport transport = mailSession.getTransport();
MimeMessage message = new MimeMessage(mailSession);
message.setSubject(this.getSubject());
message.setFrom(new InternetAddress(this.getFrom()));
message.setContent(this.getContent(), "text/html");
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(this.getTo()));
transport.connect();
transport.sendMessage(message,
message.getRecipients(Message.RecipientType.TO));
transport.close();
}
catch(Exception e)
{
String MENSAJE_ERROR = ERROR_02_SENDMAIL+" : " + e.toString();
throw new Exception(MENSAJE_ERROR);
}
}
//-----
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
}
// end of class HTMLMail

Y aqui el contenido del fichero HTML que enviamos:

<HEAD>
<STYLE>
P {color:red;}
</STYLE>
</HEAD>
<BODY>
Esta es una prueba de <b>envio de correo HTML</b> mediante Java.
Emplea una clase implementada por mi y con ella esto es tan sencillo como escribir este código:
<br/>
<br/>
<P>
<font color='green'>// propiedades de conexion al servidor de correo</font><br/>
HTMLMail mail = new HTMLMail("correo","user","password");<br/>
mail.setFrom("javalangnullpointer");<br/>
mail.setSubject("NOTICIAS DE JAVALANGNULLPOINTER");<br/>
mail.setTo("aqui_tu_correo@correo.es");<br/>
<br/>
<font color='green'>// fijar el contenido</font><br/>
String contenidoHTML = HTMLMail.loadHTMLFile("/home/jose/articulo.html");<br/>
mail.addContent(contenidoHTML);<br/>
<br/>
<font color='green'>// enviar CID de una imagen</font><br/>
mail.addCID("cidimage01", "/home/jose/firma.gif");<br/>
<br/>
<font color='green'>// enviar atachados un par de ficheros</font><br/>
mail.addAttach("/home/jose/image.gif");<br/>
mail.addAttach("/home/jose/bison_1_0.zip");<br/>
<br/>
<font color='green'>// enviar el correo MULTIPART</font><br/>
mail.sendMultipart();<br/>
</P>
El resultado es el que estais viendo. Si os interesa el tema o quereis ver mas tutoriales. Conectate a...
<br/>
<br/>
<a href="https://javalangnullpointer.wordpress.com">javalangnullpointer.wordpress.com</a>
<br/>
<br/>
Saludos,
<br>
<img src='cid:cidimage01' />
</BODY>
</HTML>

El resultado al visualizarlo con el navegador, seria similar a este:

enviarcorreo01.jpg