Enviar un correo electrónico es una actividad muy común en un navegador web. Por ejemplo, enviar un correo electrónico cuando un nuevo usuario se une a una red, enviar un boletín informativo, enviar un correo de saludo o enviar una factura. Podemos usar la función mail() incorporada para enviar un correo electrónico mediante programación. Esta función necesita tres argumentos obligatorios que contengan la información sobre el destinatario, el asunto del mensaje y el cuerpo del mensaje. Junto con estos tres argumentos obligatorios, hay dos argumentos más que son opcionales. Uno de ellos es el encabezado y el otro son los parámetros.
Ya hemos discutido el envío de correos electrónicos basados en texto en PHP en nuestro artículo anterior . En este artículo, veremos cómo podemos enviar un correo electrónico con archivos adjuntos utilizando la función Mime-Versionmail().
Cuando se llama a la función mail(), PHP intentará enviar el correo inmediatamente al destinatario, luego devolverá verdadero al entregar el correo con éxito y falso si ocurre un error.
Sintaxis :
bool mail( $to, $subject, $message, $headers, $parameters );
Aquí está la descripción de cada parámetro.
Nombre | Descripción | Requerido/Opcional | Escribe |
---|---|---|---|
a | Contiene el destinatario o destinatarios del correo electrónico en particular. | Requerido | Cuerda |
tema | Esto contiene el asunto del correo electrónico. Este parámetro no puede contener caracteres de nueva línea | Requerido | Cuerda |
mensaje | Contiene el mensaje a enviar. Cada línea debe separarse con un LF (\n). Las líneas no deben exceder los 70 caracteres (Usaremos la función wordwrap() para lograr esto). | Requerido | Cuerda |
encabezados | Este contiene encabezados adicionales, como De, CC, Versión Mime y CCO. | Opcional | Cuerda |
parámetros | Especifica un parámetro adicional para el programa de envío de correo. | Opcional | Cuerda |
Cuando enviamos correo a través de PHP, todo el contenido del mensaje se tratará solo como texto simple. Si colocamos cualquier etiqueta HTML dentro del cuerpo del mensaje, no se formateará como sintaxis HTML. La etiqueta HTML se mostrará como texto simple.
Para formatear cualquier etiqueta HTML de acuerdo con la sintaxis HTML, podemos especificar la versión MIME (Extensión de correo de Internet multipropósito), el tipo de contenido y el juego de caracteres del cuerpo del mensaje.
Para enviar un archivo adjunto junto con el correo electrónico, debemos establecer el tipo de contenido como mixto/multiparte y debemos definir las secciones de texto y archivo adjunto dentro de un límite .
Enfoque: asegúrese de tener un servidor XAMPP o un servidor WAMP instalado en su máquina. En este artículo, utilizaremos el servidor WAMP.
Siga los pasos que se indican a continuación:
Cree un formulario HTML : A continuación se muestra el código fuente HTML para el formulario HTML . En la etiqueta HTML <form> , estamos usando “ enctype=’multipart/form-data ”, que es un tipo de codificación que permite enviar archivos a través de un método POST . Sin esta codificación, los archivos no se pueden enviar a través del método POST. Debemos usar este enctype si desea permitir que los usuarios carguen un archivo a través de un formulario.
HTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css"> <title>Send Attachment With Email</title> </head> <body> <div style="display:flex; justify-content: center; margin-top:10%;"> <form enctype="multipart/form-data" method="POST" action="" style="width: 500px;"> <div class="form-group"> <input class="form-control" type="text" name="sender_name" placeholder="Your Name" required/> </div> <div class="form-group"> <input class="form-control" type="email" name="sender_email" placeholder="Recipient's Email Address" required/> </div> <div class="form-group"> <input class="form-control" type="text" name="subject" placeholder="Subject"/> </div> <div class="form-group"> <textarea class="form-control" name="message" placeholder="Message"></textarea> </div> <div class="form-group"> <input class="form-control" type="file" name="attachment" placeholder="Attachment" required/> </div> <div class="form-group"> <input class="btn btn-primary" type="submit" name="button" value="Submit" /> </div> </form> </div> </body> </html>
Script PHP para manejar los datos del formulario :
PHP
<?php if(isset($_POST['button']) && isset($_FILES['attachment'])) { $from_email = 'sender@abc.com'; //from mail, sender email address $recipient_email = 'recipient@xyz.com'; //recipient email address //Load POST data from HTML form $sender_name = $_POST["sender_name"]; //sender name $reply_to_email = $_POST["sender_email"]; //sender email, it will be used in "reply-to" header $subject = $_POST["subject"]; //subject for the email $message = $_POST["message"]; //body of the email /*Always remember to validate the form fields like this if(strlen($sender_name)<1) { die('Name is too short or empty!'); } */ //Get uploaded file data using $_FILES array $tmp_name = $_FILES['attachment']['tmp_name']; // get the temporary file name of the file on the server $name = $_FILES['attachment']['name']; // get the name of the file $size = $_FILES['attachment']['size']; // get size of the file for size validation $type = $_FILES['attachment']['type']; // get type of the file $error = $_FILES['attachment']['error']; // get the error (if any) //validate form field for attaching the file if($error > 0) { die('Upload error or No files uploaded'); } //read from the uploaded file & base64_encode content $handle = fopen($tmp_name, "r"); // set the file handle only for reading the file $content = fread($handle, $size); // reading the file fclose($handle); // close upon completion $encoded_content = chunk_split(base64_encode($content)); $boundary = md5("random"); // define boundary with a md5 hashed value //header $headers = "MIME-Version: 1.0\r\n"; // Defining the MIME version $headers .= "From:".$from_email."\r\n"; // Sender Email $headers .= "Reply-To: ".$reply_to_email."\r\n"; // Email address to reach back $headers .= "Content-Type: multipart/mixed;"; // Defining Content-Type $headers .= "boundary = $boundary\r\n"; //Defining the Boundary //plain text $body = "--$boundary\r\n"; $body .= "Content-Type: text/plain; charset=ISO-8859-1\r\n"; $body .= "Content-Transfer-Encoding: base64\r\n\r\n"; $body .= chunk_split(base64_encode($message)); //attachment $body .= "--$boundary\r\n"; $body .="Content-Type: $type; name=".$name."\r\n"; $body .="Content-Disposition: attachment; filename=".$name."\r\n"; $body .="Content-Transfer-Encoding: base64\r\n"; $body .="X-Attachment-Id: ".rand(1000, 99999)."\r\n\r\n"; $body .= $encoded_content; // Attaching the encoded file with email $sentMailResult = mail($recipient_email, $subject, $body, $headers); if($sentMailResult ) { echo "<h3>File Sent Successfully.<h3>"; // unlink($name); // delete the file after attachment sent. } else { die("Sorry but the email could not be sent. Please go back and try again!"); } } ?>
Código completo: El código final para enviar archivos adjuntos con correos electrónicos es el siguiente:
PHP
<?php if(isset($_POST['button']) && isset($_FILES['attachment'])) { $from_email = 'sender@abc.com'; //from mail, sender email address $recipient_email = 'recipient@xyz.com'; //recipient email address //Load POST data from HTML form $sender_name = $_POST["sender_name"]; //sender name $reply_to_email = $_POST["sender_email"]; //sender email, it will be used in "reply-to" header $subject = $_POST["subject"]; //subject for the email $message = $_POST["message"]; //body of the email /*Always remember to validate the form fields like this if(strlen($sender_name)<1) { die('Name is too short or empty!'); } */ //Get uploaded file data using $_FILES array $tmp_name = $_FILES['attachment']['tmp_name']; // get the temporary file name of the file on the server $name = $_FILES['attachment']['name']; // get the name of the file $size = $_FILES['attachment']['size']; // get size of the file for size validation $type = $_FILES['attachment']['type']; // get type of the file $error = $_FILES['attachment']['error']; // get the error (if any) //validate form field for attaching the file if($error > 0) { die('Upload error or No files uploaded'); } //read from the uploaded file & base64_encode content $handle = fopen($tmp_name, "r"); // set the file handle only for reading the file $content = fread($handle, $size); // reading the file fclose($handle); // close upon completion $encoded_content = chunk_split(base64_encode($content)); $boundary = md5("random"); // define boundary with a md5 hashed value //header $headers = "MIME-Version: 1.0\r\n"; // Defining the MIME version $headers .= "From:".$from_email."\r\n"; // Sender Email $headers .= "Reply-To: ".$reply_to_email."\r\n"; // Email address to reach back $headers .= "Content-Type: multipart/mixed;"; // Defining Content-Type $headers .= "boundary = $boundary\r\n"; //Defining the Boundary //plain text $body = "--$boundary\r\n"; $body .= "Content-Type: text/plain; charset=ISO-8859-1\r\n"; $body .= "Content-Transfer-Encoding: base64\r\n\r\n"; $body .= chunk_split(base64_encode($message)); //attachment $body .= "--$boundary\r\n"; $body .="Content-Type: $type; name=".$name."\r\n"; $body .="Content-Disposition: attachment; filename=".$name."\r\n"; $body .="Content-Transfer-Encoding: base64\r\n"; $body .="X-Attachment-Id: ".rand(1000, 99999)."\r\n\r\n"; $body .= $encoded_content; // Attaching the encoded file with email $sentMailResult = mail($recipient_email, $subject, $body, $headers); if($sentMailResult ){ echo "<h3>File Sent Successfully.<h3>"; // unlink($name); // delete the file after attachment sent. } else{ die("Sorry but the email could not be sent. Please go back and try again!"); } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css"> <title>Send Attachment With Email</title> </head> <body> <div style="display:flex; justify-content: center; margin-top:10%;"> <form enctype="multipart/form-data" method="POST" action="" style="width: 500px;"> <div class="form-group"> <input class="form-control" type="text" name="sender_name" placeholder="Your Name" required/> </div> <div class="form-group"> <input class="form-control" type="email" name="sender_email" placeholder="Recipient's Email Address" required/> </div> <div class="form-group"> <input class="form-control" type="text" name="subject" placeholder="Subject"/> </div> <div class="form-group"> <textarea class="form-control" name="message" placeholder="Message"></textarea> </div> <div class="form-group"> <input class="form-control" type="file" name="attachment" placeholder="Attachment" required/> </div> <div class="form-group"> <input class="btn btn-primary" type="submit" name="button" value="Submit" /> </div> </form> </div> </body> </html>
Producción:
PHP es un lenguaje de secuencias de comandos del lado del servidor diseñado específicamente para el desarrollo web. Puede aprender PHP desde cero siguiendo este tutorial de PHP y ejemplos de PHP .
Publicación traducida automáticamente
Artículo escrito por Saptarshi_Das y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA