para formulario enviar correos correo configurar con php html email

correos - enviar formulario a correo php



Enviar correo electrónico con PHP desde un formulario html al enviar con el mismo script (8)

Deseo enviar un correo electrónico con PHP cuando un usuario haya terminado de completar un formulario HTML y luego enviar información por correo electrónico desde el formulario. Quiero hacerlo desde el mismo script que muestra la página web que tiene el formulario.

Encontré este código, pero el correo no se envía.

<?php if (isset($_POST[''submit''])) { $to = $_POST[''email'']; $subject = $_POST[''name'']; $message = getRequestURI(); $from = "[email protected]"; $headers = "From:" . $from; if (mail($to, $subject, $message, $headers)) { echo "Mail Sent."; } else { echo "failed"; } } ?>

¿Cuál es el código para enviar un correo electrónico en PHP?


EDITAR (# 1)

Si entiendo correctamente, desea tener todo en una página y ejecutarlo desde la misma página.

Puede usar el siguiente código para enviar correo desde una sola página, por ejemplo index.php o contact.php

La única diferencia entre esta y mi respuesta original es <form action="" method="post"> donde la acción se ha dejado en blanco.

Es mejor usar el header(''Location: thank_you.php''); en lugar de echo en el controlador de PHP para redirigir al usuario a otra página después.

Copie el código completo a continuación en un archivo.

<?php if(isset($_POST[''submit''])){ $to = "[email protected]"; // this is your Email address $from = $_POST[''email'']; // this is the sender''s Email address $first_name = $_POST[''first_name'']; $last_name = $_POST[''last_name'']; $subject = "Form submission"; $subject2 = "Copy of your form submission"; $message = $first_name . " " . $last_name . " wrote the following:" . "/n/n" . $_POST[''message'']; $message2 = "Here is a copy of your message " . $first_name . "/n/n" . $_POST[''message'']; $headers = "From:" . $from; $headers2 = "From:" . $to; mail($to,$subject,$message,$headers); mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender echo "Mail Sent. Thank you " . $first_name . ", we will contact you shortly."; // You can also use header(''Location: thank_you.php''); to redirect to another page. } ?> <!DOCTYPE html> <head> <title>Form submission</title> </head> <body> <form action="" method="post"> First Name: <input type="text" name="first_name"><br> Last Name: <input type="text" name="last_name"><br> Email: <input type="text" name="email"><br> Message:<br><textarea rows="5" name="message" cols="30"></textarea><br> <input type="submit" name="submit" value="Submit"> </form> </body> </html>

Respuesta original

No estaba seguro de cuál era la pregunta, pero tengo la impresión de que se enviará una copia del mensaje a la persona que rellenó el formulario.

Aquí hay una copia probada / funcional de un formulario HTML y controlador de PHP. Esto usa la función PHP mail() .

El manejador de PHP también enviará una copia del mensaje a la persona que completó el formulario.

Puede usar dos barras diagonales // frente a una línea de código si no va a usarlo.

Por ejemplo: // $subject2 = "Copy of your form submission"; no se ejecutará

FORMULARIO HTML:

<!DOCTYPE html> <head> <title>Form submission</title> </head> <body> <form action="mail_handler.php" method="post"> First Name: <input type="text" name="first_name"><br> Last Name: <input type="text" name="last_name"><br> Email: <input type="text" name="email"><br> Message:<br><textarea rows="5" name="message" cols="30"></textarea><br> <input type="submit" name="submit" value="Submit"> </form> </body> </html>

Controlador de PHP (mail_handler.php)

(Utiliza información del formulario HTML y envía el correo electrónico)

<?php if(isset($_POST[''submit''])){ $to = "[email protected]"; // this is your Email address $from = $_POST[''email'']; // this is the sender''s Email address $first_name = $_POST[''first_name'']; $last_name = $_POST[''last_name'']; $subject = "Form submission"; $subject2 = "Copy of your form submission"; $message = $first_name . " " . $last_name . " wrote the following:" . "/n/n" . $_POST[''message'']; $message2 = "Here is a copy of your message " . $first_name . "/n/n" . $_POST[''message'']; $headers = "From:" . $from; $headers2 = "From:" . $to; mail($to,$subject,$message,$headers); mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender echo "Mail Sent. Thank you " . $first_name . ", we will contact you shortly."; // You can also use header(''Location: thank_you.php''); to redirect to another page. // You cannot use header and echo together. It''s one or the other. } ?>

Para enviar como HTML:

Si desea enviar correo como HTML y para ambas instancias, deberá crear dos conjuntos separados de encabezados HTML con diferentes nombres de variables.

Lea el manual en mail() para aprender a enviar correos electrónicos como HTML:

Notas al pie:

  • En lo que respecta a HTML5

Debe especificar la URL del servicio que manejará los datos enviados, utilizando el atributo de acción.

Como se describe en https://www.w3.org/TR/html5/forms.html en 4.10.1.3 Configuración de un formulario para comunicarse con un servidor . Para obtener información completa, consulte la página.

Por lo tanto, action="" no funcionará en HTML5.

La sintaxis correcta sería:

  • action="handler.xxx" o
  • action="http://www.example.com/handler.xxx" .

Tenga en cuenta que xxx será la extensión del tipo de archivo utilizado para manejar el proceso. Esto podría ser una extensión de archivo .php , .cgi , .pl , .cgi , etc.

Consulte la siguiente pregunta y respuesta en Stack si falla el envío de correo:


Script PHP para conectarse a un servidor SMTP y enviar correo electrónico en Windows 7

Enviar un correo electrónico desde PHP en Windows es un poco un campo de minas con problemas y rasguños en la cabeza. Intentaré guiarlo a través de una instancia en la que lo hice funcionar en Windows 7 y PHP 5.2.3 bajo el servidor web (IIS) Internet Information Services.

Supongo que no quiere utilizar ningún marco preconstruido como CodeIgniter o Symfony que contenga la capacidad de enviar correos electrónicos. Vamos a enviar un correo electrónico desde un archivo PHP independiente. Adquirí este código debajo de codeigniter hood (en el sistema / librerías) y lo modifiqué para que simplemente pueda soltar este archivo Email.php y debería funcionar.

Esto debería funcionar con las versiones más nuevas de PHP. Pero nunca se sabe.

Paso 1, necesitas un nombre de usuario / contraseña con un servidor SMTP:

Estoy usando el servidor smtp de smtp.ihostexchange.net que ya está creado y configurado para mí. Si no tienes esto, no puedes continuar. Debería poder utilizar un cliente de correo electrónico como thunderbird, evolution, Microsoft Outlook , para especificar su servidor smtp y luego poder enviar correos electrónicos a través de allí.

Paso 2, crea tu archivo Hello World Email:

Supongo que estás usando IIS. Entonces crea un archivo llamado index.php bajo C:/inetpub/wwwroot y pon este código ahí:

<?php include("Email.php"); $c = new CI_Email(); $c->from("[email protected]"); $c->to("[email protected]"); $c->subject("Celestial Temple"); $c->message("Dominion reinforcements on the way."); $c->send(); echo "done"; ?>

Debería poder visitar este index.php navegando a localhost / index.php en un navegador, arrojará errores porque Email.php no se encuentra. Pero asegúrese de que al menos puede ejecutarlo desde el navegador.

Paso 3, Email.php un archivo llamado Email.php :

Cree un nuevo archivo llamado Email.php en C:/inetpub/wwwroot .

Copie / pegue este código PHP en Email.php:

https://github.com/sentientmachine/standalone_php_script_send_email/blob/master/Email.php

Dado que hay muchos tipos de servidores smtp, tendrá que Email.php manualmente la configuración en la parte superior de Email.php . Lo configuré para que funcione automáticamente con smtp.ihostexchange.net , pero su servidor smtp podría ser diferente.

Por ejemplo:

  1. Establezca la configuración de smtp_port en el puerto de su servidor smtp.
  2. Establezca la configuración de smtp_crypto en lo que necesita su servidor smtp.
  3. Configure los $ newline y $ crlf para que sean compatibles con lo que usa su servidor smtp. Si elige mal, el servidor smtp puede ignorar su solicitud sin error. Yo uso / r / n, para ti tal vez /n es obligatorio.

El código vinculado es demasiado largo para pegarlo como una respuesta de . Si desea editarlo, deje un comentario aquí o mediante github y lo cambiaré.

Paso 4, asegúrese de que su php.ini tenga habilitada la extensión ssl:

Encuentra tu archivo PHP.ini y descomenta el

;extension=php_openssl.dll

Entonces parece:

extension=php_openssl.dll

Paso 5, ejecuta el archivo index.php que acabas de crear en un navegador:

Debería obtener el siguiente resultado:

220 smtp.ihostexchange.net Microsoft ESMTP MAIL Service ready at Wed, 16 Apr 2014 15:43:58 -0400 250 2.6.0 <[email protected]> Queued mail for delivery lang:email_sent done

Paso 6, revisa tu correo electrónico y carpeta de spam:

Visita la cuenta de correo electrónico para [email protected] y deberías haber recibido un correo electrónico. Debería llegar en 5 o 10 segundos. Si no lo hace, inspeccione los errores devueltos en la página. Si eso no funciona, intente maquillar su cara en el teclado de google mientras canta: "trabajar en la tienda de comestibles no es tan malo".


Aquí están las configuraciones de correo PHP que uso:

//Mail sending function $subject = $_POST[''name'']; $to = $_POST[''email'']; $from = "[email protected]"; //data $msg = "Your MSG <br>/n"; //Headers $headers = "MIME-Version: 1.0/r/n"; $headers .= "Content-type: text/html; charset=UTF-8/r/n"; $headers .= "From: <".$from. ">" ; mail($to,$subject,$msg,$headers); echo "Mail Sent.";


Creo que un error en el código original podría haber sido que tenía:

$message = echo getRequestURI();

en lugar de:

$message = getRequestURI();

(Sin embargo, el código ha sido editado).


Debe agregar una action en su formulario como:

<form name=''form1'' method=''post'' action=''<?php echo($_SERVER[''PHP_SELF'']);''> <!-- All your input for the form here --> </form>

A continuación, coloque el fragmento en la parte superior del documento y envíe el correo. Qué echo($_SERVER[''PHP_SELF'']); lo hace es que envía su información al principio de su script para que pueda usarlo.


Necesita un servidor SMPT para

... mail($to,$subject,$message,$headers);

trabajar.

Podrías probar servidores SMTP livianos como xmailer


Si aún no lo hizo, mire su php.ini y asegúrese de que los parámetros en la configuración de [mail function] estén configurados correctamente para activar el servicio de correo electrónico. Después de que pueda usar la biblioteca PHPMailer y siga las instrucciones.


También puede usar la aplicación mandrill para enviar el correo en php. Obtendrá la API de https://mandrillapp.com/api/docs/index.php.html donde podrá encontrar los detalles completos sobre los correos electrónicos enviados y otros detalles.