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!