Como enviar correo electronico con archivo adjunto en PHP

Como enviar correo electronico con archivo adjunto en PHP

Como enviar un correo electrónico con archivos adjuntos con 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.