Suggest a feature
×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: PHP
Posted by: Claudio Gonzalez
Added: Dec 15, 2017 8:09 PM
Views: 17
Tags: no tags
  1. <?php
  2. /**
  3.  * Description of prueba
  4.  *
  5.  * @author claudio
  6.  */
  7. if($_SERVER['REQUEST_METHOD'] ==='POST'){ //solo ingreso a este bloque de código si el método con el que solicita la página es POST
  8.     $tiempoEspera = 3; //tiempo de espera para recargar la página (aplicado en la lógica de refresh)
  9.     if(!isset($_POST['emaildestino'])){ //validación basica del campo email
  10.         echo 'El email del destinatario es requerido, la página será recargada en '.$tiempoEspera.' segundos.';
  11.         echo '<meta http-equiv="refresh" content="'.$tiempoEspera.'">';
  12.         exit();
  13.     }
  14.     if(!isset($_FILES['archivo'])||!isset($_FILES['archivo']['tmp_name'])||strlen($_FILES['archivo']['tmp_name'])<3){ //validación básica del campo "archivo adjunto"
  15.         echo 'El archivo a ser enviado es requerido, la página será recargada en '.$tiempoEspera.' segundos.';
  16.         echo '<meta http-equiv="refresh" content="'.$tiempoEspera.'">';
  17.         exit();
  18.     }
  19.     $origenNombre      = 'PHPCentral.com'; //nombre que visualiza el receptor del email como "origen" del email (es quien envía el email)
  20.     $origenEmail       = 'noreply@phpcentral.com';//email que visualiza el receptor del email como "origen" del email (es quien envía el email)
  21.     $destinatarioEmail = $_POST['emaildestino']; //destinatario del email, o sea, a quien le estamos enviando el email
  22.     $archivoNombre     = $_FILES['archivo']['name']; //nombre del archivo a ser enviado (sin la ruta, solo el nombre con la extensión, por ejemplo: imagen.jpg)
  23.     $archivo           = $_FILES['archivo']['tmp_name']; //ruta temporal del archivo a ser adjuntado (ubicación fisica del archivo subido en el servidor)
  24.     $archivo           = file_get_contents($archivo); //leeo del origen temporal el archivo y lo guardo como un string en la misma variable (piso la variable $archivo que antes contenía la ruta con el string del archivo)
  25.     $archivo           = chunk_split(base64_encode($archivo)); //codifico el string leido del archivo en base64 y la fragmento segun RFC 2045
  26.     $uid               = md5(uniqid(time())); //frabrico un ID único que usaré para el "boundary"
  27.  
  28.     $asuntoEmail   = 'Archivo adjunto'; //asunto del email
  29. //cuerpo del email:
  30.     $cuerpoMensaje = "Este es el cuerpo del email\r\n";
  31.     $cuerpoMensaje .= "Esta es la segunda línea del cuerpod\r\n";
  32.     $cuerpoMensaje .= "Tercera línea\r\n";
  33.     $cuerpoMensaje .= "Etc...\r\n";
  34. //fin cuerpo del email.
  35. //cabecera del email (forma correcta de codificarla)
  36.     $header        = "From: ".$origenNombre." <".$origenEmail.">\r\n";
  37.     $header        .= "Reply-To: ".$origenEmail."\r\n";
  38.     $header        .= "MIME-Version: 1.0\r\n";
  39.     $header        .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
  40. //armado del mensaje y attachment
  41.     $mensaje       = "--".$uid."\r\n";
  42.     $mensaje       .= "Content-type:text/plain; charset=utf-8\r\n";
  43.     $mensaje       .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
  44.     $mensaje       .= $cuerpoMensaje."\r\n\r\n";
  45.     $mensaje       .= "--".$uid."\r\n";
  46.     $mensaje       .= "Content-Type: application/octet-stream; name=\"".$archivoNombre."\"\r\n";
  47.     $mensaje       .= "Content-Transfer-Encoding: base64\r\n";
  48.     $mensaje       .= "Content-Disposition: attachment; filename=\"".$archivoNombre."\"\r\n\r\n";
  49.     $mensaje       .= $archivo."\r\n\r\n";
  50.     $mensaje       .= "--".$uid."--";
  51. //envio el email y verifico la respuesta de la función "email" (true o false)
  52.     if(mail($destinatarioEmail, $asuntoEmail, $mensaje, $header)){
  53.         echo 'El archivo fue enviado correctamente';
  54.     }else{
  55.         echo 'Error, no se pudo enviar el email';
  56.     }
  57.     echo ', la página será recargada en '.$tiempoEspera.' segundos.';
  58.     echo '<meta http-equiv="refresh" content="'.$tiempoEspera.'">';
  59.     exit();
  60. }
  61. ?>
  62. <!DOCTYPE html>
  63. <html>
  64.     <head>
  65.         <meta charset="UTF-8">
  66.         <title></title>
  67.         <style type="text/css">
  68.             label, input{
  69.                 display: block;
  70.             }
  71.             input{
  72.                 margin-bottom: 20px;
  73.             }
  74.             input[type="email"]{
  75.                 margin-bottom: 20px;
  76.                 padding: 5px;
  77.                 font-size: 16px;
  78.                 width: 270px;
  79.             }
  80.             input[type="submit"]{
  81.                 background-color: #4caf50;
  82.                 border-radius: 5px;
  83.                 padding: 5px 10px;
  84.                 color: #ffffff;
  85.                 cursor: pointer;
  86.                 font-size: 16px;
  87.                 border: none;
  88.             }
  89.             input[type="submit"]:hover{
  90.                 background-color: #2f9233;
  91.             }
  92.         </style>
  93.     </head>
  94.     <body>
  95.         <form method="POST" enctype="multipart/form-data">
  96.             <h2>Enviar archivo adjunto</h2>
  97.             <label>Email destinatario:</label>
  98.             <input type="email" name="emaildestino"/>
  99.             <label>Seleccione un archivo:</label>
  100.             <input type="file" name="archivo" />
  101.             <input type="submit" value="Enviar Archivo"/>
  102.         </form>
  103.     </body>
  104. </html>
  105.