2 abr. 2010

Enviar un correo con Adjunto en PHP

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/

Author & Editor

Ingeniero Civil en Computación (Universidad de Chile FCFM) y Diplomado en Gestión y Evaluación de Proyectos TI (Universidad de Chile FEN). Actualmente trabajo como Project Manager en varios proyectos y como asesor tecnológico para empresas.

2 Notaciones:

  1. ¿Dónde está "<?php"?

    Alguien tiene que nombrar a cualquiera hacker...
    o se nombra a sí mismo

    ResponderEliminar

Nota: solo los miembros de este blog pueden publicar comentarios.

Labels

0-day (12) 1337day (1) 8.8 (2) Adobe Acrobat (1) Android (2) Anonimato (1) Anonymous (9) BackDoor (2) BackTrack (15) badUSB (1) Base64 (1) Black Hat (7) BlackHat (1) Blackploit (25) Brute Force (3) Bug (106) Bypass Password (1) Bypass Redirect (1) C99 Shell (1) Carding (1) CheatSheet (15) Chilean Way (1) Conference (10) Cryptsetup (1) CSRF (1) DDoS (11) DEF CON (3) DEFCON (7) Diapositivas (1) Diseño Web (1) Distro Linux (27) Documental (2) DoS (2) Drupal (1) DuckDuckGo (1) E-zine (18) Ekoparty (1) Escaneo (4) España (1) Exploit (64) Ezine (1) Facebook (1) Fast-Info (44) FBI (1) Ficheros Binarios (1) Firefox (4) Flash (2) Forense (9) Fuerza Bruta (11) Fuga de Datos (1) GhostShell (1) GNU/Linux (4) Google (2) Guía (1) Hack T00LZ (130) Hack Tips (63) Hacked (6) Hacking (18) Hacking Hardware (5) HashCat (1) Herramientas (121) HighSecCON (1) Humor Geek (13) Infografía (1) Ingeniería Social (5) Inj3ct0r (1) Internet Explorer (3) Java (7) JavaScript (2) Kali (3) KitPloit (1) Leaks (21) Linux OS (79) LulzSec (1) Mac OS (10) Magazine (1) Malaware (3) Malaware Tools (12) Malware (1) Man in the Middle (15) Manuales (3) MD5 CRACK (4) Metasploit (57) MSSQL (1) MySQL (6) MySQL CRACK (1) Nmap (6) Nmap NSE (2) Noticias (193) NTLM CRACK (1) Ofuscar (5) OpenSolaris OS (1) OpenSSL (1) ORACLE (1) OWASP (3) Paper (10) PDF (7) PenTest (14) Perl (2) Phearking (13) Phishing (3) PHP (13) phpMyAdmin (1) PoC (1) Premios Bitacoras (1) Presentaciones (11) PRISM (1) Privacidad (2) Programación (12) Programas Linux (41) Programas Windows (41) Pwned (1) Python (5) Reconocimiento (5) Ruby (2) s (1) Scripts (7) Seguridad (145) Seguridad Web (140) Seguridad Wireless (19) Sensitive Data Exposure (2) SHA1 CRACK (1) Shellshock (1) Slides (1) Spoofing (1) Spyware (1) SQLi (19) SQLi Tools (7) SQLMap (2) SSH (1) Textos (74) Tips (57) Troyanos y Virus (11) Trucos (7) Trucos Win (7) Turiales (56) Tutoriales (18) Twitter (1) Ubuntu (2) Underc0de (1) UnderDOCS (1) Unlock (1) URL Redirection (1) UXSS (1) vBulletin (1) Video (48) Virtualización (2) Web T00LZ (17) Wifislax (1) Wikileaks (1) WikiRebels (1) Windows OS (66) Wireless Tools (13) XSS (16) Youtube (1)

 
biz.