Este es otro pequeño how to para hacer una tarea rutinaria. Simplemente, como indica el título de la entrada, se hace lo que dice, en este caso mediante PHP. Esta tarea se puede programar en línea de comandos para ejecutarse todos los días. Es algo habitualmente necesario, y ya que PHP es un lenguaje de scripting muy sencillo y a la par potente, vamos a ver cómo hacer esto sin complejos sistemas intermedios.
Para este manual se usa Linux, y se ha probado sobre Ubuntu 14.
Descarga del fichero
Para descargarlo, simplemente escribiendo un fichero .php como el siguiente ya podremos hacerlo:
<?php $ficheroDescargado = 'ficheroDescargado.zip'; $rutaDescarga = 'http://urlsitioweb.com/d3d3Lm1heG1vdmlsLmNvbV9leHBvc.zip'; file_put_contents($ficheroDescargado, fopen($rutaDescarga, 'r'));
Guardamos esto en un archivo que se llame por ejemplo descargaYEnviaEmail.php
Instalando librería de Swiftmailer
Antes de nada, explicar que hay dos formas principales para enviar emails mediante PHP. Con sendmail o con el protocolo SMTP. Sendmail es un servidor SMTP, con el que podremos enviar si tenemos localmente, en el servidor desde el que se envía, el servicio de envío de correo configurado correctamente. No voy a tratarlo aquí porque simplemente usando la función mail de PHP se puede hacer. Vamos a seguir con el caso difícil, sino ¿para qué escribir este post? Ya tenemos muy bien documentado oficialmente cómo enviar un email con PHP con mail aquí: http://php.net/manual/es/function.mail.php
Entonces, la solución que planteo es la siguiente. Instalar mediante Composer el Swiftmailer y cualesquiera otras librerías. Y así de la misma forma podremos instalar cuantas librerías PHP necesitemos. A día de hoy Composer está convirtiéndose en casi un estándar para organizar tus librerías. Convirtiéndote, si ere programador PHP, en un desarrollador muy productivo.
Doy por sentado que ya tenemos instalado Composer. Si no me remito al post donde explico cómo hacerlo aquí.
Creamos el fichero composer.json como el siguiente:
{ "require": { "swiftmailer/swiftmailer": "^5.4" } }
A continuación, ejecutamos Composer para que se instale la librería de Swiftmailer:
$ composer install --optimize-autoloader
Ahora tendremos un directorio nuevo llamado vendor/ en donde se habrá instalado la librería y generado el autoloader.
Ahora sí, enviamos el email
Ya podemos enviar el email con el fichero con un código como el siguiente, por ejemplo:
<?php // incluimos el autocargador, que nos dará la librería con Swiftmailer require_once 'vendor/autoload.php'; // descargamos el fichero $ficheroDescargado = 'ficheroDescargado.zip'; $rutaDescarga = 'http://urlsitioweb.com/d3d3Lm1heG1vdmlsLmNvbV9leHBvc.zip'; file_put_contents($ficheroDescargado, fopen($rutaDescarga, 'r')); $nline = "\n"; $mensaje .= 'Adjunto fichero. Un saludo!' . $nline; // creamos la capa de transporte que nos conectará directamente por SMTP // al servidor de correo con el que enviaremos el correo $transport = Swift_SmtpTransport::newInstance('mail.servidor-de-correo.com', 25) ->setUsername('email@servidor-de-correo.com') ->setPassword('contraseña'); // el objeto de Swiftmailer para enviar el email $mailer = Swift_Mailer::newInstance($transport); // creamos el email $email = Swift_Message::newInstance('Asunto del email') ->setFrom(array('email@servidor-de-correo.com' => 'Aquí va el remitente')) ->setTo(array( 'destino@otro-servidor-de-correo.com' => 'Destinatario del email', )) ->setBody($mensaje) ->attach(Swift_Attachment::fromPath('./' . $ficheroDescargado)); // enviamos el email $resultado = $mailer->send($email); echo 'Email enviado, resultado: ' . $resultado;
Esto es todo. En pocas líneas tenemos un sencillo script que podemos ejecutar usando ‘php descargaYEnviaEmail.php’. Ahora ya la imaginación nos dará las aplicaciones que queramos para el script. Puede que necesites diariamente un fichero en tu correo con resultados, enviárselo a alguien puntualmente, etc..
Espero que sirva, un saludo.