domingo, 8 de marzo de 2015

Enviar correo desde Java [JavaMail] con texto html y archivo adjunto

Bienvenidos a esta nueva entrada. En este caso, hablaré de un tema bastante útil y es enviar correos electrónicos a través de Java con texto en formato html y con un archivo adjunto.

Para lograrlo, nos apoyaremos de la librería JavaMail. Una vez descargada será necesario agregarla a su proyecto para poder utilizarla.

Sin más preámbulos adjunto el código fuente y lo comento para ver su funcionamiento:

Clase Mailer (contiene la función para mandar el correo):

package com.ea24.email;
package com.ea24.email;

import java.awt.HeadlessException;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
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;

/**
 *
 * @author ea24
 */
public class Mailer {
    Properties mailProps;

    public Mailer(Properties mailProps) {
        this.mailProps = mailProps;
    }

    public boolean sendMail(String user, String pass, String recipient) {
        try {
            Session session = Session.getDefaultInstance(mailProps, null);
            session.setDebug(true);
            //Se compone la parte del texto
            BodyPart text = new MimeBodyPart();
            text.setContent("\n"
                    + "

Comunicándose desde Java

\n" + "

Este email ha sido enviado desde java

\n" + "", "text/html"); // Se compone el archivo adjunto BodyPart attached = new MimeBodyPart(); attached.setDataHandler(new DataHandler(new FileDataSource("C:/archivo.doc"))); attached.setFileName("Archivo adjunto.doc"); // Una MultiParte para agrupar texto y adjunto. MimeMultipart multiPart = new MimeMultipart(); multiPart.addBodyPart(text); multiPart.addBodyPart(attached); // Se compone el correo, dando to, from, subject y el contenido. MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(user)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient)); message.setSubject("Correo desde JavaMail"); message.setContent(multiPart); // Se envia el correo. Transport transport = session.getTransport("smtp"); transport.connect(user, pass); transport.sendMessage(message, message.getAllRecipients()); transport.close(); } catch (HeadlessException e) { System.out.println(e.getMessage()); return false; } catch (MessagingException e) { System.out.println(e.getMessage()); return false; } return true; } }


La clase no es muy complicada, contiene sólo un atributo de tipo Properties mailProps y que es el contiene las propiedades para la conexión con el servidor de correo y un constructor que recibe como parámetro ese objeto de tipo Properties.

Luego está el único método sendMail que recibe tres parámetros user, pass y recipient donde: user: es el usuario de correo desde el que se mandará el mail pass: es la contraseña del correo desde el que se mandará el mail recipient: es el usuario de correo que recibirá el mail

De inicio se requiere un objeto de Session mismo que recibe el objeto Properties para su instanciación. El método setDebug le indicará a la sesión si debe debuggear y mostrar todo lo sucedido con ella.

Para este caso al contener texto y adjuntos se debe utilizar un BodyPart para el texto y otro para el adjunto. Para que el texto tenga formato html, se debe indicar en el método de la siguiente manera:
text.setContent("texto en formato html", "text/html");
Luego al bodyPart del adjunto, se le setea un dataHandler con el archivo a adjuntar.

Después se crea un objeto de tipo MimeMultipart para agregar todas las partes (texto y adjunto, pero puede haber más).

Hecho esto procedemos a crear la instancia de la clase MimeMessage para generar el mensaje completo seteando el usuario que envía, el que recibe, el asunto del mensaje y el contenido del mensaje.

Finalemente con un objeto de tipo Transport, se inicia sesión con el usuario y contraseña de quien envía, se envía el mensaje con el método sendMessage de la siguiente forma;
transport.sendMessage(message, message.getAllRecipients());
Ya sólo resta cerrar el transport.

Se capturan las excepciones necesarias y es todo para la clase.

Luego tenemos la clase de prueba:
package com.ea24.email;

import java.util.Properties;
import javax.swing.JOptionPane;

/**
 *
 * @author ea24
 */
public class Main {    
    public static void main(String[] args) {
        //las propiedades para la conexión
        Properties mailProps = new Properties();
        mailProps.setProperty("mail.transport.protocol", "smtp"); 
        mailProps.setProperty("mail.smtp.host", "smtp.gmail.com");
        mailProps.setProperty("mail.smtp.starttls.enable", "true");
        mailProps.setProperty("mail.smtp.port", "587");
        mailProps.setProperty("mail.smtp.auth", "true");
        
        Mailer mailer = new Mailer(mailProps);
        boolean wasSend = mailer.sendMail("user@gmail.com", "password", "destinatario@gmail.com");
        if(wasSend) {
            JOptionPane.showMessageDialog(null, "El correo se envió correctamente.");
        } else {
            JOptionPane.showMessageDialog(null, "No pudo enviarse el correo", "Error", JOptionPane.ERROR_MESSAGE);
        }
    }
}


Para la clase de prueba se crea el objeto de tipo properties y se llena con los valores adecuados según sea el servidor de correo.
Depués se crea una instancia de la clase Mailer pasándole el archivo de propiedades y se llama al método sendMail pasándole el usuario, contraseña y destinatario.
De acuerdo con lo que devuelva el método en la variable wasSend se determina si se envío o no el correo.

Eso es básicamente todo lo que hay que hacer para el envío de correos electrónicos con texto en html y con archivos adjuntos.

Ojalá sea de utilidad para muchos, si hay dudas ya saben.

Saludos!

lunes, 2 de marzo de 2015

Eliminar Searchult/Navegaki Chrome

Hoy por la mañana he tenido alrededor de dos horas muy frustrantes, esto debido a que un instalador web me instaló un buscador en el navegador (en realidad en todos los navegadores que uso) llamado Navegaki. Cabe decir que soy realmente cuidadoso con estas cosas que tanta lata dan, aún así caí, no puedo imaginar cuantas personas pasan por lo mismo. 

Este pequeño rufian es muy difícil de sacar (al menos a mi me lo pareció). Comencé por lo básico, cambiar laconfiguración de mi navegador. Al tratar de cambiar el buscador por defecto me llevé con la sorpresa de que se había autoasignado permisos de Administrador en el navegador, fue entonces cuando me dije "esto llevará tiempo". 

Traté de hacer mil cosas con los permisos en el navegador en vano. Busqué soluciones en foros sin encontrar algo que fuese útil (detesto 'desinstaladores', 'loggers' y demás tonterias). 

En un desesperado intento (ya muy frustrado), desinstalé y reinstalé Chrome y ya imaginarán, de nada sirvió. 

Después fui a la página de inicio de Navegaki donde proveen instrucciones para desinstalar que sirven para nada. Estuve incluso a punto de enviarles un correo con una serie de tonterias que decidí finalmente no enviar, el que quedaría como tonto luego de eso sería yo. 

Ya casi por rendirme intenté usar el editor de registro (Regedit) intentando borrar claves con el nombre Navegaki, luego mientras revisaba si funcionaba eliminar claves noté que en la URL antes de cargar que mostraba Searchult.. Esa fue la clave del éxito. Fui de nuevo a buscar claves en el editor de registro y borraba y borraba claves como loco, sin embargo, estas se 'regeneraban', hasta que encontre algo muy valioso, un path que llevava al desinstalador 

Sin mucho más que decir para deshacerse de esta terrible molestia hay que dirigirse a: 

C:/Users/USUARIO/AppData/Roaming/Searchult/
 
(Cambiar USUARIO por su usuario) 

Allí encontrarán un desinstalador [uninstal.exe] (no pongo capturas pues no tuve oportunidad de tomar una sola). El desinstalador dirá que ha tratado de hacer lo mejor posible y bla, bla, bla.. simplemente desinstala y palomea todas las opciones de todos los navegadores que muestra. 

Eso ha sido todo por hoy, en verdad espero que saque a varios de apuros.

Saludos!

domingo, 1 de marzo de 2015

Conversor Multimedia - Miksoft Mobile Media Converter

Qué tal! 


No es relevante mencionarlo pero me gustan mucho las utilerias, ya sean para PC o móviles. 

En esta ocasión les presento Miksoft - Mobile Media Converter, se trata de un conversor multimedia bastante gratuito y libre de publicidad o versiones pro.  

Desde sus inicios me convenció su facilidad de uso, soporte de múltiples formatos y opciones avanzadas aunque nada complejo sin dejar de mencionar claro que es un software multiplataforma. 

Para descargárselo hay que visitar su web: 
https://www.miksoft.net/mobileMediaConverterDown.php  

El aspecto del programa es un tanto minimalista: 
Conversor Multimedia - Mobile Media Converter

Como se puede apreciar, es posible arrastrar archivos al convertidor, aunque también está la opción de agregar archivos (+ File), la verdad es que resulta más cómodo y práctico arrastrar archivos :P 
converter

Una vez que el o los archivos se han cargado se mostrarán en la interfaz, dónde tendremos la opción de establecer el formato de salida 
convertidor

Para este ejemplo seleccionaré un formato de audio [mp3] (nótese que existe la oportunidad de agregar nuevos perfiles). Una vez seleccionado el perfil de salida bastará con pulsar el botón Convertir para terminar la tarea 
convertir video

Mientras se encuentra procesando la operación tendremos una pantalla como la siguiente 
convertir audio

Eso es básicamente todo para convertir de un formato a otro. 

Había mencionado opciones avanzadas? Pues sí, veamos brevemente de qué se trata. 

Antes de presionar Convertir, tenemos la oportunidad de cambiar los parámetros de nuestro archivo de salida. Para ello es necesario hacer clic en la diminuta flecha al costado inferior izquierdo de la interfaz 
convertir mp3

Hecho esto se desplegara un pequeño panel que muestra nuevas opciones, tenemos en primera instancia la calidad; Baja, Media y Alta 
miksoft

Y Personalizada? Bien, para ello hay que hacer clic en Avanzado donde tendremos una nueva ventana como la siguiente 
mobile media converter

Aquí es necesario ponernos más técnicos pues se trata de opciones de tasa de transferencia de bits, frecuencia, canales de audio, fotogramas y codecs.. Creo que basta mencionar que 192kbs de audio, 44khz y 2 canales (recordar que se trata sólo de audio en este ejemplo) son bastante buenos parámetros de salida. 

Pues bien esta es la entrada de hoy y ya saben si hay dudas pueden externarlas ;)

Saludos!

AirDroid control remoto para tu Android

Por falta de tiempo no he podido publicar como quisiera, sin embargo hoy he decidido aprovechar un rato libre y platicarles un poco sobre AirDroid. 

AirDroid se trata de una aplicación como el título y el propio nombre de la app sugieren para dispositivos Android, bastante útil si eres de los que como yo se la pasa adherido a la PC gran parte del día. 

Básicamente funciona creando un servidor web en tu dispositivo que es accesible para otros dispositivos que se encuentran en la misma red (WiFi). Una vez que lo has descargado e instalado (AirDroid - Google Play) para acceder es necesario primero abrir AirDroid en el móvil, donde mostrará una pantalla similar a la siguiente (varia según versión): 

AirDroid control sobre tu Android 


En esa captura se puede ver la URL que deberán escribir en su navegador, http://192.168.1.76:8888 en este caso: 

airdroid 


Luego se mostrará una leyenda como la siguiente en su navegador indicando que deben aceptar la petición en su dispositivo Android: 

celular


Es entonces cuando deberán aceptar en su Android: 

android 


Hecho esto, deberían ver en su navegador algo como esto: 

control


Ya estás conectado! 

En mi caso, utilizo AirDroid principalmente para transferir archivos, esto resulta bastante útil si no traes contigo un cable de datos o como yo eres tan perezoso que prefieres la vía fácil siempre   


Para la transferencia de archivos, es necesario en la pantalla hacer clic en el icono Files y dirigirse a la ruta deseada: 


wifi


Ahí bastará con arrastar archivos a la ventana para subirlos a nuestro Android o hacer clic en el botón Upload. 

Y, cómo descargo cosas del móvil a mi PC? Buena pregunta.  

Estando en la carpeta deseada, simplemente hay que seleccionar el archivo (se puede hacer selección multiple) y hacer clic derecho y seleccionar Descargar o ir al botón que dice descargar: 

encontrar


Como podrán notar es muy simple de usar. 
Desventajas? Únicamente le veo 2, la baja tasa de transferencia (considerar que se trata de transferencia de archivos en red) y el problema que representa cuando no se tiene el móvil conectado a la misma red que la PC (quizá por falta de la contraseña). 

En cualquier caso, siempre hay alternativas. Podemos registrarnos en la web de AirDroid y de esa manera podemos transferir archivos aunque el dispositivo no se encuentre en la misma red, pero cuidado! si el dispositivo está haciendo uso de la red móvil ya saben el gasto que les representará, será conveniente utilizarlo con red WiFi y mucha precaución. 

Finalmente, una de mis opciones favoritas es la de localizar el móvil. Para ello sí es necesario contar con una cuenta en AirDroid y acceder al portal y la cuenta: 

buscar celular


Una vez que se ha iniciado basta con hacer clic en el icono Find Phone, y AirDroid hará el resto. La verdad es que asombra la presición alcanzada! 
  
Sobra mencionar que es requerido tener el GPS activado, pero lo menciono igual. 

De momento es todo, ojalá les resulte tan útil como a mi, si hay dudas sólo mencionenlas  
Saludos!

sábado, 14 de febrero de 2015

Validación de JTextField en Java

Aquí está mi segunda entrada...

Resulta que soy ingeniero en sistemas y me encanta la programación. Recientemente tuve la necesidad de validar unos campos de texto en Java (JTextField) y muy a pesar de que es común que lleve tareas de ese tipo a cabo, casi siempre termino por confundir las funciones o se me olvidan.

El fin de este post es compartir un poco de lo que he ido aprendiendo, estoy seguro de que a más de uno le será de utilidad.

Pues bien, para este tutorial utilizaré NetBeans como IDE y para comenzar mostraré cómo quedó el formulario:

Los campos se nombraron de la siguiente manera respectivamente:

- txtTexto
- txtNumeros
- txtSinEspacios
- txt5Caracteres

y como sus nombres indican el primero de ellos sólo aceptará letras, el segundo sólo números, el tercero no aceptará espacios,  y el último estará limitado a un máximo de 5 caracteres.

Para este caso se debe utilizar el listener KeyTyped. Cuando se pulsa una tacla ésta es mandada al sistema operativo, luego mediante este escuchador se accede a tal código para poder procesarlo en nuestro programa, esto a diferencia de KeyPressed y KeyReleased que sirven únicamente para escuchar cuando una tecla se pulsa o se suelta. (Al menos así lo entiendo, si no es así favor de corregirme :P ).

Una vez aclarado esto, hay que asignarle a cada campo su escuchador, para ello hay que seguir los pasos siguientes:



Clic derecho en el campo>Eventos>Key>KeyTyped

Eso nos llevará al método de escucha donde se colocaran las instrucciones siguientes:

Para txtTexto:
if(!Character.isLetter(evt.getKeyChar()))
            evt.consume();

Para txtNumeros:
if(!Character.isDigit(evt.getKeyChar()))
            evt.consume();

Para txtSinEspacios:
if(Character.isWhitespace(evt.getKeyChar()))
            evt.consume();

Para txt5Caracteres:
if(txt5Caracteres.getText().length() > 4)
            evt.consume();


De esto cabe destacar que se utiliza la clase Character para acceder a sus métodos como isDigit(), isWhiteSpace() o isLetter() mismos que evaluan un char y devuelven un valor boleano en función de si se trata de una letra, número o espacio (existen más métodos). Otra cosa en común que seguro se hace notar es el método consume(), que se encarga de consumir el evento generado para así evitar que se procese de manera 'normal' en el flujo del programa.

En realidad el código es muy simple y es evidente que se pueden hacer operaciones tan complejas y útiles como se requieran.

Si hay alguna duda podemos revisarla.

Finalmente dejo el enlace del código del proyecto.

Proyecto NetBeans [Mega]

Espero sea útil, saludos!

jueves, 12 de febrero de 2015

Colección La torre oscura - Stephen King [ePub]

Esta es mi primera entrada, en esta ocasión compartiré una fantástica colección de libros.

Esto se debe a que ayer pasé gran parte de la noche en busca de La torre oscura de Stephen King sin éxito alguno, luego hoy por la mañana en diferentes sitios encontraba alguno que otro libro, y al finalizar de recopilarlos fue que me decidí por hacer esta publicación.

Me gusta el formato ePub por sus beneficios para el lector, pues otorga la posibilidad de ajustar la lectura al gusto principalmente el tamaño de letra y color de fondo, además de que el lector electrónico de ePub abre la lectura en el último punto dejada, organiza la biblioteca, muestra estadísticas entre otras cosas, adicional a ello, cualquier persona con un smartphone puede instalarse un lector de ePubs.


Para quienes conocen a Stephen King pero no a esta obra les dejo una pequeña descripción sacada de Wikipedia:
La Torre Oscura es una serie de libros escrita por el autor estadounidense Stephen King, que incorpora temas de múltiples géneros, incluyendo fantasía, fantasía científica, terror y western. Describe a un "pistolero" y su búsqueda de una torre, cuya naturaleza es tanto física como metafórica. King ha descrito la serie como su magnum opus (obra maestra). Además de las ocho novelas que componen la serie propiamente dicha (las cuales suman un total de 4.250 páginas), muchos de sus otros libros se relacionan con la historia, introduciendo conceptos y personajes que entran en escena a medida que la serie se desarrolla. Una vez que la serie fuera terminada, una serie de cómics precuela le siguió.
Pues bien, sin más preámbulos lo prometido, esta colección se compone de los siguientes libros:

  • La torre oscura 01 - La hierba del diablo
  • La torre oscura 02 - La invocacion 
  • La torre oscura 03 - Las tierras baldias 
  • La torre oscura 04 - La bola de cristal 
  • La torre oscura 05 - Lobos del Calla 
  • La torre oscura 06 - Cancion de Susannah 
  • La torre oscura 07 - La torre oscura (parte 1)
  • La torre oscura 07 - La torre oscura (parte 2)
  • La torre oscura 07 - La torre oscura (parte 3)
  • La torre oscura 07 - La torre oscura (parte 4)
  • La torre oscura 07 - La torre oscura (parte 5)


Los archivos están comprimidos con WinRar y no tienen contraseña. Dejo a continuación los enlaces:

Dropbox

Mediafire

Mega

En lo personal para leer uso y recomiendo Aldiko como lector de libros electrónicos. Más adelante haré una entrada sobre este lector.

Finalmente espero disfruten de esta magnifica obra de Stephen King, saludos.