Foros del Web » Creando para Internet » Diseño web »

[SOLUCIONADO] Formulario por smtp

Estas en el tema de Formulario por smtp en el foro de Diseño web en Foros del Web. Hola, tengo una web con un formulario de contacto y quiero usar una cuenta de google, para enviar mi formulario. La idea es no depender ...
  #1 (permalink)  
Antiguo 22/06/2021, 20:35
Avatar de edurocc  
Fecha de Ingreso: julio-2013
Mensajes: 103
Antigüedad: 10 años, 9 meses
Puntos: 1
Formulario por smtp

Hola, tengo una web con un formulario de contacto y quiero usar una cuenta de google, para enviar mi formulario.
La idea es no depender del email del hosting.
Solo tengo el formulario con "action" vacio ja, cuales son los pasos a seguir?
Gracias.

Última edición por edurocc; 22/06/2021 a las 20:36 Razón: aclaracion
  #2 (permalink)  
Antiguo 24/06/2021, 12:30
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: Formulario por smtp

Lo puedes hacer con PHPMailer en el lado del servidor. Aquí hay un ejemplo muy bien explicado: https://github.com/PHPMailer/PHPMail...les/gmail.phps

Solamente tienes que cambiar los datos por los de tu cuenta de Gmail. No obstante, debes habilitar el acceso IMAP desde tu cuenta de Gmail, para poder conectarte al servidor SMTP de Gmail.

  #3 (permalink)  
Antiguo 27/06/2021, 19:29
Avatar de edurocc  
Fecha de Ingreso: julio-2013
Mensajes: 103
Antigüedad: 10 años, 9 meses
Puntos: 1
Información Respuesta: Formulario por smtp

Cita:
Iniciado por prueba230683 Ver Mensaje
Lo puedes hacer con PHPMailer en el lado del servidor. Aquí hay un ejemplo muy bien explicado: https://github.com/PHPMailer/PHPMail...les/gmail.phps

Solamente tienes que cambiar los datos por los de tu cuenta de Gmail. No obstante, debes habilitar el acceso IMAP desde tu cuenta de Gmail, para poder conectarte al servidor SMTP de Gmail.

Gracias por responder prueba230683
entonces le doy action al formulario a un php con esos códigos.
Es seguro poner mi contraseña en un archivo? eso me da un poco de miedo ja
Me dices que habilite IMAP, eso es para correos entrantes, es necesario? o solo habilito smtp?

Hay una nota que me asusta, y dice: "Por favor no se sienta tentado a hacerlo usted mismo: si no usa PHPMailer, hay muchas otras bibliotecas excelentes que sí debes mirar antes de rodar el tuyo. Tratar SwiftMailer , Laminas / Correo, Componentes Zeta etc."

Igual lo intentare ja
Gracias

Última edición por edurocc; 27/06/2021 a las 20:31 Razón: amplacion
  #4 (permalink)  
Antiguo 28/06/2021, 16:58
Avatar de edurocc  
Fecha de Ingreso: julio-2013
Mensajes: 103
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Formulario por smtp

Cita:
Iniciado por prueba230683 Ver Mensaje
Lo puedes hacer con PHPMailer en el lado del servidor. Aquí hay un ejemplo muy bien explicado: https://github.com/PHPMailer/PHPMail...les/gmail.phps

Solamente tienes que cambiar los datos por los de tu cuenta de Gmail. No obstante, debes habilitar el acceso IMAP desde tu cuenta de Gmail, para poder conectarte al servidor SMTP de Gmail.

Hola
En los códigos hay una Seccion2 para IMAP. es necesario que este?
Gracias
  #5 (permalink)  
Antiguo 28/06/2021, 18:22
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: Formulario por smtp

1) Tienes razón. Activar IMAP no es necesario en este caso, ya que solamente estás enviando y no recibiendo emails. No obstante, tendrás que desactivar alguna configuración de seguridad en tu cuenta de Gmail, como 2FA, en caso de que lo tengas habilitado, y alguna cosa más. Aquí está detallado lo que tienes que cambiar: https://netcorecloud.com/tutorials/s...ver-using-php/

2) No existe ningún problema con incrustar tus credenciales de acceso si estás trabajando con tu propio servidor. Si estás en un hosting compartido, no me fiaría tanto.

3) Te propongo una alternativa mucho más fácil. Crear un formulario mediante Jotform, que tiene notificaciones por email.

Última edición por prueba230683; 02/07/2021 a las 09:58
  #6 (permalink)  
Antiguo 09/07/2021, 20:12
Avatar de edurocc  
Fecha de Ingreso: julio-2013
Mensajes: 103
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Formulario por smtp

Cita:
Iniciado por prueba230683 Ver Mensaje
1) Tienes razón. Activar IMAP no es necesario en este caso, ya que solamente estás enviando y no recibiendo emails. No obstante, tendrás que desactivar alguna configuración de seguridad en tu cuenta de Gmail, como 2FA, en caso de que lo tengas habilitado, y alguna cosa más. Aquí está detallado lo que tienes que cambiar: https://netcorecloud.com/tutorials/s...ver-using-php/

2) No existe ningún problema con incrustar tus credenciales de acceso si estás trabajando con tu propio servidor. Si estás en un hosting compartido, no me fiaría tanto.

3) Te propongo una alternativa mucho más fácil. Crear un formulario mediante Jotform, que tiene notificaciones por email.
Perdón por la demora, pero pedí ayuda a un amigo que no supo ayudarme, por eso vuelvo ja.
Los códigos me quedaron asi:
<?php

use PHPMailer\PHPMailer;
use PHPMailer\Exception;

require 'phpMailer/Exception.php';
require 'phpMailer/PHPMailer.php';
require 'phpMailer/SMTP.php';

//Create an instance; passing `true` enables exceptions
$mail = new PHPMailer(true);

try {
//Server settings
$mail->SMTPDebug = SMTP::DEBUG_SERVER; //Enable verbose debug output - por si sale algun error y cero se pone para desactivar
$mail->isSMTP(); //Send using SMTP
$mail->Host = 'smtp.gmail.com'; //Set the SMTP server to send through
$mail->SMTPAuth = true; //Enable SMTP authentication
$mail->Username = '[email protected]'; //SMTP username
$mail->Password = '****'; //SMTP password
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; //Enable implicit TLS encryption
$mail->Port = 465; //465 o -TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`

//Recipients
$mail->setFrom('[email protected]', 'Mailer');
$mail->addAddress('[email protected]'); //Add a recipient
$mail->addCC('[email protected]');

//Content
$mail->isHTML(true); //Set email format to HTML
$mail->Subject = 'Asunto muy importante para vos';

$mail->$mail->AltBody = 'SW SW SW';
$mail->$nombre = $ POST["nombre"];
$mail->$email = $ POST["email"];
$mail->$tel = $ POST["tel"];
$mail->$asunto = $ POST["asunto"];
$mail->$mensaje = $ POST["mensaje"];
$mail->$contenido = "nombre: " . $nombre . "\nemail: " . $email . "\ntel: " . $tel . "\nasunto: " . $asunto . "\nmensaje: " . $mensaje;
$mail->header ("contacto/gracias.html");

$mail->send();
echo 'El mensaje se envio correctamente';
} catch (Exception $e) {
echo "Hubo un error al enviar el mensaje: {$mail->ErrorInfo}";
}
?>

No envía los mail, y no me lleva a gracias.html, sino al enviarcorreo.php mostrándome una pagina en blanco.
Donde esta el error?
  #7 (permalink)  
Antiguo 10/07/2021, 13:15
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: Formulario por smtp

Descarga y mete estos 3 ficheros .php en el mismo directorio. A ser posible donde se encuentran el resto de tus .php:

https://github.com/PHPMailer/PHPMail.../PHPMailer.php
https://github.com/PHPMailer/PHPMail.../Exception.php
https://github.com/PHPMailer/PHPMail...r/src/SMTP.php

Y en ese mismo directorio, creas otro .php con el siguiente código:

Código:
<?php

use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;

require './Exception.php';
require './PHPMailer.php';
require './SMTP.php';

$mail = new PHPMailer();

$mail->isSMTP();

$mail->SMTPDebug = SMTP::DEBUG_SERVER;

$mail->Host = 'smtp.gmail.com';

$mail->Port = 465;

$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;

$mail->SMTPAuth = true;

$mail->Username = '[email protected]';

$mail->Password = 'yourpassword';

$mail->setFrom('[email protected]', 'Nombre Apellidos');

$mail->addAddress('[email protected]');

$mail->Subject = 'PHPMailer GMail SMTP test';

$mail->Body = 'Hola esto es un mensaje';

if (!$mail->send()) {
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
header('Location: /contacto/gracias.html');
}

?>
Y asegúrate de:

Si sigue sin funcionar, indica qué error te lanza...


Última edición por prueba230683; 11/07/2021 a las 21:34
  #8 (permalink)  
Antiguo 16/07/2021, 15:04
Avatar de edurocc  
Fecha de Ingreso: julio-2013
Mensajes: 103
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Formulario por smtp

Cita:
Iniciado por prueba230683 Ver Mensaje
Descarga y mete estos 3 ficheros .php en el mismo directorio. A ser posible donde se encuentran el resto de tus .php:

https://github.com/PHPMailer/PHPMail.../PHPMailer.php
https://github.com/PHPMailer/PHPMail.../Exception.php
https://github.com/PHPMailer/PHPMail...r/src/SMTP.php

Y en ese mismo directorio, creas otro .php con el siguiente código:

Código:
<?php

use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;

require './Exception.php';
require './PHPMailer.php';
require './SMTP.php';

$mail = new PHPMailer();

$mail->isSMTP();

$mail->SMTPDebug = SMTP::DEBUG_SERVER;

$mail->Host = 'smtp.gmail.com';

$mail->Port = 465;

$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;

$mail->SMTPAuth = true;

$mail->Username = '[email protected]';

$mail->Password = 'yourpassword';

$mail->setFrom('[email protected]', 'Nombre Apellidos');

$mail->addAddress('[email protected]');

$mail->Subject = 'PHPMailer GMail SMTP test';

$mail->Body = 'Hola esto es un mensaje';

if (!$mail->send()) {
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
header('Location: /contacto/gracias.html');
}

?>
Y asegúrate de:

Si sigue sin funcionar, indica qué error te lanza...

Hola, gracias por seguir el tema.
No me llegaron los email, no veo email enviados desde mi usuario y ahora tengo un errror.:

2021-07-16 20:48:04 SMTP ERROR: Failed to connect to server: Network is unreachable (101)
SMTP connect() failed. https://github.com/PHPMailer/PHPMail...roubleshooting
Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMail...roubleshooting

Me imagino que una vez que hagas funcionar esto, viene el paso de adjuntar el formulario no? porque es el objetivo final ja.
Gracias.

nota: desactive el verificado de dos pasos, tambien se permiten conexiones pocos seguras a la cuenta. con eso tendria que conectarse pero veo que no.

Última edición por edurocc; 16/07/2021 a las 15:42 Razón: amplio informacion
  #9 (permalink)  
Antiguo 16/07/2021, 16:42
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: Formulario por smtp

1) Prueba enviando al puerto 587 en vez de 465 (y cambiando ssl por tls). Así:

Código:
<?php

use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;

require './Exception.php';
require './PHPMailer.php';
require './SMTP.php';

$mail = new PHPMailer();

$mail->isSMTP();

$mail->SMTPDebug = SMTP::DEBUG_SERVER;

$mail->Host = 'smtp.gmail.com';

$mail->Port = 587;

$mail->SMTPSecure = "tls";

$mail->SMTPAuth = true;

$mail->Username = '[email protected]';

$mail->Password = 'yourpassword';

$mail->setFrom('[email protected]', 'Nombre Apellidos');

$mail->addAddress('[email protected]');

$mail->Subject = 'PHPMailer GMail SMTP test';

$mail->Body = 'Hola esto es un mensaje';

if (!$mail->send()) {
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
header('Location: /contacto/gracias.html');
}

?>
Si esto no funciona continúa al paso 2.

2) Desconozco si lo estás hosteando en localhost o en un hosting, pero debes saber que algunos hosting como GoDaddy o DigitalOcean suelen bloquear parcial o totalmente el tráfico SMTP.

https://github.com/PHPMailer/PHPMail...t-to-smtp-host

Por otra parte, si lo estás hosteando en localhost verifica que tu firewall no está bloqueando peticiones salientes hacia el puerto 587 o 465.

Si ninguno de estos es tu caso, entonces no tengo ni idea de qué puede ser. Me rindo. Deberás usar algún servicio como JotForm que no están nada mal

  #10 (permalink)  
Antiguo 16/07/2021, 19:44
Avatar de edurocc  
Fecha de Ingreso: julio-2013
Mensajes: 103
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Formulario por smtp

Cita:
Iniciado por prueba230683 Ver Mensaje
1) Prueba enviando al puerto 587 en vez de 465 (y cambiando ssl por tls). Así:

Si esto no funciona continúa al paso 2.

2) Desconozco si lo estás hosteando en localhost o en un hosting, pero debes saber que algunos hosting como GoDaddy o DigitalOcean suelen bloquear parcial o totalmente el tráfico SMTP.

https://github.com/PHPMailer/PHPMail...t-to-smtp-host
No haber leído antes esta referencia !!! Ya pague a Godaddy, inutil seran todos nuestros esfuerzos.

Voy a reclamar e intentar salirme de Godaddy, recomiendas un proveedor donde si funcione?

Otra pregunta: como se indica el formulario de mi web? El objetivo es que envie un formulario en una web, no veo la indicación.

Gracias.
  #11 (permalink)  
Antiguo 16/07/2021, 22:03
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: Formulario por smtp

Cita:
Voy a reclamar e intentar salirme de Godaddy, recomiendas un proveedor donde si funcione?
Te recomiendo Cloudways. Puedes solicitar una demo de 3 días para que puedas ver si funciona antes de pagar. Te dan a elegir entre varios servidores, no elijas DigitalOcean porque es otro de los que bloquea según la fuente que te pasé.

Esto no es publicidad ni enlace de afiliados, lo he utilizado en alguna ocasión y me gusta.

Respecto a lo del formulario, echa un vistazo a este ejemplo. Solamente tienes que adaptarlo un poco, teniendo en cuenta el otro ejemplo que te pasé. Si tienes algún problema, comenta, pero no puedo hacerlo todo por ti

Saludos

Última edición por prueba230683; 16/07/2021 a las 22:14
  #12 (permalink)  
Antiguo 31/07/2021, 00:15
Avatar de edurocc  
Fecha de Ingreso: julio-2013
Mensajes: 103
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Formulario por smtp

Hola prueba230683
Perdón por la demora.
Efectivamente era el hosting que bloqueaba el envío por smtp, me cambie, y ya funciona, conseguir colocar los datos del formulario. solo me queda un tema.
En el cuerpo del mensaje, la información que va como texto, sale todo en una sola linea.
En el cuerpo, puse el nombre, el teléfono y el mensaje. En el mensaje que se escribe en el formulario si tengo saltos de líneas, pero el resto no.
Por ejemplo:"Nombre: EduardoTelefono: 1122334455Mensaje: Hola, mi consulta es la siguiente.
Que numero saldrá en la grande?
Gracias
."
Intente usar "/n" en el teléfono y luego en el mensaje, pero no me hace el salto de lineapara que me quede alto como este otro ejemplo:
"Nombre: Eduardo
Teléfono: 1122334455
Mensaje: Hola, mi consulta es la siguiente.
Que numero saldrá en la grande?
Gracias
."
Tengo que declarar en algún lado el uso del "/n"
Gracias
  #13 (permalink)  
Antiguo 31/07/2021, 09:36
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: Formulario por smtp

Prueba a utilizar la función nl2br($mensaje), para que transforme los saltos de línea en saltos de línea de HTML. Y asegúrate de que envias el email en formato html:

Código:
$mail->isHTML(true);
Así, el mensaje se enviará con la cabecera Content-type: text/html.

Además, para concatenar teléfono, nombre, junto con el resto de datos, deberás utilizar el separador html <br> en lugar del salto de línea (\r\n). Quedaría algo así:

Código PHP:
Ver original
  1. $str = $nombre . '<br>' . $telefono . '<br>' . nl2br($mensaje_recibido_del_cliente);

PD: por curiosidad, a qué hosting te cambiaste? Por si otros usuarios llegan a este tema con el mismo problema.


Última edición por prueba230683; 31/07/2021 a las 09:46
  #14 (permalink)  
Antiguo 22/09/2021, 20:56
Avatar de edurocc  
Fecha de Ingreso: julio-2013
Mensajes: 103
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Formulario por smtp

Cita:
Iniciado por prueba230683 Ver Mensaje
Prueba a utilizar la función nl2br($mensaje), para que transforme los saltos de línea en saltos de línea de HTML. Y asegúrate de que envias el email en formato html:

Código:
$mail->isHTML(true);
Así, el mensaje se enviará con la cabecera Content-type: text/html.

Además, para concatenar teléfono, nombre, junto con el resto de datos, deberás utilizar el separador html <br> en lugar del salto de línea (\r\n). Quedaría algo así:

Código PHP:
Ver original
  1. $str = $nombre . '<br>' . $telefono . '<br>' . nl2br($mensaje_recibido_del_cliente);

PD: por curiosidad, a qué hosting te cambiaste? Por si otros usuarios llegan a este tema con el mismo problema.

Volví e intentare terminar con este formulario.
primero te respondo, el host se llama Hostinger y estoy muy conforme hasta ahora ja

ahora de lleno a intentar colocar los saltos.
como me sugieres, cambie esas dos líneas pero me llega el mail vacío.
te mostrare como tenia los códigos y como los modifique

original: $mail->isSMTP();
modifico: $mail->isHTML(true);

original: $mail->Body = 'Nombre: ' . $_POST['nombre'] . ' _ ' . ' Telefono: ' . $_POST['tel'] . ' _ ' . ' Mensaje: ' . $_POST['mensaje'] . ' _ '. 'Fin del mensaje.';
modifico: $mail->Body = $nombre . '<br>' . $tel . '<br>' .
nl2br($mensaje_recibido_del_cliente);


como te comente antes, me llega el mail pero con el cuerpo vacío.
y con las líneas originales, funcionaba bien, pero no realizaba los saltos de línea.

Gracias.
  #15 (permalink)  
Antiguo 25/09/2021, 18:25
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: Formulario por smtp

Cita:
primero te respondo, el host se llama Hostinger y estoy muy conforme hasta ahora ja
Okey, tomo nota


Cita:
Iniciado por edurocc
original: $mail->isSMTP();
modifico: $mail->isHTML(true);
No tienes que quitar $mail->isSMTP(), tienes que poner ambos:

Código:
$mail->isSMTP();
$mail->isHTML(true);
Y la parte del Body, sería algo así:

Código PHP:
$mail->Body 'Nombre: ' $_POST['nombre'] . '<br>' 'Telefono: ' $_POST['tel'] . '<br>' 'Mensaje: ' nl2br($_POST['mensaje']) . '<br>''Fin del mensaje.'

Última edición por prueba230683; 25/09/2021 a las 18:31
  #16 (permalink)  
Antiguo 27/09/2021, 19:31
Avatar de edurocc  
Fecha de Ingreso: julio-2013
Mensajes: 103
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Formulario por smtp

Super agradecido a prueba230683, por su pasiencia.
Salio todo perfecto.
Pueden cerrar el tema.

Gracias.

Nota: Algo desilucionado con el servicio de Google, todos los dias me pide que habilite la seguridad y se hace molesto. Despues todo lo demas conforme.

Etiquetas: formulario, smtp
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 07:55.