📬 ¿Qué aprenderás?
En este tutorial aprenderás a enviar un email con uno o varios archivos adjuntos usando PHP puro, utilizando el protocolo MIME para incluir los datos del archivo en el correo.
⚙️ Requisitos:
- Servidor con soporte PHP (como XAMPP, WAMP o hosting PHP).
- La función
mail()
habilitada en tu servidor.
🛠️ Código PHP para Enviar un Correo con Archivo Adjunto
<?php
if (isset($_POST['enviar'])) {
$destino = "admin@tusitio.com"; // Cambiar por tu email real
$asunto = "Correo con archivo adjunto";
$mensaje = "Te adjunto el archivo solicitado.";
$archivo = $_FILES['archivo']['tmp_name'];
$nombreArchivo = $_FILES['archivo']['name'];
$contenidoArchivo = chunk_split(base64_encode(file_get_contents($archivo)));
$uid = md5(uniqid(time()));
$header = "From: webmaster@tusitio.com\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"" . $uid . "\"\r\n\r\n";
$header .= "This is a multi-part message in MIME format.\r\n";
$header .= "--" . $uid . "\r\n";
$header .= "Content-type:text/plain; charset=UTF-8\r\n";
$header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$header .= $mensaje . "\r\n\r\n";
$header .= "--" . $uid . "\r\n";
$header .= "Content-Type: application/octet-stream; name=\"" . $nombreArchivo . "\"\r\n";
$header .= "Content-Transfer-Encoding: base64\r\n";
$header .= "Content-Disposition: attachment; filename=\"" . $nombreArchivo . "\"\r\n\r\n";
$header .= $contenidoArchivo . "\r\n\r\n";
$header .= "--" . $uid . "--";
if (mail($destino, $asunto, "", $header)) {
echo "<p>Correo enviado correctamente.</p>";
} else {
echo "<p>Error al enviar el correo.</p>";
}
}
?>
🧾 Formulario HTML para Seleccionar el Archivo
<form action="" method="POST" enctype="multipart/form-data">
<label>Selecciona un archivo para enviar:</label><br>
<input type="file" name="archivo" required><br><br>
<input type="submit" name="enviar" value="Enviar Correo">
</form>
🔎 Notas importantes:
- Asegúrate que tu servidor permite el envío de correos (
mail()
debe estar habilitada). - Algunos servidores locales requieren configuración especial para
sendmail
. - Para un envío más profesional o con varios adjuntos, puedes considerar librerías como PHPMailer.