elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [SOLUCIONADO] Como adjuntar archivos a un mail en PHP ??
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO] Como adjuntar archivos a un mail en PHP ??  (Leído 27,052 veces)
Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
[SOLUCIONADO] Como adjuntar archivos a un mail en PHP ??
« en: 15 Noviembre 2008, 04:35 am »

Hola:

Tengo un sistema que envia correos, pero estoy interesado en saber como puedo agregarle un archivo adjunto al correo que deseo enviar ???..

El codigo que utilizo para enviar correos es:

Código
  1. function enviar_correo( $to, $asunto, $modo, $enlace )
  2. {
  3. //titulo del correo
  4. $subject=$asunto;
  5.  
  6. if( $modo==0 ) //enviar correo para comentarios
  7. {
  8. //Cuerpo o contexto del mensaje, la esencia del correo, el todo ;)
  9. $cuerpo= "Han publicado un nuevo comentario en <b>". $_SERVER['HTTP_HOST']. "</b>.<br>Enlace al tema: ";
  10. $cuerpo .= "<b></b><a href=\"". $enlace. "\" target=\"_blank\">". $enlace. "</a></b>";
  11. }
  12. else if( $modo==4 ) //enviar correo de recuperacion de datos del usuario
  13. {
  14. $cuerpo= "<b>Sistema de Recuperacion de Datos.</b>";
  15. $cuerpo .= "<p>Te informamos que hemos obtenido una solicitud de datos de tu cuenta en nuestra pagina <b>". $_SERVER['HTTP_HOST']. "</b>, con motivos de ";
  16. $cuerpo .= "<b>recuperacion de usuario y password</b> dicha solicitud provino de:";
  17. $cuerpo .= "<p>IP: <b>". $_SERVER['REMOTE_ADDR']. "</b><br>";
  18. $cuerpo .= "Nombre Host: <b>";
  19. //obteniendo nombre del host
  20. $info= gethostbyaddr($_SERVER['REMOTE_ADDR']);
  21. if( strcmp( $info, $_SERVER['REMOTE_ADDR']) )
  22. $cuerpo .= $info;
  23. else $cuerpo.= "<b>no se pudo obtener</b>";
  24. unset($info);
  25.  
  26. $cuerpo .= "</b><br>";
  27. $cuerpo .= "Fecha: <b>". date( "d/m/y", time() ). " a las ". date( "g:i a", time() ). "</b>";
  28. $cuerpo .= "<p>Los datos solicitados referentes a tu cuenta son:";
  29.  
  30. $x= explode( "|", $enlace );
  31. $cuerpo .= "<p><b>Username: </b>". $x[0];
  32. $cuerpo .= "<br><b>Password: </b>". $x[1];
  33. unset($x);
  34. }
  35. //y mas modos....
  36.  
  37. //Tag del Robot :: "No contestar al mail"
  38. $cuerpo .= "<p>Este mensaje fue generado automaticmanete por nuestro sistema web, asi que no es necesario contestar este correo.";
  39. $cuerpo .= "<p>". TITULO_WEB. "<br>http://". $_SERVER['HTTP_HOST'];
  40.  
  41. //cabeceras para enviar correo en formato HTML
  42. $headers = "MIME-Version: 1.0\r\n";
  43. $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
  44. $headers .= "From: ". TITULO_WEB. "<robot@sie-group.net>\r\n"; //correo del que lo envia
  45.  
  46. //funcion para enviar correo
  47. if( mail($to, $subject, $cuerpo, $headers) == FALSE )
  48. return 0;
  49. return 1;
  50. }


« Última modificación: 25 Noviembre 2008, 15:44 pm por Diabliyo » En línea

дٳŦ٭
GNU/Linux Infrastructure Specialist
Ex-Staff
*
Desconectado Desconectado

Mensajes: 5.110


Ver Perfil WWW
Re: Como adjuntar archivos a un mail en PHP ??
« Respuesta #1 en: 15 Noviembre 2008, 05:15 am »

Usa phpmailer ;)

http://zainal.wordpress.com/2007/01/10/sending-email-attachments-in-php-using-phpmailer-class/


En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Como adjuntar archivos a un mail en PHP ??
« Respuesta #2 en: 15 Noviembre 2008, 05:26 am »


No deseo usar librerias externas :D !!...

Alguien por favor que sepa como enviar adjuntos sin utilizar librerias externas ??..

bye bye
En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Como adjuntar archivos a un mail en PHP ??
« Respuesta #3 en: 15 Noviembre 2008, 06:22 am »

He ojeado un poco los RFCS's, y lo unico que se me ha ocurrido codificar y que posiblemente funcione es esto:

OJO: Por favor evitense la fatiga de recomendarme software ya programado o librerias, por favor limitense a responder lo que pregunto: "como es posible adjuntar un archivo en un mail enviado por PHP con la funcion mail()" ??

Espero sus criticas a mi code xD... Mas tarde lo testeare, ya que es muy noche y ya me tengo que dormir xD

Código
  1. <?php
  2. if( !strcmp($_GET["id"], "enviar") )
  3. {
  4. //titulo del correo
  5. $subject=$_POST["email_asunto"];
  6.  
  7. //destinatario
  8. $to= $_POST["email_dest"];
  9.  
  10. //contenido o cuerpo
  11. $cuerpo= $_POST["email_contenido"];
  12.  
  13. //cabeceras para enviar correo en formato HTML
  14. $headers="";
  15. $headers= "MIME-Version: 1.0\r\n";
  16.  
  17. //archivos adjuntos
  18. if( strcmp($_FILES["email_file"]["name"], "") ) //si existen archivos adjuntos
  19. {
  20. $archivo= $_FILES["email_file"]["name"]; //nombre del archivo
  21. //guardamos el archivo en el directorio actual/raiz
  22. move_uploaded_file( $_FILES["email_file"]["tmp_name"], $_FILES["email_file"]["name"] );
  23.  
  24. echo "Cabeceras de ADJUNTOS<br>"; //mensaje como aviso que entramos aqui
  25. //generamos cabezeras para el archivo adjunto
  26. $headers .= "Content-type: application/octet-stream\r\n"; //envio directo de datos
  27. //$headers .= "Content-transfer-encoding: base64";
  28. $headers .= "Content-Disposition: attachment; filename=". $archivo. "\r\n";
  29.  
  30. $fp= fopen( $archivo, "r" ); //abrimos archivo
  31. $buf= fread( $fp, filesize($archivo) ); //leemos archivo completamente
  32. fclose($fp); //cerramos apuntador;
  33.  
  34. $headers .= base64_encode($buf); //encriptacion en base64
  35. $headers .= "\r\n"; //retorno de carro y salto de linea
  36. }
  37. else
  38. {
  39. //establecemos cabeceras como texto
  40. echo "Cabeceras de TEXTO<br>";
  41. $headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; //datos tipo texto
  42. }
  43.  
  44. $headers .= "From: ". $_POST["email_src"]. "\r\n"; //correo del que lo envia
  45.  
  46. //funcion para enviar correo
  47. if( mail($to, $subject, $cuerpo, $headers) == FALSE )
  48. echo "Error en el envio...";
  49. else echo "Correo enviado exitosamente...";
  50. }
  51. else
  52. {
  53. echo "<form action=\"mailer_test.php?id=enviar\" method=\"POST\" enctype=\"multipart/form-data\">";
  54. echo "De: <input type=\"text\" name=\"email_src\">";
  55. echo "<br>Para: <input type=\"text\" name=\"email_dest\">";
  56. echo "<br>Asunto: <input type=\"text\" name=\"email_asunto\">";
  57. echo "<p><textarea name=\"email_contenido\"></textarea>";
  58. echo "<p><input type=\"file\" name=\"email_file\">";
  59. echo "<br><input type=\"submit\" value=\"Enviar Mail\">";
  60. echo "</form>";
  61. }
  62. ?>
« Última modificación: 17 Noviembre 2008, 17:32 pm por Diabliyo » En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Como adjuntar archivos a un mail en PHP ??
« Respuesta #4 en: 25 Noviembre 2008, 15:44 pm »

Listo... Ya tengo mi codigo funcionando :D...

Aqui se los dejo...

Código
  1. function enviar_correo( $to, $asunto, $modo, $enlace, $adjunto )
  2. {
  3. $boundary= md5(time()); //valor boundary
  4. $htmlalt_boundary= $boundary. "_htmlalt"; //boundary suplementario
  5. $subject=$asunto; //titulo del correo
  6.  
  7. //cabeceras para enviar correo en formato HTML
  8. $headers = "MIME-Version: 1.0\r\n";
  9. $headers .= "Content-Type: multipart/mixed; boundary=\"". $boundary. "\"\r\n"; //datos mixteados
  10. $headers .= "From: ". TITULO_WEB. "<robot@sie-group.net>\r\n"; //correo del que lo envia
  11.  
  12. //incia cuerpo del mensaje que se visualiza
  13. $cuerpo="--". $boundary. "\r\n";
  14. $cuerpo .= "Content-Type: multipart/alternative; boundary=\"". $htmlalt_boundary. "\"\r\n\r\n"; //contenido alternativo: texto o html
  15. $cuerpo .= "--". $htmlalt_boundary. "\r\n";
  16. //modo de contenido del cuerpo del mensaje a mostrar
  17. //if( !strcmp($modo_envio, "texto") ) //modo texto plano
  18. // {
  19. // $cuerpo .= "Content-Type: text/plain; charset=iso-8859-1\r\n";
  20. // $cuerpo .= "Content-Transfer-Encoding: 8bits\r\n\r\n";
  21. // $cuerpo .= strip_tags(str_replace("<br>", "\n", substr($_POST["email_contenido"], (strpos($_POST["email_contenido"], "<body>")+6)))). "\r\n\r\n";
  22. // }
  23. //else //modo html
  24. // {
  25. $cuerpo .= "Content-Type: text/html; charset=iso-8859-1\r\n";
  26. $cuerpo .= "Content-Transfer-Encoding: 8bits\r\n\r\n";
  27. // }
  28.  
  29. if( $modo==0 ) //enviar correo para comentarios
  30. {
  31. //Cuerpo o contexto del mensaje, la esencia del correo, el todo ;)
  32. $cuerpo .= "Han publicado un nuevo comentario en <b>". $_SERVER['HTTP_HOST']. "</b>.<br>Enlace al tema: ";
  33. $cuerpo .= "<b></b><a href=\"". $enlace. "\" target=\"_blank\">". $enlace. "</a></b>";
  34. }
  35. //y mas modos....
  36. //....
  37.  
  38. $cuerpo .= "\r\n\r\n";
  39. $cuerpo .= "--". $htmlalt_boundary. "--\r\n\r\n"; //fin cuerpo mensaje a mostrar
  40.  
  41. //archivos adjuntos
  42. if( strcmp($adjunto, "0") && strcmp($adjunto, "vacio")  )
  43. {
  44. $archivo= $adjunto;
  45. $buf_type= obtener_extencion_stream_archivo($adjunto); //obtenemos tipo archivo
  46.  
  47. $fp= fopen( "uploads/".$archivo, "r" ); //abrimos archivo
  48. $buf= fread( $fp, filesize("uploads/".$archivo) ); //leemos archivo completamente
  49. fclose($fp); //cerramos apuntador;
  50.  
  51. $cuerpo .= "--". $boundary. "\r\n";
  52. $cuerpo .= "Content-Type: ". $buf_type. "; name=\"". $archivo. "\"\r\n"; //envio directo de datos
  53. $cuerpo .= "Content-Transfer-Encoding: base64\r\n";
  54. $cuerpo .= "Content-Disposition: attachment; filename=\"". $archivo. "\"\r\n\r\n";
  55. $cuerpo .= base64_encode($buf). "\r\n\r\n";
  56. }
  57. $cuerpo .= "--". $boundary. "--\r\n\r\n";
  58.  
  59. //funcion para enviar correo
  60. if( mail($to, $subject, $cuerpo, $headers) == FALSE )
  61. return 0;
  62. return 1;
  63. }
En línea

дٳŦ٭
GNU/Linux Infrastructure Specialist
Ex-Staff
*
Desconectado Desconectado

Mensajes: 5.110


Ver Perfil WWW
Re: [SOLUCIONADO] Como adjuntar archivos a un mail en PHP ??
« Respuesta #5 en: 25 Noviembre 2008, 18:43 pm »

Y como adjuntas varios archivos?  :P no entiendo para que regresas 0 y 1...
En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: [SOLUCIONADO] Como adjuntar archivos a un mail en PHP ??
« Respuesta #6 en: 26 Noviembre 2008, 01:12 am »

Y como adjuntas varios archivos?  :P no entiendo para que regresas 0 y 1...

Lo de retornar 1 o 0 en la funcion enviar_correo() es como metodo de comprobacion para saber si el correo se envio o no :D, debido a que esta funcion la utilizo no solo en una parte del codigo, sino que tambien es utilizada para: notificar comentarios nuevos, notificar noticias nuevas, enviar correos a un grupo en especifico, etc, etc... Asi que en momento cuando esta funcion es utilizada para enviar a un conjunto de bandejas, pues no deseo que el programa pierda el tiempo en enviar varios correos, sabiendo de antemano que al primer intento fallido, es mejor detener el ciclo :D...

Sobre adjuntar varios, no lo he investigado :D...

En realidad para saber como adjuntar un archivo, solamente me auto-envie un correo con un PDF adjunto (utilizando GMAIL), de este modo solo observe el mensaje en su fuente original (ver cabeceras y demas info..) y con eso basto para asumir como se armaba con un adjunto ;)..

Cuando desee enviar mas de 1, solamente me auto-enviare 2 archivo, verificare como se genera el mensaje, y listo :D....

bye bye
En línea

дٳŦ٭
GNU/Linux Infrastructure Specialist
Ex-Staff
*
Desconectado Desconectado

Mensajes: 5.110


Ver Perfil WWW
Re: [SOLUCIONADO] Como adjuntar archivos a un mail en PHP ??
« Respuesta #7 en: 27 Noviembre 2008, 00:32 am »

Pues metelos en un array, es facil...  ;)


bye bye
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
(SOLUCIONADO) Adjuntar DLL dentro del Executable? « 1 2 »
.NET (C#, VB.NET, ASP)
Eleкtro 18 11,265 Último mensaje 23 Noviembre 2012, 21:40 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines