Enviado por b@cHo en PHP, Programacion
Enviar un correo con Adjunto mediante PHP
Como dice el título de la entrada, hoy abarcaremos de tema como enviar un correo con un adjunto en PHP, mediante la funcion mail() y editando los headers del correo.
![]()
Para lograr esto necesitamos espeficicar el tipo MIME multipart/mixed y convertir los adjuntos a Base64
Primero generamos una semilla unica, basado en el MD5 del tiempo actual:
$semilla = md5(date('r', time()));
Luego el destinatario y asunto:
$para = "yo@micorreo.com"; $asunto = "Correo con adjunto";
Ahora los headers del correo
$headers = "From: alguien@algo.com\r\nReply-To: alguien@algo.com"; $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, asi 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 asi es como quedaria el codigo finalmente:
$semilla = md5(date('r', time()));
$para = "yo@micorreo.com";
$asunto = "Correo con adjunto";
$headers = "From: alguien@algo.com\r\nReply-To: alguien@algo.com";
$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 asi, pero de eso hablaremos luego!
Recuerden que el código es de contenido didáctico solamente!
Posts Relacionados
- Color diferente a efectos de texto mediante CSS Para entender el proposito de esta entrada basta con ver...
- Enviar correos desde Bash Pues en esta entrada les voy a compartir un pequeño...
- Enviar emails con Visual C++ .NET Despues de tiempo sin escribir (ya se me acabaron las...
- BBCode en PHP Quien haya frecuentado foros, esta familiarizado con el BBcode, pero...
- Creando un CAPTCHA Pués debido a mi entrada anterior, me gustaria dar a...
- Verificador de Permisos PHP Con este script podemos verificar si el CHMOD concuerda con...
- Upload Form en PHP En esta entrada se explicará como hacer un form (ya...



Sin Comentarios
Menciones/Notificaciones