¿Cómo adjuntar un archivo con un formulario de comentarios en PHP?

El formulario de comentarios se utiliza para obtener la revisión del usuario a través de los servicios de correo. El correo es una de las utilidades del lado del servidor que se requiere en la mayoría de los servidores web en la actualidad. En PHP, mail() es la función incorporada que se usa para enviar correos electrónicos desde scripts de PHP, ya sea en forma de texto sin formato o HTML formateado. También puede escribir un script para adjuntar cualquier archivo a su correo desde el artículo Enviar archivo adjunto con correo electrónico .

La función de correo PHP tiene la siguiente sintaxis básica:

<?php
mail($to_email_address, $subject, $message, [$headers], [$parameters]);
?>

Adjuntar un archivo en el formulario de comentarios: para enviar un correo electrónico con un archivo adjunto como comentario, debemos usar el tipo MIME multiparte/mixto (establezca el encabezado de tipo de contenido en multiparte/mixto) que especifica que los tipos mixtos se incluirán en el correo electrónico. Además, queremos utilizar un tipo MIME de varias partes/alternativo para enviar versiones del correo electrónico tanto en texto sin formato como en HTML. Las secciones de texto y archivos adjuntos se pueden especificar dentro de los límites. Un límite comienza con dos guiones seguidos de un número único que no puede aparecer en la parte del mensaje del correo electrónico. Se usa una función de PHP md5() para crear un número hexadecimal de 32 dígitos para crear un número único. Un límite final que indica la sección final del correo electrónico también debe terminar con dos guiones.

Para incluir un archivo adjunto a nuestro mensaje, leemos los datos del archivo especificado en una string, los codificamos con la función base64_encode() para una transmisión más segura, los dividimos en partes más pequeñas con la función chunk_split() para asegurarnos de que coincida con el MIME especificaciones y luego incluirlo como un archivo adjunto.

Ejemplo:

<?php
$Msg = '';
  
if(isset($_FILES["file"]["name"]) && isset($_POST['email'])) {
    $toemail = $_POST['email'];
    $name = $_POST['name'];
    $subject = $_POST['subject'];
    $message = $_POST['message'];
    $fromemail =  "hosth914@gmail.com";
    $msg = '<h2 style="color:green;">GeeksforGeeks</h2>
                    <p><b>Hello, '.$name.'</b></p></br>
                    <p><b>Message:</b>'.$message.'</p>';
                      
    $msg = "Please find the attachment<br/>Thank You.";
    $s_m = md5(uniqid(time()));
    $headers = "From: ".$fromemail;
    $mime_boundary = "==Multipart_Boundary_x{$s_m}x";
    
    $headers .= "\nMIME-Version: 1.0\n" .
    "Content-Type: multipart/mixed;\n" .
    " boundary=\"{$mime_boundary}\"";
    
    if($_FILES["file"]["name"]!= ""){  
        $file_name = $_FILES["file"]["name"];  
   
        $content = chunk_split(base64_encode(
            file_get_contents($_FILES["file"]["tmp_name"])));  
    
        $msg .= "This is a multi-part message in MIME format.\n\n" .
            "--{$mime_boundary}\n" .
            "Content-Type:text/html; charset=\"iso-8859-1\"\n" .
            "Content-Transfer-Encoding: 7bit\n\n" .
            $msg .= "\n\n";
    
        $msg .= "--{$mime_boundary}\n" .
            "Content-Type: application/octet-stream;\n" .
            " name=\"{$file_name}\"\n" .
      
            // "Content-Disposition: attachment;\n" .
            // " filename=\"{$fileatt_name}\"\n" .
            "Content-Transfer-Encoding: base64\n\n" .
            $content  .= "\n\n" .
            "--{$mime_boundary}--\n";
    }
   
    if(mail($toemail, $subject, $msg, $headers)){
        $Msg= "Email send successfully with attachment";
    }else{
        $Msg= "Email Not sent";
    }
}
?>
   
<!DOCTYPE html>
<html>
   
<head>
    <title>Sending file attachment with email</title>
    <meta charset="utf-8">
    <meta name="viewport"
          content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href=
"https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
    <script src=
"https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js">
    </script>
    <script src=
"https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js">
    </script>
    <script src=
"https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js">
    </script>
    <style>
        form {
            box-shadow: 10px 10px 40px grey;
            padding: 50px;
            margin: 20px;
        }
    </style>
</head>
   
<body>
    <?php if(!empty($Msg)){ ?>
        <p class="text-success text-center">
            <?php echo $Msg; ?>
        </p>
    <?php } ?>
      
    <form method="post" action=""
            enctype="multipart/form-data"
            class="w-75 mx-auto">
        <h1 class="text-success text-center">
            GeeksforGeeks
        </h1>
          
        <h5 class="text-success text-center">
            Sending email with a
            file attachment
        </h5>
          
        <div class="form-group">
            <input type="text" name="name"
                class="form-control"
                placeholder="Name" required="">
        </div>
          
        <div class="form-group">
            <input type="email" name="email"
                class="form-control"
                placeholder="Email address" required="">
        </div>
          
        <div class="form-group">
            <input type="text" name="subject"
                class="form-control"
                placeholder="Subject" required="">
        </div>
          
        <div class="form-group">
            <textarea name="message"
                class="form-control"
                placeholder="Write your message here..."
                required="">
            </textarea>
        </div>
          
        <div class="form-group">
            <input type="file" name="file">
        </div>
          
        <div class="submit text-center">
            <input type="submit" name="submit"
                class="btn btn-success "
                value="SEND MESSAGE">
        </div>
    </form>
</body>
   
</html>

Producción:

  • Interfaz gráfica de usuario del formulario de comentarios:
  • Después de recibir el correo:

Usando mail() en localhost en XAMPP: El envío de correo desde localhost se puede hacer usando el paquete Sendmail, el paquete Sendmail está integrado en XAMPP.

  • Paso 1: En C:\xampp\php\php.ini busque extension=php_openssl.dll y elimine el punto y coma del principio de esa línea para que SSL funcione para gmail para localhost.
  • Paso 2: en el archivo php.ini , busque [función de correo] y cambie
    SMTP=smtp.gmail.com
    smtp_port=587
    sendmail_from = gmail-id@gmail.com
    sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"
  • Paso 3: En C:\xampp\sendmail\sendmail.ini. Reemplace todo el código existente en sendmail.ini con el siguiente código:
    [sendmail]
    smtp_server=smtp.gmail.com
    smtp_port=587
    error_logfile=error.log
    debug_logfile=debug.log
    auth_username=gmail-id@gmail.com
    auth_password=gmail-password
    force_sender=gmail-id@gmail.com
  • Paso 4: Cambie gmail-id@gmail.com y gmail-password según sea necesario. Reinicie el servidor en el panel de control de XAMMP para que los cambios surtan efecto.
  • Paso 5: crea un archivo php y envía el correo.

Nota: Sin embargo, la función PHP mail() es parte del núcleo de PHP, pero necesita configurar un servidor de correo en su máquina para que realmente funcione.

Publicación traducida automáticamente

Artículo escrito por g_ragini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *