Descargar un fichero vía web y enviarlo por email con PHP

2016-06-06 - Categorías: GNU/Linux / PHP
Logo de PHP

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

Composer, gestor de librerías PHP

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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

© 2020 JnjSite.com - MIT license

Sitio hecho con WordPress, diseño y programación del tema por Jnj.