Ya llevo como algo más de un mes en la práctica en DelPuerto y estoy alegre de ello porque he aprendido hartas cosas que no sabía (que cuando la termine, las mencionaré más adelante). Pero como un pequeño adelanto, les cuento algo que me agradó hacer y desconozco que alguien más haya tenido esta ocurrencia: Crear mi propio sistema de mail masivo.
Ahora: ¿de dónde saqué la idea? ¿cómo nació? Simple: En la práctica necesitan un sistema de e-mail masivo para quien se suscriba a la lista y reciba contenidos, ojalá en HTML. Tras horas intensas de programación y buscando APIs y servicios que me pudieran ayudar con tal labor, he logrado construir dicha herramienta. Lo que usé para todo esto fue:
- PHPMailer, para el envío de mails. Mejor y más seguro que la función mail que ya provee PHP. Además, lo admito: me encanta la orientación a objetos en PHP, aunque todavía tengo mucho que aprender de ahí. Y ese paradigma se usa en tal framework.
- CKEditor, un editor HTML/WYSIWYG (What You See Is What You Get, o sea, lo que ves es lo tienes). Como soy el único que cacha de HTML en la práctica, tengo que crear un sistema que sea usable para quien quiera y que se familiarice rápidamente.
- PHPMyAdmin: es la manera más viable de acceder a la base de datos de mi pega y administrarla. Aunque localmente igual la tengo, en el hosting que usan no tengo otra opción y no sé habilitar el ssh desde el cPanel :C
- El uso intensivo de expresiones regulares. Hay tantas cosas que parsear, aparte, si uso PHPMailer, no es llegar y adjuntar contenido multimedia, como imágenes.
- Los alert de Javascript: Me da flojera mostrar otro método de notificación xD pero quizás lo cambie.
- Un mail que sea como el remitente de estos mails masivos. Como tengo acceso al hosting, pude crearlo y obtener la información necesaria para que PHPMailer se autentifique al SMTP.
- Un formulario disponible para quien quiera llenar sus datos y se suscriba al mail. Por defecto, éste está desactivado.
- Un panel de control, con un usuario y contraseña para poder acceder. Claramente, hice uso de las sesiones en PHP 😉
- El administrador tiene las opciones de habilitar y deshabilitar mails. UPDATE: También puede borrarlos de la base de datos.
- El administrador tiene a su disposición el formulario para enviar los mails masivos. Sólo se consideran los activados. El editor del cuerpo del mail usa CKEditor para mayor facilidad al escribir y darle formato, por ser WYSIWYG. También tiene la opción de conservar o cambiar la firma si así lo desea, y el editor para la misma también es WYSIWYG.
- En el cuerpo del mail también puede insertar imágenes. Creo que no necesitan más que eso, aparte del texto, claro.
- Valida todos los campos necesarios del mismo.
- Desloguearse. Tan básico como el iniciar sesión 😛
- UPDATE: Ahora el sistema puede mandarle un mail al suscriptor para que active y confirme su correo.
- El uso de jQuery. Quizás quieran efectos bonitos 😀
- Adjuntar imágenes. Por el momento, ésas sólo se insertan desde una URL.
- El diseño. Para qué andar con cosas: muy funcional será, pero es muy feo (es el común del informático programar cosas que sirven pero que a la vez son demasiado sencillos o muy feitos 😛 ) Por eso menos mal que hay un diseñador gráfico por estos lares :3
- Otras cosas que iré descubriendo en el camino 😀
$mensaje = preg_replace(‘/\/i’,”,$_POST[‘mensaje’]);
//Patrones para el código de imágenes y el obtener el nombre de archivo de imagen
$patron_img = ‘/[0-9a-zA-Z]+[.](jpg|JPG|jpeg|gif|png)/’;
$regex = ‘/<img[^>]+>/i’;
//Creamos el array para obtener las URLs del mensaje
preg_match_all($regex,$mensaje,$links,PREG_SET_ORDER);
//Proceso de creación del array que guarda las URLs de imágenes del mensaje
$links_string = ”;
foreach($links as $link){
$links_string .= $link[0].’|’;
}
$array_links = explode(‘|’,$links_string,-1);
$img_url = array(); //Inicializando el arreglo de las URLs
$p_img_regex = ‘/(alt|title|src)=(“[^”]*”)/i’; //Por si tiene esas propiedades
for($i = 0; $i < count($array_links); $i++) {
$link_def = array();
preg_match($p_img_regex,$array_links[$i],$link_def);
$img_url[] = $link_def[2];
}
//Ahora empieza el proceso para guardar los nombres de los archivos desde las URLs
$img_file = array(); //Inicializando el arreglo para los archivos
for($i = 0; $i < count($img_url); $i++) {
$imagenes = array();
preg_match_all($patron_img,$img_url[$i],$imagenes,PREG_SET_ORDER);
$img_file[] = $imagenes[0];
}
$cadena = ”;
foreach($img_file as $img){
$cadena .= $img[0].’|’;
}
//Creando el arreglo para los nombres de los archivos
$img_name = explode(‘|’,$cadena,-1);
$ids = array();
//Para eliminar los sufijos del archivo con preg_split
$s_img = ‘/.(png|gif|jpeg|jpg|JPG)$/’;
for($i = 0; $i < count($img_name); $i++) {
$elemento = preg_split($s_img,$img_name[$i],-1);
$id_img = $elemento[0].’img’;
$ids[] = ‘cid:’.$id_img;
$cid = ‘cid:’.$id_img;
//Así es como en PHPMailer se adjuntan las imágenes
$mail->AddEmbeddedImage($img_name[$i],$cid,$img_name[$i]);
}
//Creando el nuevo mensaje. $img_url e $ids son arreglos.
$nuevo_mensaje = str_replace($img_url,$ids,$mensaje);
//El cuerpo con una firma previamente definida
$mail->Body = $nuevo_mensaje.'<br> — <br>’.$firma;
//Definamos que sea HTML
$mail->IsHTML(true);
//Incluyendo código para conectarse a la base de datos
include(“../conectar.php”);
$tabla = “mailmasivo”;
$selecciona = mysql_select_db($bd,$conecta) or die (“No se puede seleccionar la base de datos $bd”);
//Seleccionando las tablas email y activado
$consulta = “select email,activado from $tabla”;
$q = mysql_query($consulta) or die (“No se pudo realizar la consulta”);
//La parte del mail masivo
while($mailses = mysql_fetch_row($q)){
if($mailses[1] == 1)
$mail->AddAddress($mailses[0]);
}
// Aquí más challa para mandar mensaje y/o algo más
[/cc]Lo demás se les tendrá que ocurrir a ustedes, porque por ahora, esto es top secret 😉
Y claro, una muestra.
Espero que les sea de utilidad. Bienvenidos los comentarios, y si toman algo de acá, no olviden darme créditos 😀
Jorgicio
Hola Jorcicio,
Ya usaste jquery para animar lo que envias por emailing? no te ha dado problemas al tratarse de scripts que te lo interprete como codigo malicioso el explorador o el antivirus?
Espero tus comentarios, gracias de antemano!
Hola 😀
Al decir verdad, ya comprobé que con demasiados mails, sí da problemas, eso ya depende de las políticas del hosting que hayas contratado y que permite estas cosas, porque suelen considerarlas SPAM. Así que fíjate bien en esos detalles antes de probar 🙂
Y respecto a animar lo que envío… dudo que se pueda, hasta el momento, no he visto animaciones en un correo :S
Gracias por pasarte y espero que te haya servido de ayuda 😀
Saludos
has podido enviar si problemas contenido animado con jquery? no impide el firewall del explorador o del antivirus la visualizacion o descarga?
Hola, se ve interesante el tema pero tengo una duda como manejas el spam?