Enviar emails desde php... y que funcione

Ya que acabo de hablar de mandar correos utilizando Spring voy a retomar el tema del envío de correos desde php. Recordaba que en su día había posteado algo al respecto, y debo pedir disculpas si en su día alguien confió de ese post y no le funcionó. Lo que puse ahí mejoraba ligeramente lo que se solía explicar habitualmente pero en muchos escenarios y en años posteriores eso es raro que funcione. De todas formas ese post era del 2006, casi na.

La mítica función mail de PHP

¿De qué dispone php para mandar emails? Muy fácil, una función llamada mail, tu pones $to, $subject, texto del mensaje y ya funciona, y eso es así porque lo decía el manual y porque lo han dicho miles de personas en internet. Puede que funcione pero en entornos concretos y de churro, y es que los emails no se mandan así como así. Para empezar en windows ya no funcionaba porque se tiraba de sendmail pero eso no es lo único.

Logo de spamassassin

Hace años ya se decía que la mitad de los emails que circulan por la red son basura. Ahora no me quiero ni imaginar. Por ese motivo los ISP y los sufridos sysadmin han ido apretando el culo a los servidores SMTP o dicho de forma más seria han aplicado políticas como el Sender Policy Framework. Los correos dan mucho trabajo, te pueden meter tu servidor en una lista negra, los filtros antispam se pasan de filtrar, etc...

El caso es que, por todas esas restricciones que se van imponiendo, tú no puedes hacer un programa para mandar emails y mandárlos sin más poniendo cualquier dirección de origen. O igual puedes hacerlo a través de un servidor con el relay abierto. La función mail de php debiera refactorizarse a mail_viva_la_virgen() porque eso no tiene ninguna garantía de funcionamiento. Hay que mandar corres de forma legítima. ¿Cómo? usando una cuenta de smtp autentificado. Es decir, para mandar un correo lo haces a través de un servidor smtp pero primero te validas. Entonces ese servidor SÍ, te dejará mandar todos los emails que quieras.

Enviar emails como dios manda

La función mail es un juguete así que olvídate de ella. Por suerte disponemos desde el siglo pasado con el framework PEAR, que provee un montón de librerías para mil cosas distintas. Y entre otras dispone del módulo de email. Elijo PEAR porque es oficial, es estándar y en cualquier sistema lo tendrás disponible. Aquí tienes un ejemplo de función php que manda un email a través de smtp autentificado:

// Esta es la función que manda el correo.
public function sendemail ($to,$subject,$message,$bcc="putin@snowden.ru")
        {

                        ini_set('include_path', '/usr/share/pear');
                        require_once "Mail.php";

                        $from = "TUCUENTA@guardianesdelaortodoxia.com";

                        $host = "ssl://smtp.gmail.com";  // Cada uno verá
                        $port = "465";  // o puede ser 587 (STARTTLS)
                        $username = "TUCUENTA@guardianesdelaortodoxia.com";
                        $password = "PON AQUÍ TU PASSWORD";

                        $headers = array ('From' => $from,
                                        'To' => $to,
                                        'Bcc' => $bcc,
                                        'Subject' => $subject);

                        $smtp = Mail::factory('smtp',
                                        array ('host' => $host,
                                                        'port' => $port,
                                                        'auth' => true,
                                                        'username' => $username,
                                                        'password' => $password));

                        $mail = $smtp->send($to, $headers, $message);

                        if (PEAR::isError($mail)) {
                                //return "

" . $mail->getMessage() . "

"); return false; } else { return true; } }

Al igual que pasaba con Spring, la única dificultad que te queda, aparte de tener el módulo PEAR instalado es dar con la configuración correcta de SMTP. Por cierto ya que he mencionado cosas viejunas, la mítica web de php ya tiene una versión beta...

by Pello Altadill 08/22/2013 11:47:19 - 1023 hits

A tortas con los BroadcastReceiver de Android

Un BroadcastReceiver es un componente de Android que una vez registrado reacciona cuando el sistema envía los Intent para los que estaba preparado. Un caso muy típico es el del Receiver que se registra para que reaccione cada vez que se recibe una llamada de teléfono o un SMS. Ese BroadcastReceiver capta el Intent y en un método onReceive hace lo que tenga que hacer. Se supone que es muy fácil y todo muy bonito. Para Android tienes infinidad de ejemplos colgados por la red. Lo que nunca pued...

by Pello Altadill 08/21/2013 14:22:14 - 1634 hits

More »

Ejemplo de REST con Node.js + express y MongoDB

Alrededor de Node.js existen infinidad de proyectos en plena ebullición, y prueba de ello es que solamente para desarrollar webs existen varios frameworks, algunos basados en el clásico MVC y otros más orientados a servir recursos REST. Ese es el caso de Express, uno de los frameworks más populares disponibles para Node.js. En este post veremos cómo crear un servidor que ofrezca recursos REST a un frontend. Si no te gusta javascript, amijo, jejej, no sé: deja la web y vuelve al Cobol, porque esto v...

by Pello Altadill 08/20/2013 23:15:49 - 1122 hits

More »

Ejemplo de Web Workers, los hilos javascript

Desde que los navegadores tenían soporte para Javascript, su código siempre se ha ejecutado en un único hilo. Los scripts que se desarrollan para el navegador están orientados a eventos y estos se van ejecutando en una especie de cola. Es decir, conforme se van generando los eventos estos van a una cola de tareas y Javascript los va procesando de uno en uno en un bucle. Web Workers, hilos en tu navegador HTML5 trae como novedad los Web Workers, que son procesos de javascript separado...

by Pello Altadill 08/20/2013 12:51:28 - 2290 hits

More »

Services en Android

En Android no solamente hay aplicaciones de ventanas o activities. Hay muchos otros tipos de elementos como por ejemplo los Services. Los servicios nos permiten dejar un programa residente en la memoria y disponible para cualquiera que lo necesite. Los servicios no tienen interfaz gráfico ni nada, son programas pensados para ser utilizados desde las Activities o incluso desde otros servicios. Un service puede crearse para dar servicio -privado- a una sola aplicación o puede hacerse público (a través ...

by Pello Altadill 08/19/2013 22:29:37 - 1784 hits

More »

Creando módulos en Node.js

Lo del servidor web con pocas líneas o refactorizado para que tenga forma de clase va quedando más o menos apañado. Pero en cualquier proyecto que vaya creciendo vamos a necesitar bastantes más cosas y claro, ir metiendo todo el programa en un único fichero, aunque algún programador bajeril pueda decir que es más simple, pues está muy feo. Como en cualquier otro lenguaje y sea el tipo de programación que se...

by Pello Altadill 08/18/2013 22:45:09 - 682 hits

More »

AsyncTask en Android

Los AsyncTask están recomendados para tareas concretas y finitas, como por ejemplo descargar el contenido de una URL. Si lo que necesitas es una especie de Hilo que esté ejecutándose contínuamente tendrías que usar los Thread convencionales (no se detienen ni al pulsar home ni al pulsar Back) o directamente crear un Service de Android. Para crear un AsyncTask debes extender la clase AsyncTask indicándole tres tipos de clase en la declaración, como por ejemplo AsyncTask<String, String, V...

by Pello Altadill 08/18/2013 11:06:08 - 1542 hits

More »

Hilos en Android con Threads java

Toda aplicación de Android tiene al menos un hilo o thread de ejecución. Ese thread es el encargado de la pantalla que tienes ante ti y es imprescindible por la manera en la que Android gestiona los cambios en el interfaz: a través de una cola de mensajes. Es decir, cada vez que aplicamos algún cambio en algún View no se aplica directamente sino que se deja la petición en una cola. Y ese hilo, el UI thread o el hilo principal de la aplicación es quien precisamente se encarga de procesar esa cola...

by Pello Altadill 08/17/2013 10:50:52 - 1482 hits

More »

Servidor web de Node.js refactorizado

Sí, seguro que el primer código que has visto de Node.js es uno de esos milagrosos servidores web hechos con pocas líneas. Olvídese de aparatosos sockets, de punteros o de BufferedStreamsWriters, un módulo, unos callbacks, eliges un puerto y a dar servicio. Bueno, uno trata de ser un good Node.js citizen y este código se entiende y mola, pero a la larga, si lo queremos ir mejorando y añadiendo otras funcionalidades cada vez va a ser más complicado mantenerlo. Lo que propongo en ...

by Pello Altadill 08/16/2013 23:18:31 - 811 hits

More »