De hecho la otra forma es más complicada ya que tienes que codificar el archivo usando Base64 de preferencia, luego crear las cabeceras MIME y codificar tu correo, aquí tienes un ejemplo de como hacerlo con un archivo:
Código php:
Ver original<?php
// Para quien es el email
// Subject
$subject = 'Ejemplo de Email con Attachment';
// Este es el boundary para separar los correos, debe de ser aleatorio
// Definir las cabeceras basicas separadas por \r\n
// Agregar que es un mail mixto y el separador
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
// Lees y agregas el archivo que hayas subido
// Crear el correo con las cabeceras
?>
--PHP-mixed-<?php echo $random_hash; ?>
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>"
--PHP-alt-<?php echo $random_hash; ?>
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Texto sin HTML (cuerpo del mensaje)
--PHP-alt-<?php echo $random_hash; ?>
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
<h1>Aqui va el mail pero con HTML</h1>
--PHP-alt-<?php echo $random_hash; ?>--
--PHP-mixed-<?php echo $random_hash; ?>
Content-Type: application/zip; name="archivo.ext"
Content-Transfer-Encoding: base64
Content-Disposition: attachment
<?php echo $attachment; ?>
--PHP-mixed-<?php echo $random_hash; ?>--
<?php
// Obtienes el mail usando ob_get_clean();
// Se envia el correo
if (mail( $to, $subject, $message, $headers )) { echo "Envio exitoso";
} else {
echo "Error al enviar el Mail";
}
Como ves el codificar el correo es más complicado a si usas PHPMailer que tiene métodos para hacerlo de forma más sencilla.
Saludos.