martes, 21 de agosto de 2012

Como enviar correos electrónicos con autentificación SMTP en PHP con la librería PHPMAILER

A medida que aumentan el número de aplicaciones web en internet, los desarrolladores somos cada vez más conscientes de la importancia de una comunicación entre la aplicación y el usuario a través del envío de correos electrónicos (no abusivos) por parte de dicha aplicación. Puede emplearse bien para recordar contraseñas, para enviar informes de pedidos, enviar facturas, notificaciones, campañas publicitarias, soporte, etc...

Además uno de los requisitos indispensables es que la aplicación web pueda enviar contenido a sus usuarios con la mejor presentación posible y ocupando el menor espacio.

En este caso vamos a centrarnos en aplicaciones web desarrolladas en PHP y utilizaremos la librería PHPMailer.



En el lenguaje PHP ya existe una función nativa para el envío de correo electrónico, el problema que presenta frente a la solución PHPMailer, es que no soporta Autentificación ni envío de contenido HTML.

Con la función Mail nativa de PHP, al no soportar Autentificación no podemos asegurar que el que envía el correo es quien dice ser, por lo que muchos servidores de correo catalogan dichos envíos como SPAM, de modo que pocos son los emails que llegan a su destino. Esto es un gran problema para nuestra aplicación, ya que como hemos mencionado es imprescindible notificar y captar la atención de los usuarios para que nuestra aplicación pueda tener éxito.

Otro punto importante que posibilita la librería PHPMailer es que permite el envío de contenido HTML lo cual proporciona una gran flexibilidad a la hora de crear los cuerpos del mensaje tanto en contenido como en diseño.

EJEMPLO DE ENVÍO DE CORREO ELECTRONICO CON LIBRERÍA PHPMAILER 5.2.1  

En primer lugar descargamos la librería de PHPMailer 5.2.1 de http://phpmailer.apache-extras.org.codespot.com/files/PHPMailer_5.2.1.zip y descomprimimos, añadiendo la carpeta “PHPMailer_5.2.1” descomprimida en nuestro proyecto. 

Una vez tenemos la librería descargada utilizaremos la siguiente función php que hace uso de dicha librería para enviar los correos electrónicos. La función está comentada con detalle para entender que se hace en cada parte:

 

function enviarEmailSMTP($origen,$nombreOrigen,$destino,$responderA,$longitudLinea,$tituloEmail,$cuerpoEmail,$servidor,$usuario,$contraseña,$seguridadSMTP,$puerto,$archivosAdjuntos)
{  
   
    require_once('./PHPMailer_5.2.1/class.phpmailer.php'); // Especificamos la utilización de la librería PHPMailer 5.2.1 contenida en el directorio actual
    $mail = new PHPMailer(true); //el parámetro 'true' significa que lanzará excepciones en los errores que se produzcan, las cuales deben ser capturadas

    $mail->IsSMTP(); //le decimos a la clase que utilice SMTP

    try {
      $mail->SMTPDebug  = 0; // activa la información SMTP de depuración (para pruebas)
      $mail->SMTPAuth   = true; //activa autenficicación SMTP
      $mail->SMTPSecure = $seguridadSMTP;                 // especifica la seguridad SMTP
      $mail->Host       = $servidor;      // especificamos la dirección del servidor de correo 
      $mail->Port       = $puerto;                   // puerto del servidor de correo
      $mail->Username   = $usuario;  // usuario del correo origen
      $mail->Password   = $contraseña;         //contraseña del correo origen
      $mail->AddAddress($destino, ''); // dirección de correo destino
      $mail->SetFrom($origen, $nombreOrigen); // especificamos el origen del correo
      $mail->Subject = $tituloEmail; // titulo del email
      $mail->MsgHTML($cuerpoEmail); // cuerpo del email
     
     
      for($i=0;$i<count($archivosAdjuntos);$i++) // recorremos vector de rutas de archivos y adjuntamos
      {
        $mail->AddAttachment($archivosAdjuntos[$i]);
      }
     
      $mail->Send();
     
      //Si llegamos a este punto quiere decir que no ha habido ninguna excepción por lo que el envio se realizó correctamente.
      return true;
     
    } catch (phpmailerException $e) {
        echo $e->errorMessage(); //Excepción de PHPMailer
    } catch (Exception $e) {
        echo $e->getMessage(); //Cualquier otra excepción
    }
}


Como podemos observar esta función utiliza una serie de parámetros de entrada, la mejor forma de ver que son cada parámetro es mediante un ejemplo de utilización comentado. El envío se realiza a través de una dirección de GMAIL por ssl:
$origen = "micorreo@gmail.com"; // correo del emisor
$nombreOrigen="Mi nombre"; // nombre del emisor
$destino = "destino@gmail.com"; // correo del destino
$responderA=$origen; // correos a los que queremos que respondan
$longitudLinea=50; //longitud de la linea del correo
$tituloEmail = "Titulo del email"; // titulo del correo
$cuerpoEmail = "Esto es el cuerpo del email, podría tener código HTML."; //cuerpo del correo
$servidor = "smtp.gmail.com"; //dirección del servidor de correo
$usuario = $origen; //usuario de autentificación
$contraseña = "password"; //contraseña de autentificación
$seguridadSMTP="ssl";  //seguridad SMTP
$puerto=465; //puerto del servicio de correo
$archivosAdjuntos=array('./imagenes/logo.png','./archivos/factura.pdf'); //vector de rutas de los archivos a adjuntar en el correo

enviarEmailSMTP($origen,$nombreOrigen,$destino,$responderA,$longitudLinea,$tituloEmail,$cuerpoEmail,$servidor,$usuario,$contraseña,$seguridadSMTP,$puerto,$archivosAdjuntos);


Finalmente mencionar que dependiendo del servidor de correo de la dirección origen los parámetros serán unos y otros.   

jueves, 21 de junio de 2012

Instalar y configurar NetBeans IDE 7 con Symfony2 en Windows 7

Cuando necesitamos desarrollar proyectos Web en PHP de un tamaño ya considerable, tenemos que plantearnos seriamente el aplicar arquitecturas que faciliten el mantenimiento y modificación futuros del proyecto que puedan surgir ante el cambio de requisitos. Un patrón arquitectónico software adecuado para este tipo de casos podría ser MVC (Modelo, Vista y Controlador).

El MVC es un patrón de arquitectura del software que diferencia en distintos compomentes los datos de una aplicación, la interfaz de usuario, y la lógica de negocio.

En el caso de PHP disponemos de distintos Frameworks que facilitan el desarrollo de proyectos con el patrón MVC, en este artículo concreto, explicaremos como instalar la herramienta NetBeans IDE 7 junto con el Framework Symfony2, siendo el Framework de Symfony2 quien nos facilitará la tarea.

Tenemos que tener en cuenta que en NetBeans IDE 7, por defecto, ya viene instalado el plugin Symfony, pero no Symfony2.

Los pasos que debemos seguir para instalar NetBeans IDE 7 con Symfony2 en Windows 7 son:

Nota: Consideramos que disponemos de un servidor web (IIS por ejemplo) y PHP 5 instalado de antemano. También podríamos tener ya instalado un servidor MysSql.

1. Descargamos NetBeans IDE 7 de http://netbeans.org/downloads/index.html con soporte para PHP y lo instalamos (la instalación es bastante simple, no hay que modificar ningún parámetro que venga por defecto, vamos pasando los pasos de instalación con "next"). 


Descargar NetBeans IDE 7



2. Abrimos NetBeans IDE 7 y vamos a "Tools->plugins" pulsamos en la pestaña de "Available Plugins" y buscamos en el campo "Search" la cadena "symfony2".






3. Entre los resultados de búsqueda seleccionamos "PHP Symfony2 Framework" y lo instalamos pulsando "Install".


4. Entramos en la web de symfony http://symfony.com/download y descargamos el archivo con extensión ".zip" en la que no ponga "without vendors".






5. Abrimos NetBeans IDE 7 y vamos a "Tools->options", le pulsamos a la opción de "PHP" y después a la pestaña "Symfony2". En el botón "Browse.." seleccionamos el archivo ".zip" que descarguemos de la página oficial de Symfony. Este paso sirve para indicar a NetBeans IDE 7 la ubicación del Framwork Symfony 2.



6. Creamos un proyecto de prueba llamado "proyectoSymfony2". Desde "File->New Project".

Elegimos proyecto aplicación PHP.






Especificamos la ruta donde se almacenará nuestro proyecto, la cual tendrá que ser accesible por nuestro servidor web para poder probarse el proyecto durante el desarollo.






Indicamos el Index del proyecto o archivo de entrada, concretamente tendríamos que indicar el archivo contenido en "./web/app_dev.php"




Seleccionamos Symfony2 para nuestro proyecto.






7. Ejecutamos el proyecto. En caso que nos salga un excepción referida al Timezone tal como se muestra a continuación:







Tendremos que añadir la linea de código "date_default_timezone_set('Europe/Madrid');" en el archivo de nuestro proyecto "./app/AppKernel.php" tal como aparece en la imagen.



8. Ahora ya podemos ejecutar nuestro proyecto de prueba "proyectoSymfony2" y debería funcionar correctamente apareciendo algo similar a:





martes, 24 de abril de 2012

Controlar remotamente el ratón y el teclado de tu ordenador con tu móvil Android

 Hay situaciones en los que nos gustaría tener control remoto de nuestro ordenador a través de un mando o algo parecido, o bien porque estamos  en el sofá o en la cama viendo una película en nuestro ordenador y queremos pausarla,  o incluso porque estamos exponiendo una presentación con diapositivas y queremos controlar remotamente estas.

Esto podemos llevarlo a cabo a través de nuestro móvil con Android, instalando la aplicación “Remote Droid”.

“RemoteDroid” es una aplicación que permite mover el ratón de nuestro ordenador desde la pantalla táctil de nuestro móvil Android, así como escribir desde el teclado virtual de Android.



Para poder utilizar esta herramienta únicamente tenemos que tener tanto el ordenador que queremos controlar remotamente como nuestro móvil, conectados a la misma red local, es decir, si por ejemplo tenemos en casa conexión a internet y disponemos de conexión inalámbrica, pues tendríamos que tener el móvil conectado a la conexión wifi de casa y tener el ordenador accediendo a internet a través de la misma conexión (el ordenador no tiene porqué estar conectado necesariamente por wifi, podría estar conectado por cable al router).

Otro requisito es que el ordenador tenga instalado Java, ya que tenemos que ejecutar una especie de aplicación (servidor) que será la encargada de recibir las órdenes desde el móvil y ejecutarlas en el ordenador. Cuando hablo de órdenes me refiero a ejecutar el movimiento del ratón y la escritura.  


Para instalar y configurar la aplicación tenemos que seguir los siguientes pasos: 

 1. Entramos en el market de nuestro móvil Android (ahora llamado “Play Store”) y buscamos “RemoteDroid”, una vez la encontremos la descargamos e instalamos.

2. Ahora entramos en nuestro ordenador y nos aseguramos que tenemos instalado Java desde la web http://www.java.com/es/download/installed.jsp, pulsando en “Verificar la versión de Java”. En caso de no tenerlo instalado lo descargamos de http://www.java.com/es/download/ y lo instalamos.

3. Descargamos la aplicación servidor en nuestro ordenador de http://remotedroid.net/ donde pone “Download Server APP”. Nos descargaremos un archivo llamado “RemoteDroidServer.jar”.

4. Una vez tenemos la aplicación “RemoteDroid” instalada en nuestro móvil Android y la aplicación que ejecutaremos en nuestro ordenador (aplicación servidor) deberemos asegurarnos que nuestro móvil está conectado al wifi de la conexión de red donde tenemos conectado nuestro ordenador. Si por ejemplo lo estamos probando en la conexión de internet en casa, tendremos que conectar el móvil al wifi y, al mismo tiempo, tener el ordenador conectado a la misma conexión, bien sea a través de wifi o por cable.

5. Ahora vamos a nuestro ordenador, y ejecutamos la aplicación servidor, que es la que nos hemos descargado de la página oficial de “RemoteDroid”. En caso de que nuestro ordenador esté en Windows, es posible que este no sepa con qué programa abrir el archivo y deberemos especificárselo. Para ello sobre el archivo pulsamos botón derecho, “Abrir con..” y buscamos “Java Platform SE binary”. Observar que hemos hecho clic a “Usar siempre el programa seleccionado para abrir este tipo de archivos" para las próximas veces que Windows sepa como abrirlo.






En el caso de tener en nuestro ordenador Linux, bastaría con abrir la consola y desde el directorio donde tenemos el archivo poner el comando “java -jar RemoteDroidServer.jar” 

Una vez abierta, veríamos en nuestro ordenador la ventana:




 6. Ahora necesitamos ver la dirección IP del ordenador para conectarnos desde el móvil a este para el manejo remoto. Para ello abrimos, en caso de estar en Windows, consola desde “Inicio”->”Todos los programas”->”Accesorios”->”Símbolo del sistema” y ponemos el comando “ipconfig /all | more”, y vamos dando a la tecla "Intro" hasta ver en caso de estar conectado por cable:


Y en caso de que nuestro ordenador esté a la red conectado por Wifi:


Podemos ver que en el ejemplo de estar conectados por cable tenemos la dirección IP 192.168.1.102, y en el ejemplo por wifi tenemos la 192.168.1.101. Esta dirección IP, como ya hemos dicho, la utilizaremos para conectarnos desde el móvil al ordenador.

Si nuestro ordenador tuviera Linux y no Windows, tendríamos que utilizar el comando “ifconfig” desde consola y mirar la dirección IP del interfaz de red correspondiente, empezando por “eth” los interfaces físicos, y por “wlan” los inalámbricos.

7. Una vez tenemos la dirección IP, cogemos nuestro móvil con Android y abrimos la aplicación “RemoteDroid”. Aquí nos parecerá un campo donde tenemos que poner la dirección IP que vimos de nuestro ordenador, y pulsar a “Connect”.

   
8. Una vez hemos llegado a este punto, si todo lo hemos realizado correctamente, ya podremos manejar el ratón con el panel táctil, botón derecho e izquierdo del ratón, así como escribir con el teclado virtual de nuestro móvil Android.



Y si pulsamos la opción de bajo en el centro, aparecerá el teclado:


   
 

jueves, 5 de abril de 2012

Creación de túneles con SSH en Linux


Supongamos que necesitamos conectarnos por red, desde nuestro equipo Linux, a un servicio de un computador remoto el cual no se encuentra en nuestra misma red. A pesar de que nuestro “Computador Destino” no está en nuestra misma red, si que tenemos acceso por red a un equipo que si tiene acceso, a su vez, al computador al que nos queremos conectar.

Esta situación queda plasmada en el siguiente esquema de red:



Como podemos observar, tenemos nuestro computador (A), conectado a la misma red que el equipo intermedio (B), y a su vez, el equipo (B) tiene acceso por red al “Computador Destino” (C) al que queremos conectarnos. De este modo tenemos que los equipos A y B están en la red 192.168.1.0/24 y los equipos B y C están en la red 192.168.2.0/24.

Para llevar a cabo nuestro propósito tenemos como requisito que el equipo B, que utilizaremos como “Gateway”, tenga en marcha el servicio SSH para poder conectarnos a él.

El concepto básicamente consiste en crear una conexión de nuestro computador (A) al computador Gateway (B) por SSH, indicando la IP del “Computador Destino” (C) y el puerto del servicio al que nos queremos conectar en dicho “Computador Destino”. También el puerto por el que nos queremos conectar en nuestra máquina local.

Supongamos que en nuestro caso queremos acceder a una página web que tenemos alojada en nuestro “Computador Destino”, el cual tiene en marcha un Servidor Web por el puerto 80.

Para crear el túnel en nuestro computador (A) abrimos un terminal y tecleamos:

root@servidor:~# ssh –L 6677:192.168.2.150:80 root@192.168.1.30

Donde tenemos que: 

6677: Puerto que utilizaremos para conectarnos al servidor web desde nuestro computador. 

192.168.2.150: Dirección IP de la máquina C, a la que queremos conectarnos. 

80: Puerto del servidor web de la máquina C. 

root@192.168.1.30: Conexión SSH a la maquina intermedia B, que hace de Gateway. En este caso hemos utilizado el usuario “root”, sin embargo podríamos haber utilizado cualquier otro usuario de la máquina B. 

Nos pedirá la contraseña del usuario “root” de la máquina B, en este caso. Una vez hecho esto dejamos el terminal abierto, y abrimos el navegador poniendo la dirección de la web a la que queremos acceder especificándole el puerto que pasemos como argumento al servidor SSH: 


Hay que tener en cuenta que este ejemplo se ha basado en el acceso al servidor web del “Computador Destino”, sin embargo, se podría haber hecho un túnel para conectarnos a cualquier otro tipo de servicio por su puerto correspondiente


Ver todas las interfaces de red disponibles en GNU/LINUX

Cuando trabajamos con sistemas GNU/LINUX, como por ejemplo Debian, Ubuntu, etc…,  y necesitamos ver o modificar las configuraciones de red de alguno de los adaptadores disponibles en el equipo a través de la consola, normalmente utilizaremos la utilidad “ifconfig”.

Utilizando únicamente el comando ifconfig, sin ningún argumento, este nos muestra las interfaces de red del sistema que actualmente están habilitadas, pero no todas las que realmente hay disponibles.

Por ejemplo, utilizando “ifconfig” sin argumentos: 



Como podemos observar, únicamente nos aparece el interfaz loopback 127.0.0.1 ,  que es un interfaz de red especial utilizado cuando una transmisión de datos tiene como destino el propio host. Pues bien, si queremos ver si en nuestro sistema hay algún otro interfaz de red además del mencionado, tendríamos que utilizar el comando “ifconfig –a”:



podemos observar que nos aparece un nuevo interfaz de red Ethernet “eth0”. En caso de querer habilitarlo tendríamos que hacerlo con “ifconfig eth0 up”. Del mismo modo si quisiéramos deshabilitarlo una vez habilitado lo haríamos con “ifconfig eth0 down”.  

miércoles, 4 de abril de 2012

Configurar tarjeta de red en Windows 7 o Windows Vista

En ocasiones puede dársenos el caso en el que tengamos que conectar nuestro equipo con Windows 7 a una red en la que no se nos asigne una IP de forma automática (DHCP) y por consiguiente tengamos que configurar nosotros manualmente nuestra tarjeta de red, dados los parámetros de red a la que nos tenemos que conectar. O simplemente que nuestro ordenador pierda la conexión de red y tengamos que reconfigurarlo. 

En esta entrada explicaré brevemente y de forma básica como podemos acceder a la configuración de nuestro adaptador de red de área local y configurarlo para conectarnos a una determinada red, bien asignando una dirección IP fija, o bien configurando el adaptador para coger los parámetros de red automáticamente por DHCP.

Los pasos serían:

1. Pulsamos en “Inicio” y abrimos “Panel de control”.





2. Una vez en panel de control, pulsamos en el apartado de “Redes e Internet”.



3. Estando en “Redes e Internet” entramos en “Centro de redes y recursos compartidos”.




4. Ahora nos aparecerá listados todos los adaptadores de red que estén siendo utilizados en el equipo.      
Buscamos el adaptador de “Conexión de área local” y hacemos clic.




5. Se nos abrirá la ventana de “Estado de conexión de área local”, pues bien, pulsamos en “Propiedades”.




6. Estando en “Propiedades de Conexión de área local” damos doble clic en el apartado de “Protocolo de Internet versión 4 (TCP/IPv4)”.




7. Una vez aquí, configuramos el adaptador de red de conexión de área local con una IP fija en caso que sea lo requerido. Necesitaríamos una Dirección IP, Máscara de subred, Puerta de enlace predeterminada y al menos la dirección IP de un servidor DNS.




O por el contrario, configuramos el adaptador de red para que adquiera los parámetros de red de forma automática por DHCP.