domingo, 20 de mayo de 2012

PHPMAILER


Introducción
 
El objeto de este escrito es presentar al lector la clase PHPMailer con la que podra realizar todas aquellas cosas que nunca ha podido realizar con la funcion mail() de PHP.
En primer lugar se tratara de explicar que es y las ventajas que ofrece PHPMailer, a continuacion se describiran las propiedades y metodos principales de esta clase. Para aclarar las posibles dudas se expondran dos ejemplos en los que se vera como enviar correo a traves de una cuenta gratuita creada en hotpop.

¿Que es phpmailer?
Ø  PHPMailer es una clase php para enviar emails basada en el componente active server ASPMail. Permite de una forma sencilla tareas complejas como por ejemplo:
  • Enviar mensajes de correo con ficheros adjuntos (attachments)
  • enviar mensajes de correo en formato HTML
Ø  Con PHPMailer se pueden enviar emails via sendmail, PHP mail(), o con SMTP. Lo mas recomendable es usando smtp por dos razones:
  • Con phpmailer se pueden usar varios servidores SMTP. Esto permite repartir la carga entre varias computadoras, con lo que se podran enviar un mayor numero de mensajes en un tiempo menor.
  • Ademas los servidores SMTP permiten mensajes con multimples to's (destinatarios), cc's (Las direcciones que aparezcan en este campo recibiran el mensaje. Todos los destinatarios veran las direcciones que aparecen en la seccion Cc), bcc's (Las direcciones que aparezcan en el campo Bcc recibiran el mensaje. Sin embargo, ninguno de los destinatarios podra ver las direcciones que fueron incluidas en la seccion Bcc) y Reply-tos (direcciones de respuesta)

¿Por qué usar phpmailer?

Es posible enviar email con la funcion mail() de php, pero dicha funcion no permite algunas de las mas populares caracteristicas que proporcionan los clientes de correo usados actualmente. Entre estas caracteristicas se encuentran el envio de email con ficheros adjuntos.
PHPMailer hace facil esta dificil tarea de enviar correos con estas caracteristicas y puedes incluso utilizar tu propio servidor smtp aunque este requiera autenticacion (un nombre de usuario y contraseña), con lo que se podra usar una cuenta gratuita de correo obtenida por ejemplo en hotpop.

Ejemplo Sencillo de cómo crear nuestro PHPMAILER

Creamos un nuevo documento PHP en ya sea en Dreamweaber o Bloc de Notas. En los cuales escribiremos el siguiente código de nuestra prueba de phpmailer, El cual consiste en enviar un comentario sobre un articulo.

Para ello empezaremos nuestro trabajo en un archivo llamado “index.php” e ingresaremos los siguientes códigos.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="es-ES" xml:lang="es-ES">
<head profile="http://gmpg.org/xfin/11">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<title>Formulario de Contacto</title>

<style type = "text/css" media="sceen">     
*          {font-family: Arial,sans-serif; color: #000;}
body    {backround-color: #eee; margin-top: 10%;}

</style>
</head>
<body>
<form action="envio.php" method="post">
<fieldset>
<img src="294814_234860443216210_100000767671088_571018_2127306_n.jpg" alt="Messi" width="599" height="396" longdesc="Este es la evidencia de que messi es el mejor jugador de futbol del mundo" /></p>
<p>Messi es sin duda alguna el mejor jugador de la historia del futbol, la imagen muestra como deja tirados a dos jugadores del real madrid, y no solo consigue dejarlos tirados sino que tambien a conseguido un gol con el que el equipo blaugrana consiguira el titulo de la super copa de espa&ntilde;a. </p>
<p><label>Nombre completo <input type="text" name="nombre" size="50"/></label></p>
<p><label>Email <input type="text" name="email" size="25"/></label></p>

Ingrese un comentario sobre este articulo imagen:
<p><label><textarea name="texto" cols="50" rows="6"></textarea></label></p>

<input type="submit" value="Enviar"/>

</fieldset>
</form>
</body>
</html>

 Importante la direccion de la imagen de ejemplo por favor eliminenla o agregen una nueva de lo contrario el navegador no encontrara la imagen ingresada en nuestro codigo para ello editar esta linea...
<img src="294814_234860443216210_100000767671088_571018_2127306_n.jpg" alt="Messi" width="599" height="396" longdesc="Este es la evidencia de que messi es el mejor jugador de futbol del mundo" /></p>
Esta linea esta en el codigo anterior por favor modifiquenla o les generara algun error.


bueno pasando a lo siguiente y con los codigos escritos lo que conseguiremos con este código en el navegador será lo que se muestra en la siguiente imagen…este es mi pagina de ejemplo.



Luego crearemos un nuevo archivo llamado “envio.php” en el cual pondremos los códigos donde será el destino del mensaje ósea nuestro correo electrónico y el mensaje de confirmación. Para ello ingresaremos los siguientes códigos…

<p>El comentario fue enviado correctamente, Gracias por comentar este articulo</p>
<?php
$fecha=date("d-m-Y");
$hora=date("H:i:s");
$destino="j_fernando09@hotmail.com";
$asunto="Comentario";
$desde='From: ' .$_POST[email];
$comentario="
\n
Nombre completo := $_POST[nombre]\n
Email:= $_POST[email]\n
Comentario sobre el articulo: $_POST[texto]\n
Enviado el: $fecha a las $hora\n
\n
";
mail($destino, $asunto, $comentario, $desde)
?>


Informacion sobre los
Fecha: La fecha actual de Día, Mes y Año,  
Hora: La hora en que el correo fue enviado, 
Destino: Este va a contener el correo a donde va a ser enviada la información del articulo.
Asunto: Lo definimos con la palabra Comentario,  
Desde: Aquí va a capturar la variable del formulario email. Y por ultimo en
Comentario: Insertamos un salto de línea este se hace con \n, luego el nombre que es el campo nombre de nuestro formulario hacemos lo mismo con todas las variables, luego enviamos la fecha y la hora en que se envió la información del formulario de esta manera “Enviado: $fecha a las $hora\n”, y por ultimo esta es la función mail de PHP “mail($destino, $asunto, $comentario, $desde)” en la que incluimos las variables $Destino que sería el correo, $asunto, $comentario y $desde, que sería el correo de donde se está enviando.

Realizado ya nuestra pagina php y mostrada en el correo electronico se mostrara de la siguiente forma en nuestro correo...



Una vez realizado todo el trabajo para este ejemplo, podemos subir nuestro phpmailer a la web, en mi caso lo subí creando un nuevo dominio en 000webhost.com y añadí los archivos creados (index.php y envio.php) con el programa filezilla para subirlos directamente a la web de este modo me quedo de la siguiente manera por favor visitar mi pagina de ejemplo de phpmailer en la siguiente dirección http://juanfernando.comuf.com/ gracias por su atención espero que esta entrada les sea de mucha ayuda y que Dios les Bendiga.


viernes, 18 de mayo de 2012

Try Catch Finally



Ø  Manipulación de Errores
Difícil es, por no decir imposible, encontrar en programador que no tenga errores en su código. Podemos clasificar los errores en una serie de categorías genéricas.
1.      Errores de Escritura: Son los de localización más inmediata, ya que se producen por un error sintáctico al escribir nuestro código y gracias a IDE de Visual Studio .NET, podemos detectarlo rápidamente.

             While (iContador < 10)

            End

2.      Errores de Ejecución: Estos errores son los que provocan un fallo en la ejecución del programa y u interrupción. El ejemplo siguiente provoco un error, ya que se intenta asignar un valor que no corresponde ala tipo de dato de una variable.

Sub Main()
        Dim dtfecha As Date
        dtfecha = ""
    End Sub

3.       Errores Lógicos: Son los más difíciles de captura, ya que el código se encuentra correctamente escrito, produce un problema por fallo de planteamiento de código.

Bueno específicamente, ¿Qué es un error y una Excepción?
Error: Es un evento que se produce durante el funcionamiento de un programa.
Excepción: Específicamente es un objeto generado por un error.  

Ø  Manipulación Estructurada de Errores
En este tipo de tratamiento, cada vez que se produce un error, se genera un objeto de la clase Exception, conteniendo la información del error ocurrido. La maenera de captura este tipo de objetos pasa por una estructura de control del lenguaje, proporcionada para esta finalidad.





SINTAXIS
            Try
            'codigo que puede provocar errores
            [ Catch [Excepcion [ as TipoExcepcionA]][ When Exprecion]
            'respuesta a error de tipo A
            [ Catch [Excepcion [ as TipoExcepcionN]][ When Exprecion]
            'respuesta a error de tipo N
            [Exit Try]
            [Finally]()
            'codigo posterior al control de errores
        End Try
Es posible utilizar Catch de un modo genérico, es decir, sin establecer que tipo de excepción se ha producido.

Ø  Clases de Excepciones

Cada vez que se produce un error, el entorno de ejecución genera una excepción con la información del informe acontecido.
Entre las propiedades y métodos que podemos utilizar, se encuentran las siguientes:
·         Message: Descripción del error.
·         Source: Nombre del objeto o aplicación que provoco el error.
·         Stack Trace: Ruta o traza del código en la que se produjo el error.
·         ToString(): Devuelve una cadena con información detallada del error.

Ø  Exit Try
Esta es una sentencia, atreves de esta sentencia, obligamos al flujo del programa a salir de la estructura de control de errores, desde cualquier punto de la misma en que nos encontremos.

Ø  Instrucción Try...Catch...Finally

Esta instrucción proporciona una manera de controlar algunos o todos los errores posibles que pueden ocurrir en un bloque de código determinado mientras se ejecuta el código.

Try
    [ tryStatements ]
    [ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
    [ catchStatements ]
    [ Exit Try ] ]
[ Catch ... ]
[ Finally
    [ finallyStatements ] ]
End Try

Ø  Partes

tryStatements
Opcional. Instrucciones en las que puede ocurrir un error. Puede ser una instrucción compuesta.
Ø  Catch
Opcional. Se permite utilizar varios bloques Catch. Si tiene lugar una excepción mientras se procesa el bloque Try, cada instrucción Catch se examina en orden textual para determinar si controla la excepción; el parámetro exception representa la excepción que se ha producido.
exception
Opcional. Cualquier nombre de variable. El valor inicial de exception es el valor del error producido. Se utiliza con Catch para especificar la captura del error. Si se omite, la instrucción Catch detecta cualquier excepción.
type
Opcional. Especifica el tipo de filtro de clase. Si el valor de exception es del tipo especificado en type o de un tipo derivado, el identificador queda enlazado al objeto de excepción.
Ø  When
Opcional. Una instrucción Catch con una cláusula When sólo detecta las excepciones cuando expression se evalúa como True. Una cláusula When sólo se aplica después de comprobar el tipo de la excepción y expression puede hacer referencia al identificador que representa la excepción.
expression
Opcional. Debe ser convertible implícitamente a Boolean. Cualquier expresión que describe un filtro genérico. Se utiliza normalmente para filtrar por número de error. Se utiliza con la palabra clave When para especificar las circunstancias bajo las que se captura el error.
catchStatements
Opcional. Instrucciones para controlar los errores que se producen en el bloque Try. Puede ser una instrucción compuesta.
Ø  Exit Try
Opcional. Palabra clave que interrumpe la ejecución de la estructura Try...Catch...Finally. La ejecución se reanuda con el código que sigue inmediatamente a la instrucción End Try. Se ejecutará la instrucción Finally todavía. No se permite en bloques Finally.
Ø  Finally
Opcional. Siempre se ejecuta un bloque Finally cuando la ejecución sale de cualquier parte de la instrucción Try.
finallyStatements
Opcional. Instrucciones que se ejecutan después de las demás operaciones de procesamiento de error.
Ø  End Try
Finaliza la estructura Try...Catch...Finally.
Ø  Comentarios
Las variables locales de un bloque Try no se encuentran disponibles en un bloque Catch porque se trata de bloques independientes. Si se desea utilizar una variable en más de un bloque, se debe declarar la variable fuera de la estructura Try...Catch...Finally.
El bloque Try contiene código donde puede producirse un error, mientras que el bloque Catch contiene el código para controlar cualquier error que tenga lugar. Si se produce un error en el bloque Try, el control del programa pasa a la instrucción Catch apropiada para su procesamiento. El argumento exception es una instancia de la clase Exception o una clase que se deriva de la clase Exception. La instancia de la clase Exception corresponde al error que se produjo en el bloque Try. La instancia contiene información acerca del error, como el número de error y el mensaje.
Si una instrucción Catch no especifica un argumento exception, detectará cualquier tipo de excepción del sistema o de la aplicación. Esta variación debe utilizarse siempre como el último bloque Catch en la estructura Try...Catch...Finally, después de detectar todas las excepciones específicas anticipadas. El flujo de control nunca puede alcanzar un bloque Catch situado detrás de Catch sin un argumento exception.
En situaciones de confianza parcial, como una aplicación alojada en un recurso compartido de red, Try...Catch...Finally no detectará las excepciones de seguridad que se produzcan antes de invocar al método que contiene la llamada. El ejemplo siguiente, si se coloca en un recurso compartido de servidor y se ejecuta desde el mismo, producirá el error: "Sub System.Security.SecurityException: Error de solicitud". Para obtener más información sobre excepciones de seguridad.
VB
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
    Try
        Process.Start("http://www.microsoft.com")
    Catch ex As Exception
        MsgBox("Can't load Web page" & vbCrLf & ex.Message)
    End Try
End Sub

En este tipo de situación de confianza parcial, hay que colocar la instrucción Process.Start en un procedimiento Sub independiente. La llamada inicial a Sub producirá un error, lo que permite que Try...Catch lo capture antes de que se inicie el procedimiento Sub que contiene Process.Start y se produzca la excepción de seguridad.


Ø  Nota

Si una instrucción Try no contiene al menos un bloque Catch, debe contener un bloque Finally.
http://i3.msdn.microsoft.com/Areas/Global/Content/clear.gif
Ø  Ejemplo

En el siguiente ejemplo simplificado se muestra la estructura de la instrucción Try...Catch...Finally.
VB
Public Sub TryExample()
    Dim x As Integer = 5   ' Declare variables.
    Dim y As Integer = 0
    Try                    ' Set up structured error handling.
        x = x \ y          ' Cause a "Divide by Zero" error.
    Catch ex As Exception When y = 0        ' Catch the error.
        Beep()
        MsgBox("You tried to divide by 0.") ' Show an explanatory message.
    Finally
        Beep()             ' This line is executed no matter what.
    End Try
End Sub


Esto ha sido un poco de investigación acerca de lo que es “try cath finally” es un método para que podamos controlar algunos o todos los errores posibles que pueden ocurrir en un bloque de código determinado mientras se ejecuta el código.