Inicio > PHP > Enviar mails con adjuntos

ENVIAR MAILS CON ADJUNTOS

24/11/2017PHP

 

En los diversos proyectos que he participado he tenido que mandar emails para notificar al usuario cualquier asunto relacionado con la web, como el alta, envío de texto informativo. Pero nunca tuve la necesidad de mandar emails con ficheros adjuntos. Así que me puse a investigar por internet como hacerlo.
La verdad es que es bastante sencillo. Os pongo un ejemplo para que veáis como se hace.

function addFile($fichero,$ruta,$mime){
$sAdjuntos .= "\n\n----_Separador-de-mensajes_--\n";
$sAdjuntos .= "Content-type: ".$mime.";name=\"".$fichero."\"\n";
$sAdjuntos .= "Content-Transfer-Encoding: BASE64\n";
$sAdjuntos .= "Content-disposition:
attachment;filename=\"".$fichero."\"\n\n";
$fichero = $ruta.$fichero;
$oFichero = fopen($fichero, 'r');
$sContenido = fread($oFichero, filesize($fichero));
$sAdjuntos .= chunk_split(base64_en
($sContenido));
fclose($oFichero);
return $sAdjuntos;
}
$bHayFicheros = 0;
$sCabeceraTexto = '';
$sAdjuntos = '';
$sDe = 'email remitente';
if ($sDe)$sCabeceras = 'From:'.$sDe."\n";
else $sCabeceras = '';
$sCabeceras .= "MIME-version: 1.0\n";
$bHayFicheros = 1;
$sCabeceras .= "Content-type: multipart/mixed;";
$sCabeceras .= "boundary=\"--_Separador-de-mensajes_--\"\n";
$sCabeceraTexto = "----_Separador-de-mensajes_--\n";
$sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1\n";
$sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n";
$sTexto = $sCabeceraTexto.'texto del email';
$sAdjuntos = '';
//Esta funcion puede ser llamada tantas veces como adjuntos se necesiten agregar al destinatario
$sAdjuntos .= addFile('nombre_fichero.extension','ruta','mime');
$sTexto .= $sAdjuntos.\"\n\n----_Separador-de-mensajes_----\n";
return(mail('email destino', 'asunto', $sTexto, $sCabeceras));

Después de este ejemplo sería fácil enlazarlo con un formulario y subir los ficheros que se envían como adjunto, añadir los destinatarios del email y el texto.