Mostrando entradas con la etiqueta utf8_decode(). Mostrar todas las entradas
Mostrando entradas con la etiqueta utf8_decode(). Mostrar todas las entradas

Como enviar correo electronico con archivo adjunto en PHP

Como enviar un correo electrónico con archivos adjuntos con PHP 📨. 
Puede ser que necesitemos crear una función para enviar un correo electrónico con un archivo adjunto, como respuesta a un formulario o para realizar publicaciones en otros servidores.
Si utilizamos una plataforma que en al que podemos programar y ejecutar PHP debemos asegurarnos que se encuentre instalado sendmail
Si somos el administrador de nuestro propio servidor, podremos instalarlo desde el terminal:
sudo apt-get install sendmail
Si somos invitados en el servidor, lanzaremos un script para comprobar si podemos utilizar la función mail:

<?php
    ini_set( 'display_errors', 1 );
    error_reporting( E_ALL );    //Comprobaremos si ha sido enviado o no
    $from = "TU CORREO ELECTRONICO"; //La dirección de correo desde que la enviamos
    $to = "DESTINATARIO";    //Dirección de correo a la que enviamos el mail
    $subject = "Probando PHP mail";    //Encabezado del correo
    $message = "PHP mail funciona correctamente";    //El mensaje
    $headers = "From:" . $from;    //Cabecera que dejamos tal cual
    mail($to,$subject,$message, $headers);    //Enviamos el correo
    echo "The email message was sent.";    //Confirmamos que el correo ha sido enviado

?>

Si hemos recibido el correo, podremos continuar con la programación de nuestra función.


//Recipiente
$to = 'DESTINATARIO';     //A quien le enviamos nuestro correo

//remitente del correo
//Desde que correo le envamos y quien será el destinatario de la respuesta si lo hubiera
$from = 'NUESTRO CORREO ELECTRONICO';
$fromName = 'UN NOMBRE, O NICK DESCRIPTIVO';    //Quienes somos o nuestra organización

//Asunto del email
//Utilizamos la función utf8_decode() para que nos reconozca las tildes y la ñ, entre otros caracteres
$subject = utf8_decode('ASUNTO DEL CORREO'); 

//Ruta del archivo adjunto
$file = 'DIRECCIÓN GLOBAL DEL ARCHIVO QUE VAMOS A ENVIAR';

//Contenido del Email
//La función htmlentities() nos convertira las tildes ñ y caracteres especiales en etindades HTML
$htmlContent = htmlentities('CONTENIDO DEL CORREO CODIFICADO EN HTML'); 

//Encabezado para información del remitente
$headers = "De: $fromName"." <".$from.">";

//Limite Email
$semi_rand = md5(time()); 
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

//Encabezados para archivo adjunto 
$headers .= "\n MIME-Version: 1.0 \n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; 

//límite multiparte
$message = "--{$mime_boundary}\n" . "Content-Type: text/html; charset=\"UTF-8\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" . $htmlContent . "\n\n"; 

//preparación de archivo
if(!empty($file) > 0){
    if(is_file($file)){
        $message .= "--{$mime_boundary}\n";
        $fp =    @fopen($file,"rb");
        $data =  @fread($fp,filesize($file));
        @fclose($fp);
        $data = chunk_split(base64_encode($data));
        $message .= "Content-Type: application/octet-stream; name=\"".basename($file)."\"\n" . 
        "Content-Description: ".basename($file)."\n" .
        "Content-Disposition: attachment;\n" . " filename=\"".basename($file)."\"; size=".filesize($file).";\n" . 
        "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
    }
}
$message .= "--{$mime_boundary}--";
$returnpath = "-f" . $from;

//Enviar EMail
$mail = @mail($to, $subject, $message, $headers, $returnpath); 

Esta función requiere mucho tiempo de ejecución y no es recomendable para el envio masivo de correos electronicos.