Como dice el título de la entrada, hoy abarcaremos de tema como enviar un correo con un adjunto en PHP, mediante la función mail() y editando los headers del correo.
Para lograr esto necesitamos especificar el tipo MIME multipart/mixed y convertir los adjuntos a Base64.
Primero generamos una semilla única, basado en el MD5 del tiempo actual:
$semilla = md5(date('r', time()));
Luego el destinatario y asunto:
$para = "[email protected]";
$asunto = "Correo con adjunto";
Ahora los headers del correo:
$headers = "From: [email protected]\r\nReply-To: [email protected]";
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$semilla."\"";
Ahora convertimos el adjunto a base 64:
$adjunto= chunk_split(base64_encode(file_get_contents("adjunto.zip")));
Ahora escribimos nuestro correo:
$correo = "
--PHP-mixed-$semilla;
Content-Type: multipart/alternative; boundary='PHP-alt-$semilla'
--PHP-alt-$semilla
Content-Type: text/plain; charset='iso-8859-1'
Content-Transfer-Encoding: 7bit
Nuestro correo en versión de texto plano
--PHP-alt-$semilla
Content-Type: text/html; charset='iso-8859-1'
Content-Transfer-Encoding: 7bit
<h2>Contenido HTML!</h2>
<p>Aqui ponemos nuestra version <b>HTML</b> de nuestro correo.</p>
--PHP-alt-$semilla--
--PHP-mixed-$semilla
Content-Type: application/zip; name=adjunto.zip
Content-Transfer-Encoding: base64
Content-Disposition: attachment
$adjunto
--PHP-mixed-$semilla--";
Como pueden ver en la linea 10 y 19 se especifica que tipo de correo acepta el cliente, ya sea HTML o texto plano, así que definimos 2 mensajes uno sin formato el de la linea 10-18 y uno en formato HTML lineas 10 – 17.
A partir de la linea 20 se especifica el nombre del adjunto, su encodificación y finalmente el archivo que esta definido como la variable $adjunto
Ahora la última parte es estructurar el correo de la siguiente manera:
echo @mail($para, $asunto, $correo, $headers);
Y así es como quedaría el código finalmente:
$semilla = md5(date('r', time()));
$para = "[email protected]";
$asunto = "Correo con adjunto";
$headers = "From: [email protected]\r\nReply-To: [email protected]";
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$semilla."\"";
$adjunto= chunk_split(base64_encode(file_get_contents("adjunto.zip")));
$correo = "
--PHP-mixed-$semilla;
Content-Type: multipart/alternative; boundary='PHP-alt-$semilla'
--PHP-alt-$semilla
Content-Type: text/plain; charset='iso-8859-1'
Content-Transfer-Encoding: 7bit
Nuestro correo en versión de texto plano
--PHP-alt-$semilla
Content-Type: text/html; charset='iso-8859-1'
Content-Transfer-Encoding: 7bit
<h2>Contenido HTML!</h2>
<p>Aqui ponemos nuestra version <b>HTML</b> de nuestro correo.</p>
--PHP-alt-$semilla--
--PHP-mixed-$semilla
Content-Type: application/zip; name=adjunto.zip
Content-Transfer-Encoding: base64
Content-Disposition: attachment
$adjunto
--PHP-mixed-$semilla--";
echo @mail($para, $asunto, $correo, $headers);
Se puede editar fácilmente para integrar con un formulario o algo así, pero de eso hablaremos luego!
Recuerden que el código es de contenido didáctico solamente!
Fuente: http://kernelerror.net/
NO FUNCIONA
ResponderEliminar¿Dónde está "<?php"?
ResponderEliminarAlguien tiene que nombrar a cualquiera hacker...
o se nombra a sí mismo