PHP - Enviar formulario HTML mediante PHPMailer

 
Vista:
sin imagen de perfil
Val: 5
Ha disminuido su posición en 217 puestos en PHP (en relación al último mes)
Gráfica de PHP

Enviar formulario HTML mediante PHPMailer

Publicado por Daniel (5 intervenciones) el 14/06/2020 17:48:05
Buenas tardes amigos, disculpen la molestia. Sé que estoy haciendo algo mal, hace 3 días que hago pruebas y no logro hacerlo funcionar. Tengo un formulario de contacto tradicional en HTML, cada campo contiene su label y id correspondiente, etc, y quiero usar como método de envío la librería PHPMailer: https://github.com/PHPMailer/PHPMailer

Para hacerlo, seguí este tutorial paso a paso: https://www.000webhost.com/forum/t/how-to-use-phpmailer/134686, pero no logro adaptarlo para que el archivo php tome los datos ingresados en el formulario HTML externo y añada cada campo del formulario al cuerpo del email (espero que se entienda lo que digo).
El formulario html se encuentra suelto en la carpeta public_html y la librería esta en una subcarpeta llamada "Mail". La única variación es que en vez de usar gmail utilizaré Zoho Mail.

Busqué en muchos foros y videos de youtube algún ejemplo de phpmailer en combinación con html externo, pero no encontré ninguno y me llama la atención. Si alguien tiene idea de cuál podría ser el problema o puede compartirme un tutorial como para tomar de referencia, les estaré muy agradecido. Muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 5
Ha disminuido su posición en 217 puestos en PHP (en relación al último mes)
Gráfica de PHP

Enviar formulario HTML mediante PHPMailer

Publicado por Daniel (5 intervenciones) el 19/06/2020 16:03:39
Muchas gracias por tu respuesta Luis, y por enviarme el video. Logré hacer funcionar el formulario, pero el problema es que los campos llegan vacíos; es decir, me llega por ejemplo el título "Nombre", pero el nombre que completa el visitante en el formulario no aparece, lo mismo ocurre con los demás campos. Es raro, porque estoy utilizando el ejemplo oficial de Github. Tendré que seguir investigando hasta dar con el problema, muchas gracias de nuevo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Enviar formulario HTML mediante PHPMailer

Publicado por Kathyu (905 intervenciones) el 19/06/2020 17:11:31
Ponga código para ver
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Luis A.
Val: 41
Ha disminuido su posición en 8 puestos en PHP (en relación al último mes)
Gráfica de PHP

Enviar formulario HTML mediante PHPMailer

Publicado por Luis A. (18 intervenciones) el 21/06/2020 09:32:07
Ya me paso eso fijate bien que las casillas donde llenan los datos tengan el ID y el NAME correspondiente, ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<div class="form-group">
 <label for="asunto" class="text-dark">Asunto</label>
 <input type="text" name="asunto"  id="asunto" required class="form-control">
</div>
 
<div class="form-group">
    <label for="exampleFormControlSelect1">Seleccione un Grupo para enviarle Email</label>
    <select class="form-control" id="grupomail "name="grupomail">
    <?php
    foreach($data as $dat) {
        ?>
        <option> <?php echo $dat['nombre'] ?> </option>
        <?php
    }
    ?>
    <label for="mensaje">Cuerpo del Mensaje</label>
    <textarea required class="form-control" id="mensaje" name="mensaje" rows="3"></textarea>
</div>

si te fijas es un esquema simple de formulario si te fijas todos tienen su ID y NAME correspondiente, de el lado de phpmailer los recibes a si:

1
2
3
$asunto = $_POST["asunto"];
$grupomail = $_POST["grupomail"];
$mensaje = $_POST["mensaje"];


y el mensaje te queda a si:

1
2
3
4
5
6
7
8
9
10
11
12
13
$mail->isHTML(true);                    // Set email format to HTML
    $mail->Subject = "{$asunto}";
    $mail->Body = "
<html>
<body>
<p>Hola <h3>$nombre</h3></p>
<p> $mensaje</p>
<p>Te enviamos la hora de tu clase: $grupomail</p>
</body>
</html>

por lo demas mencionas que te funcinaba la configuración de tu hosting y todo, esto solo es para el mensaje en si.

disculpas por tardarme en responderte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Enviar formulario HTML mediante PHPMailer

Publicado por Kathyu (905 intervenciones) el 22/06/2020 11:24:13
Le daré un consejo de vida, DIVIDA LAS COSAS EN PARTES PEQUEÑAS.

Ya hizo echo de todas las variables en su archivo mail.php?? el archivo que recibe todo y que envía el correo.

Vea que todo llegue según quiere usted



Hace unos días se discutió eso de los echos PHP en HTML, y no recuerdo si deben separarse, yo siempre de los siempres lo haré.

1
2
3
4
5
6
7
8
9
10
11
$mail->isHTML(true);                    // Set email format to HTML
    $mail->Subject = "{$asunto}";
    $mail->Body = "
<html>
<body>
<p>Hola <h3>".$nombre."</h3></p>
<p> ".$mensaje."</p>
<p>Te enviamos la hora de tu clase: ".$grupomail."</p>
</body>
</html>

Vuelvo y repito, no recuerdo en que quedamos esa vez. Intente así

PD: porque las llaves {$asunto} en el asunto? y no en las otras? Para mi que ninguna debe llevar llaves pero bueeee
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 5
Ha disminuido su posición en 217 puestos en PHP (en relación al último mes)
Gráfica de PHP

Enviar formulario HTML mediante PHPMailer

Publicado por Daniel (5 intervenciones) el 22/06/2020 17:52:48
Buen día @Kathyu y @Luis A., muchas gracias por sus respuestas. El HTML que hice es muy pequeño, como para poder hacer tests y ver si funciona. El código es este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Documento sin título</title>
</head>
 
<body><form action="mail.php" method="post" id="formulario" accept-charset="UTF-8">
  <p>
    <label for="name" >Nombre:</label>
    <input name="name" type="text" required="required" id="name">
  </p>
  <p>
    <label for="electromail" >Email:</label>
    <input name="electromail" type="email" required="required" id="electromail">
  </p>
  <p>
    <label for="mensaje">Text Area:</label>
    <textarea name="mensaje" required="required" id="mensaje"></textarea>
  </p>
  <p>
    <input name="confirmar" type="submit" id="confirmar" form="formulario" formaction="/mail.php" formenctype="text/plain" formmethod="POST" value="Enviar">
  </p>
</form>
</body>
</html>

Y el archivo mail.php al que hace referencia el código, es este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
 
require $_SERVER['DOCUMENT_ROOT'] . '/mail/Exception.php';
require $_SERVER['DOCUMENT_ROOT'] . '/mail/PHPMailer.php';
require $_SERVER['DOCUMENT_ROOT'] . '/mail/SMTP.php';
 
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 2;
$mail->Host = "smtp.zoho.com";
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = 'info@******.com';
$mail->Password = '******';
$mail->setFrom('info@******.com', 'Ejemplo');
$mail->addAddress('info@******.com', 'Ejemplo');
$mail->Subject = 'PHPMailer test';
$mail->msgHTML(file_get_contents('testmail.html'), __DIR__);
$mail->AltBody = 'HTML messaging not supported';
$mail->SMTPOptions = array(
                    'ssl' => array(
                        'verify_peer' => false,
                        'verify_peer_name' => false,
                        'allow_self_signed' => true
                    )
                );
if(!$mail->send()){
    echo "Mailer Error: " . $mail->ErrorInfo;
}else{
    echo "El mensaje se ha enviado correctamente!";
}

Probé este código con Zoho Mail y también con Gmail, y en ambos casos recibo el email, pero está vacío. Esto es lo que me aparece en el mail:

Nombre: [ ]
Email:
Text Area:
[Enviar]

Seguramente sea un error en el código, pero estoy utilizando el mismo código que publicó el creador de la librería PHPMailer, así que no sé cuál puede ser el problema. Muchísimas gracias nuevamente por cualquier consejo o sugerencia!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Enviar formulario HTML mediante PHPMailer

Publicado por Kathyu (905 intervenciones) el 22/06/2020 18:41:26
La respuesta es casi la misma, vea si sus variables llegan. porque si envía el mail y va vacío, por lo menos sabe que funciona.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar