Enviar correo electrónico con archivo adjunto en php
Enviar correo electrónico con archivo adjunto en php. La temática de email es muy usada en los sistemas web. La mayoría de aplicaciones web para optimizar el alcance de su plataforma hace uso de este recurso, ya sea para enviar boletines, avisos e informaciones de la plataforma. Si la aplicación web que desarrollo usa PHP, es muy fácil enviar el Email desde el PHP.
Enviar correo electrónico con archivo adjunto en php
El lenguaje PHP proporciona funciones para enviar correo electrónico desde el sitio Web. Usando la función mail () en PHP, se puede enviar texto, imagen o un archivo adjunto. En este pequeño artículo, veremos cómo enviar correo electrónico con adjunto en php. Nuestro ejemplo de script hace que sea simple enviar texto o correo HTML incluyendo cualquier tipo de archivo como un archivo adjunto usando PHP.
Enviar correo HTML con adjunto
La función Email de php () con algunos encabezados de tipo MIME se utiliza para enviar correo electrónico con archivo adjunto en php.
- Debe especificar el correo electrónico del destinatario ($to).
- El nombre del remitente ($fromName).
- El correo electrónico del remitente ($from).
- El asunto ($Subject), el archivo que se adjuntará ($File)
- El contenido del cuerpo que se enviará ($htmlContent).
La siguiente secuencia de códigos le permite enviar el tipo de mensaje (texto o HTML) con archivo adjunto al correo electrónico deseado.
<?php //Recipiente $to = 'recipiente@miexample.com'; //remitente del correo $from = 'remitente@miexample.com'; $fromName = 'BaulPHP'; //Asunto del email $subject = 'Correo electrónico PHP con datos adjuntos de BaulPHP'; //Ruta del archivo adjunto $file = "mipdf.pdf"; //Contenido del Email $htmlContent = '<h1>Correo electrónico PHP con datos adjuntos de BaulPHP</h1> <p>Este correo electrónico ha enviado desde script PHP con datos adjuntos.</p>'; //Encabezado para información del remitente $headers = "De: $fromName"." <".$from.">"; //Limite Email $semi_rand = md5(time()); $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; //Encabezados para archivo adjunto $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; //límite multiparte $message = "--{$mime_boundary}\n" . "Content-Type: text/html; charset=\"UTF-8\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $htmlContent . "\n\n"; //preparación de archivo if(!empty($file) > 0){ if(is_file($file)){ $message .= "--{$mime_boundary}\n"; $fp = @fopen($file,"rb"); $data = @fread($fp,filesize($file)); @fclose($fp); $data = chunk_split(base64_encode($data)); $message .= "Content-Type: application/octet-stream; name=\"".basename($file)."\"\n" . "Content-Description: ".basename($files[$i])."\n" . "Content-Disposition: attachment;\n" . " filename=\"".basename($file)."\"; size=".filesize($file).";\n" . "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n"; } } $message .= "--{$mime_boundary}--"; $returnpath = "-f" . $from; //Enviar EMail $mail = @mail($to, $subject, $message, $headers, $returnpath); //Estado de envío de correo electrónico echo $mail?"<h1>Correo enviado.</h1>":"<h1>El envío de correo falló.</h1>";
Conclusión
La breve explicación les sacara de un apuro, eso sí utilizando la implementación correcta del script. Aquí hemos proporcionado la forma fácil de enviar correo electrónico con archivo adjunto.
Para este ejemplo no es necesario incluir ninguna librería para enviar correo HTML con adjunto. Usando la función de php () puede enviar fácilmente correo electrónico con adjunto a cualquier destinatario.
hola
yo lo implemente y me marca error.
Warning: Undefined variable $i in C:\xampp\htdocs\EstacionaTec\generadorqr.php on line 66
Warning: String offset cast occurred in C:\xampp\htdocs\EstacionaTec\generadorqr.php on line 66
El envío de correo falló.
si pudieran ayudarme se los agradeceria. Saludos.
Hola Andres
Para enviar archivos adjuntos via email, te recomiendo usr la librería PHPMailer. Aquí te dejo un artículo que hablo sobre el tema.
https://www.baulphp.com/phpmailer-enviar-email-adjunto-archivos-ejemplo-completo/
Saludos
Hola Néstor Tapia, muchas gracias por tomarte el tiempo de escribir ese código, te saludo desde México!!
Muy buen ejemplo gracias
Buen día.
Muy bueno tu codigo amigo pero al momento de yo ponerlo y el archivo ser una imagen que pesa tan solo 1.2MB no se envia el correo y la pagina me muestra el siguiente error: «Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 1720320 bytes)» eso con archivos que pesan arriba de 500kb
Buenas tardes, tengo un sitio creado pero solo puedo enviar imagenes adjuntas.
NEcesito poder adjuntar un archovo PDF fijo (Siempre el mismo)
Podrás ayudarme si te envio el código?
Gracias!
Hola buena noche, necesito ayuda con esto me sale dos errores en la misma línea, reviso el código y efectivamente las variables $files y $i no exiten, quien me ayuda?
Notice: Undefined variable: files in C:\xampp\htdocs\prueba\correo.php on line 43
Notice: Undefined variable: i in C:\xampp\htdocs\prueba\correo.php on line 43
hola, tambien tengo ese problema.
Lo pudiste solucionar?
Saludos, como se haría en el caso de que el archivo se adjunte por medio de un formulario y no sea de una posicion fija??
$file = $_FILES[‘archivo’][‘tmp_name’];
El archivo adjunto tiene un tamaño máximo?
Muchas gracias funcionó a la perfección.
Gracias funciona perfecto
Se puede enviar un correo de un archivo que no esta en pc sino en mi host
Especifica la ruta de tú archivo.
Se puede incorporar formulario para el envió, espero tu respuesta!