Single post

php mail: enviar correo con un fichero adjunto mediante php

Recientemente he tenido que pelearme para hacer que desde un formulario se pudiera subir un fichero y que este se enviara como un fichero adjunto en un correo con el resto de datos del formulario.

Aquí os dejo el código:

 

  • excelso amigo muchas felicidades corriendo al mil porciento gracias por tu gran a porte

  • Donde le añades el archivo al contenido del correo?

  • Como Puedo enviar mas de un archivo adjunto?

  • Gracias por el artículo, de todos los que he buscado no había encontrado ninguno hasta ahora mismo que funcionase!

  • Gracias, pero me llegan 0kb por que puede ser?

    • Andrew te diría que revises el nombre de las variables en lo que se refiere al input type=”file”, en el caso del ejemplo el name es igual a “archivo”.

    • esta es la parte de mi html- input type=”file” id=”file” name=”archivo” size=”30″

    • Esa parte parece estar bien. Necesitaría ver tu código entonces para poder ayudarte mejor.

    • es exactamente lo que has publicado…
      $nombre_archivo = $_FILES[‘archivo’][‘name’];
      $tipo_archivo = $_FILES[‘archivo’][‘type’];
      $tamano_archivo = $_FILES[‘archivo’][‘size’];

      $MESSAGE_BODY = “Nombre: “.$_POST[“nombre”].”
      “;
      $MESSAGE_BODY .= “Email: “.$_POST[“email”].”
      “;
      $MESSAGE_BODY .= “Telefono: “.$_POST[“phone”].”
      “;

      $email = “rrgalvan@gmail.com”;

      $asunto = “Asunto del correo”;
      $mensaje = utf8_decode($MESSAGE_BODY);
      $nombref = $_FILES[“archivo”][“name”];

      $cabeceras = “From: “.$_POST[“email”].”n”;
      $cabeceras .= “Reply-To: “.$_POST[“email”].”n”;
      $cabeceras .= “MIME-version: 1.0n”;
      $cabeceras .= “Content-type: multipart/mixed; “;
      $cabeceras .= “boundary=”Message-Boundary”n”;
      $cabeceras .= “Content-transfer-encoding: 7BITn”;
      $cabeceras .= “X-attachments: $nombref”;

      $body_top = “–Message-Boundaryn”;
      $body_top .= “Content-type: text/html; charset=US-ASCIIn”;
      $body_top .= “Content-transfer-encoding: 7BITn”;
      $body_top .= “Content-description: Mail message bodynn”;

      $cuerpo = $body_top.$mensaje;

      if($tamano_archivo>0)
      {
      //Leo el fichero
      $oFichero = fopen($_FILES[“archivo”][“tmp_name”], ‘r’);
      $sContenido = fread($oFichero, filesize($_FILES[“archivo”][“tmp_name”]));
      $sAdjuntos .= chunk_split(base64_encode($sContenido));
      fclose($oFichero);
      //Adjunto el fichero
      $cuerpo .= “nn–Message-Boundaryn”;
      $cuerpo .= “Content-type: Binary; name=”$nombref”n”;
      $cuerpo .= “Content-Transfer-Encoding: BASE64n”;
      $cuerpo .= “Content-disposition: attachment; filename=”$nombref”nn”;
      $cuerpo .= “$sAdjuntosn”;
      $cuerpo .= “–Message-Boundary–n”;
      }
      //Envío el correo
      mail($email, $asunto, $cuerpo, $cabeceras);

    • Podría ser que te faltase el atribute enctype dentro de la etiqueta form? Para trabajar con ficheros debe incluir esto: enctype=”multipart/form-data”

    • tengo esto: form name=”formulario” id=”contact-form” action=”enviar.php” method=”post” enctype=”multipart/form-data” onsubmit=”return revisar()

    • Buenos días Gawl me podrias pasar tu correo, para poder pasarte los fichero y que me puedas ayudar, gracias.

    • Si te parece déjame tu correo deste este formulario de contacto (es de un juego que tengo en desarrollo) y ya te paso el mío pues prefiero no dejarlo público que luego me bombardean a spam.

      http://winterlords.com/?mod=contacto

      Saludos.

  • Buenos dias Gawl111 me pasa algo pior jeje que andrew , sencillamente no manda el mail

  • este es el form que uso, donde mail2.php es el codigo que publicaste.

    form action=”mail2.php” method=”post” enctype=”multipart/form-data”>
    NombreX:input type=”text” id=”nombre” name=”nombre”>

    mailX:input type=”text” id=”mail” name=”mail”>

    AdjuntarX:input id=”archivo” name=”archivo” type=”file”>

    input type=”submit” value=”Enviar”>
    </form

    Saludos

  • Funciona bien para adjuntar el archivo pero satura el mail, cada vez que actualizo manda un email vacio.

  • Al fin uno que funcione. buen aporte Amigo

  • Amigo excelente, me funciona perfecto, solo me puso problema porque la primera vez que se llamo $sAdjuntos .= se utilizo el . antes del igual, debido a que no se había utilizado esta variable anteriormente me generaba un error, pero simplemente era quitar el punto, muchas gracias.

    • Eric pedraza

      Hola saludos! vi que te va bien con el código, podrías echarme la mano me sale error en las lineas 20, 40 y 42, podrías pasarme el código que tienes? o si te salieron los mismos errores decirme como los correjiste..

  • Matias

    Hola muchas gracias por este gran trabajo, tengo un pequeño problemas, a ver si me puedes ayudar.
    Lo que pasa es que envia el mail con todos los datos, el archivo adjunto no lo pone, es decir, solo pone el contenido en el mail sin el archivo adjunto.
    Muchas gracias,
    Saludos.

    • Matias podría ser que te faltase el atribute enctype dentro de la etiqueta form? Para trabajar con ficheros debe incluir esto: enctype=”multipart/form-data”

  • Hola como envio una copia al usuario que me envio el mail?

    • Sebastián puedes agregar en la cabecera del mail que envíe una copia oculta a la dirección del usuario agregando lo siguiente:

      $cabeceras.= “Bcc: “.$email_del_usuario.”n”;

  • Eric pedraza

    una pregunta según esto hay errores en el código en las lineas 20, 40 y 42. a Alguien le salieron los mismos errores? como lo corrigieron? …Saludos

    • Jesus

      Le faltan los puntos a los lados a las variables.

  • Luciano

    Hola, muy buen aporte! solo quería saber como se resuelve el error de la linea 20

  • Gawl

    Hola y disculpad la demora en poder responder los comentarios. Parece que el plugin que tengo puesto para que formatee la apariencia del código estropeó el mismo en alguna actualización automática.

    Creo que lo he dejado arreglado pero no he podido probarlo… Espero que os funcione de nuevo. Saludos.

  • kenneth

    saludos, podrías por favor ayudarme con una consulta… Resulta que todo funciona perfectamente pero el archivo adjunto lo envía como muchos caracteres por ejemplo: iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAA
    CXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH4AEUESAl++9h+AAAJ3FJREFUeNrtfXu4XVV172+M
    Odfar7PPIyc5eRzyfkAiJhBRwMI1WqG1KFSxWK8VrBcF9VPb+mgtfVxvba36Va+3Yq344CKCCnJb

    KwYVK7Rc/SiI+OCRECCBExLOc5+z32vNOcf9Y625s87OSUhCwrHfZXzf+vbj7L32Wr/fHI85xpjz…..
    que puedo hacer al respecto??

    • Eduardo Alonso Escobar Lozano

      faltaba una entre 0 y n $cabeceras .= “MIME-version: 1.0n”; quedaría así $cabeceras .= “MIME-version: 1.0n”;

  • Pedro

    buenos dias jpgallego. Me sucede como a kenneth, no encrypta bien el archivo y no lo adjunta me salen mogollon de caracteres extraños. Puede que este script ya no funcione? veo que es algo antiguo

  • Yorecargo ceo

    Probando

  • Álvaro Sánchez Cazorla

    Mismo problema que a kenneth y a pedro. Me reconoce todo el archivo, pues sale su nombre y todo, pero a la hora de adjuntar, no lo hace y me coloca una serie de caracteres extraños.

    He revisado, y tengo puesto enctype=”multipart/form-data” dentro de

    Otra cosa, ¿cómo se podría hacer para adjuntar varios archivos sin tener que duplicar el código tantas veces como imágenes para subir haya?

    Gracias!!

    • Carlos O

      tengo el mismo problema 🙁

theme by teslathemes