miércoles, 25 de julio de 2012
martes, 24 de julio de 2012
Como utilizar phpmailer 5.2.1 con Gmail
phpMailer es una excelente forma para enviar correos electrónicos desde la web, ya sea para enviar una confirmación de registro, un boletin, etc. Esta clase permite enviar correos mediante servidor SMTP, copias ocultas, en formato html, etc.
Antes de comenzar el ejemplo primero debemos descargar la clase:
De la descarga lo que nos interesa para este post son los archivos class.phpmailer.php yclass.smtp.php.
En este ejemplo vamos a autenticarnos a una cuenta de correo Gmail y enviar un correo electrónico utilizando esa cuenta, esto también sirve si estas utilizando GoogleApps que en el caso de utilizar tus credenciales de Gmail utilizarías las de GoogleApps sin modificar nada más.
Creamos un nuevo proyecto o carpeta en nuestro servidor, copiamos y pegamos dentro las dos clases antes mencionadas, y creamos un archivo adicional con el siguiente código:
Las distintas zonas horarias las podes encontrar en la documentación de la página oficial de php.
IsSMTP(); // Se especifica a la clase que se utilizará SMTP
try {
//------------------------------------------------------
$correo_emisor="filth.dani@gmail.com"; //Correo a utilizar para autenticarse
//Gmail o de GoogleApps
$nombre_emisor="Dani Filth"; //Nombre de quien envía el correo
$contrasena="password_from_hell"; //contraseña de tu cuenta en Gmail
$correo_destino="shagrath@gmail.com"; //Correo de quien recibe
$nombre_destino="Shagrath"; //Nombre de quien recibe
//--------------------------------------------------------
$mail->SMTPDebug = 2; // Habilita información SMTP (opcional para pruebas)
// 1 = errores y mensajes
// 2 = solo mensajes
$mail->SMTPAuth = true; // Habilita la autenticación SMTP
$mail->SMTPSecure = "ssl"; // Establece el tipo de seguridad SMTP
$mail->Host = "smtp.gmail.com"; // Establece Gmail como el servidor SMTP
$mail->Port = 465; // Establece el puerto del servidor SMTP de Gmail
$mail->Username = $correo_emisor; // Usuario Gmail
$mail->Password = $contrasena; // Contraseña Gmail
//A que dirección se puede responder el correo
$mail->AddReplyTo($correo_emisor, $nombre_emisor);
//La direccion a donde mandamos el correo
$mail->AddAddress($correo_destino, $nombre_destino);
//De parte de quien es el correo
$mail->SetFrom($correo_emisor, $nombre_emisor);
//Asunto del correo
$mail->Subject = 'Prueba de phpMailer en Garabatos Linux';
//Mensaje alternativo en caso que el destinatario no pueda abrir correos HTML
$mail->AltBody = 'Hijole para ver el mensaje necesita un cliente de correo compatible con HTML.';
//El cuerpo del mensaje, puede ser con etiquetas HTML
$mail->MsgHTML("¿Que otro nombre recibe el área de sol del Estadio Cuscatlán?");
//Archivos adjuntos
$mail->AddAttachment('img/logo.jpg'); // Archivos Adjuntos
//Enviamos el correo
$mail->Send();
echo "Mensaje enviado. Que chivo va vos!!";
} catch (phpmailerException $e) {
echo $e->errorMessage(); //Errores de PhpMailer
} catch (Exception $e) {
echo $e->getMessage(); //Errores de cualquier otra cosa.
}
?>
Las distintas zonas horarias las podes encontrar en la documentación de la página oficial de php.
NOTA: Este código puede ser utilizado desde tu servidor local de pruebas, no es necesario que este montado en un hosting público.
Revisar Correos G-Mail usando PHP e IMAP
Demo: http://davidwalsh.name/dw-content/php-gmail.php
CSS
Créditos: http://davidwalsh.name/gmail-php-imap
CSS
div.toggler { border:1px solid #ccc; background:url(gmail2.jpg) 10px 12px #eee no-repeat; cursor:pointer; padding:10px 32px; }
div.toggler .subject { font-weight:bold; }
div.read { color:#666; }
div.toggler .from, div.toggler .date { font-style:italic; font-size:11px; }
div.body { padding:10px 20px; }
MooTools
window.addEvent('domready',function() {
var togglers = $$('div.toggler');
if(togglers.length) var gmail = new Fx.Accordion(togglers,$$('div.body'));
togglers.addEvent('click',function() { this.addClass('read').removeClass('unread'); });
togglers[0].fireEvent('click'); //first one starts out read
});
PHP
/* connect to gmail */
$hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = 'davidwalshblog@gmail.com';
$password = 'davidwalsh';
/* try to connect */
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());
/* grab emails */
$emails = imap_search($inbox,'ALL');
/* if emails are returned, cycle through each... */
if($emails) {
/* begin output var */
$output = '';
/* put the newest emails on top */
rsort($emails);
/* for every email... */
foreach($emails as $email_number) {
/* get information specific to this email */
$overview = imap_fetch_overview($inbox,$email_number,0);
$message = imap_fetchbody($inbox,$email_number,2);
/* output the email header information */
$output.= '
';
$output.= ''.$overview[0]->subject.' ';
$output.= ''.$overview[0]->from.'';
$output.= 'on '.$overview[0]->date.'';
$output.= '
';
/* output the email body */
$output.= '
'.$message.'
';
}
echo $output;
}
/* close the connection */
imap_close($inbox);
Créditos: http://davidwalsh.name/gmail-php-imap
mod_rewrite: reescribir URLs
Comprendiendo mod_rewrite#LoadModule rewrite_module modules/mod_rewrite.so #AddModule mod_rewrite.c
Es importante comprender lo que hace exactamente este módulo.
El mod_rewrite se ejecuta después de hacer un request en tu servidor y antes de ejecutar cualquier script. Lo que hace es que aplica un "filtro" configurado por uno sobres los urls y los rescribe detrás de las cortinas.
Por ejemplo, podrías tener un url inexistente como el siguiente:
http://www.tusitio.com/algo
Y entonces el mod_rewrite lo podría convertir a:
http://www.tusitio.com/cgi-bin/dir/aplicacion.cgi?categoria=algo
La conversión del url se hace por detrás por lo que el usuario no podrá
ver nada de esto, sin embargo si verá el resultado que viene de la
ejecución del url "real".
Es importante comprender que mod_rewrite NO puede ser usado para cambiar el URL que el usuario ve es la barra de Dirección de su navegador a menos que una redirección externa es invocada. Sin embargo una dirección externa expone finalmente el url dinámico, así que mod_rewrite hace una redirección interna.
También es importante comprender que mod_rewrite cambia la dirección del archivo y las variables del url pedido pero NO cambia en ningún momento el despliegue de las mismas.
Poniendo mod_rewrite en práctica
Muy bien, empecemos con lo bueno, para esto vamos a hacer un ejemplo práctico.
Digamos que tienes una tienda de ropa y que tus clientes pueden ver la ropa que tienes navegando por categoría y talla de la misma. Para esto tienes una aplicación que se llama de la siguiente manera:
http://tusitio.com/cgi-bin/aplicacion_ropa.cgi?tipo=playeras&sexo=femenino&talla=chica
No es para nada bonito el url, por lo que queremos que nuestros clientes puedan acceder de la siguiente manera:
http://tusitio.com/playeras/femenino/chica.htm
Como ves es más intuitivo y amigable.
Usando mod_rewrite no es necesario hacer ningún cambio en tu aplicación, ni siquiera es necesario que crees los directorios 'playeras/' ni 'playeras/femenino', tampoco es necesario que hagas un archivo que se llame chica.htm.
Lo que vamos a hacer es que cuando algún usuario haga un request de 'http://tusitio.com/playeras/femenino/chica.htm' usaremos el mod_rewrite para filtrar y convertir el url a 'http://tusitio.com/cgi-bin/aplicacion_ropa.cgi?tipo=playeras&sexo=femenino&talla=chica', pero todo esto detrás de las cortinas, usando la redirección interna como habíamos dicho.
Ya que estemos seguros que tenemos el mod_rewrite instalado y activo, vamos a crear un nuevo archivo de configuración .htaccess.
Dentro de nuestro .htaccess vamos a inicializar el módulo mod_rewrite:
Ya que tenemos esto, tenemos que configurar las reglas o filtros que vamos a usar. Cada uno deberá de ir en una nueva línea y podemos tener tantos como nosotros queramos y necesitemos. Entonces vamos a crear nuestro filtro que ser verá así:RewriteEngine On
Comprendamos nuestra línea del filtro. El filtro está conformado por 4 elementos, cada uno separado por un espacio en blanco.RewriteRule ^playeras/femenino/chica.htm cgi-bin/aplicacion_ropa.cgi?tipo=playeras&sexo=femenino&talla=chica [L,NC]
El primer elemento es:
Aquí indicamos que estamos creando una nueva regla o filtro para la máquina de mod_rewrite. El segundo elemento es:RewriteRule
En este caso es el url que estamos buscando. Es importante que tengamos en cuenta que siempre debemos de usar los directorio relativos, es decir, no debemos de poner el dominio de nuestro sitio, el mod_rewrite lo pondrá por nosotros.^playeras/femenino/chica.htm
La tercera parte es el nuevo url al cual queremos redirigir, también la dirección debe de estar relativa, mod_rewrite pondrá por nosotros el dominio de nuestro sitio.
NOTA: No podemos usar el mod_rewrite para hacer una redirección interna a un url que no se encuentre dentro de nuestro dominio.cgi-bin/aplicacion_ropa.cgi?tipo=playeras&sexo=femenino&talla=chica
La última parte es opcional y son flags que regulan el comportamiento del mod_rewrite.
En las siguientes secciones veremos más detalles acerca de los flags, pero podemos decir que con los flags L y NC le decimos al mod_rewrite que sea la última regla que cheque si coincide y que no haga caso a las minúsculas y mayúsculas.[L,NC]
Más poder a nuestro mod_rewrite
El ejemplo anterior es de gran ayuda, vimos como podemos convertir un url dinámico en estático en cuestión de minutos, pero hay un pequeño problema.
Lo más seguro es que nuestra tienda de ropa no venda puras playeras chicas, ni tampoco puras de mujer, y lo más seguro es que venda más productos que puras playeras, debe de haber pantalones, chamarras, shorts, camisas, vestidos, etc, etc.
Hacer una nueva regla por cada producto y por cada tamaño será un verdadero dolor de cabeza, y aparte cada ves que queramos poner una nueva línea de productos en la tienda tendremos que modificar nuestro .htaccess.
Pues bueno, con mod_rewrite podemos evitar eso, pues aún no hemos visto la parte más poderosa.
En el último ejemplo hicimos un filtro bastante sencillo:
Pero también quisiéramos que los siguientes urls lo redirija al lugar correcto:RewriteEngine On RewriteRule ^playeras/femenino/chica.htm cgi-bin/aplicacion_ropa.cgi?tipo=playeras&sexo=femenino&talla=chica [L,NC]
http://tusitio.com/pantalones/masculino/32.htm
http://tusitio.com/vestidos/femenino/mediano.htm
http://tusitio.com/shorts/infantil/12.htm
...
Si vemos, todos los urls tiene una misma sintaxis, el primer directorio
sería la línea de ropa (pantalones,vestidos,shorts,etc), el
subdirectorio sería el departamento (masculino,femenino,infantil,etc) y
el archivo html sería la talla (32.htm,mediano.html,12.htm).
http://tusitio.com/vestidos/femenino/mediano.htm
http://tusitio.com/shorts/infantil/12.htm
...
mod_rewrite nos permite usar expresiones regulares dentro de nuestros filtros, de esta manera podemos realizar filtros más poderosos.
Las expresiones regulares nos brindan un set de reglas que podemos usar para comprobar valores arbitrarios como en este caso. Sabemos que el url vendrá en una misma sintaxis pero tendrá diferentes valores, usando las expresiones regulares podemos capturar y comprobar esos valores.
Veamos la expresión regular que usaríamos en este caso para hacer lo que queremos:
Expliquemos un poco nuestra expresión.^([a-zA-Z]+)/([a-zA-Z]+)/([a-zA-Z0-9]+).htm$
El ^ incial denota inicio de línea, significa que solamente será válida la regla si se cumple iniciando la línea.
Los paréntesis ( ) los usamos para capturar el valor, en este caso así lo queremos pues después tendremos que usarlos para enviárselos a nuestro CGI de la aplicación.
Los [ ] los usamos para asignar un campo de caracteres. Los campos de caracteres los podemos usar cuando queremos checar que ciertos caracteres estén o no estén. En la primera parte que será de la línea de ropa, sabemos que solamente vendrán letras del alfabeto, por lo que solamente queremos de la a-z y de la A-Z, en minúsculas y mayúsculas. Lo mismo en la segunda parte, pero ya en la tercera parte si puede haber números por ejemplo en 32.htm, por lo que tenemos que poner también el 0-9.
El signo de + después del cierre del campo de carácter, significa que debe de haber por lo menos uno o más de los caracteres que queremos.
Luego tenemos la separación con las diagonales '/' que están fuera de los paréntesis pues queremos capturar solamente 'pantalones' y no 'pantalones/'.
Al final también dejamos el .htm fuera de los paréntesis pues no lo queremos usar, y terminamos con $ que simboliza final de línea.
Así ya tenemos nuestros valores capturados que ahora podremos usar en el url para llamar al CGI de nuestra aplicación:
Vemos como los valores los sustituimos por $1, $2, $3 que a su vez serán sustituidos por mod_rewrite con los valores que capturamos en nuestros paréntesis.cgi-bin/aplicacion_ropa.cgi?tipo=$1&sexo=$2&talla=$3
Cada paréntesis captura en una nueva variable y lo hacen en orden, así que van tomando $1, $2, $3, $4.. así hasta lo que se necesite.
Así que finalmente nuestra regla se verá de la siguiente manera:
Así si llamamos a los siguientes urls:RewriteEngine OnRewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/([a-zA-Z0-9]+).htm$ cgi-bin/aplicacion_ropa.cgi?tipo=$1&sexo=$2&talla=$3 [L,NC]
http://tusitio.com/pantalones/masculino/32.htm
http://tusitio.com/vestidos/femenino/mediano.htm
http://tusitio.com/shorts/infantil/12.htm
Serán redireccionados internamente a:
http://tusitio.com/vestidos/femenino/mediano.htm
http://tusitio.com/shorts/infantil/12.htm
http://tusitio.com/cgi-bin/aplicacion_ropa.cgi?tipo=pantalones&sexo=masculino&talla=32
http://tusitio.com/cgi-bin/aplicacion_ropa.cgi?tipo=vestidos&sexo=femenino&talla=mediano
http://tusitio.com/cgi-bin/aplicacion_ropa.cgi?tipo=shorts&sexo=infantil&talla=12
Así de la nada, tenemos una lista infinita de páginas estáticas fáciles de navegar por nuestros usuarios.
http://tusitio.com/cgi-bin/aplicacion_ropa.cgi?tipo=vestidos&sexo=femenino&talla=mediano
http://tusitio.com/cgi-bin/aplicacion_ropa.cgi?tipo=shorts&sexo=infantil&talla=12
Tomándole la medida a mod_rewrite
Usar mod_rewrite es sumamente sencillo, quizá lo más difícil podría ser aprender a usar las expresiones regulares y los flags que podemos usar para controlar el comportamiento del módulo.
Sin embargo ambas son muy intuitivas y con un poco de uso y de estar jugando y probando con ellas, les tomarás la práctica inmediatamente.
Dave Child hizo un PDF con un "acordeón" que enlista las expresiones regulares y flags que podemos usar en el mod_rewrite. Les recomiendo que descarguen el PDF con la lista y lo tengan a la mano en el momento de crear sus filtros:
http://www.ilovejackdaniels.com/mod_rewrite_cheat_sheet.pdf
Últimas Palabras
Cuando hagas tus primeras pruebas con el mod_rewrite, ten cuidado y si puedes has las pruebas con un servidor Apache que no esté en vivo, pues si tienes algún error de sintaxis al momento de crear tus filtros, verás un error 500 en todo tu sitio, evitando que tus usuarios puedan acceder a él.
En caso de que quieras convertir tu sitio de estático a dinámico pero no te atreves a hacerlo tu sólo, puedes usar nuestros Servicios de Perl en Español y nosotros lo haremos por ti:
http://perlenespanol.com/servicios/
Otros Recursos
Documentación de mod_rewrite
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
Introducción a las Expresiones Regulares
http://perlenespanol.com/tutoriales/expresiones_regulares/index.html
mod_rewrite Cheat Sheet
http://www.ilovejackdaniels.com/apache/mod_rewrite-cheat-sheet/
Créditos: http://perlenespanol.com/articulos/archivo/000180.html
Inicio
<head> <link href='https://sites.google.com/site/itswadesh/codehighlighter/shCore.css' rel='stylesheet' type='text/css'/> <link href='http://sites.google.com/site/itswadesh/codehighlighter/shThemeDefault.css' rel='stylesheet' type='text/css'/> <script src='http://sites.google.com/site/itswadesh/codehighlighter/shCore.js' type='text/javascript'/> <script src='http://sites.google.com/site/itswadesh/codehighlighter/shBrushCss.js' type='text/javascript'/> <script src='http://sites.google.com/site/itswadesh/codehighlighter/shBrushJScript.js' type='text/javascript'/> <script src='http://sites.google.com/site/itswadesh/codehighlighter/shBrushXml.js' type='text/javascript'/> <script type='text/javascript'> SyntaxHighlighter.all() </script>
<pre class="brush: js">
$(document).bind('click', function(e) {
var $clicked = $(e.target);
if (! $clicked.parents().hasClass("staticMenu")){
$(".staticMenu dd ul").hide();
$(".staticMenu dt a").removeClass("selected");
} });
</pre>
Creditos en http://itswadesh.wordpress.com/2012/05/18/how-to-add-syntax-highlighter-to-blogger-or-blogspot-blog/
Resume Texto
function ResumeTexto($text, $maxChars = 20, $splitter = '...'){
$theReturn = $text;
$lastSpace = false;
if (strlen($text) > $maxChars) { $theReturn = substr($text, 0, $maxChars - 1);
if (in_array(substr($text, $maxChars - 1, 1), array(' ', '.', '!', '?'))) {
$theReturn .= substr($text, $maxChars, 1);
} else {
$theReturn = substr($theReturn, 0, $maxChars - strlen($splitter));
$lastSpace = strrpos($theReturn, ' ');
if ($lastSpace !== false) { $theReturn = substr($theReturn, 0, $lastSpace); }
if (in_array(substr($theReturn, -1, 1), array(','))) { $theReturn = substr($theReturn, 0, -1); }
$theReturn .= $splitter;
}
}
return $theReturn;
}
Suscribirse a:
Entradas (Atom)
