entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

problemas al enviar un formulario a cuenta de gmail

Estoy haciendo una prueba desde localhost de enviar un formulario a una cuenta de gmail.

El error que me da es SMTP connection failed.

Aquí adjunto mi código de la clase sendmail.php

<?php

require_once('phpmailer/class.phpmailer.php');
require_once('phpmailer/class.smtp.php');

$mail = new PHPMailer();

//$mail->SMTPDebug = 3;                               // Enable verbose debug output
//$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = '[email protected]';                 // SMTP username
$mail->Password = 'prueba';                           // SMTP password
$mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587;                                    // TCP port to connect to

$message = "";
$status = "false";

if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
    if( $_POST['form_name'] != '' AND $_POST['form_email'] != '' AND $_POST['form_subject'] != '' ) {

        $name = $_POST['form_name'];
        $email = $_POST['form_email'];
        $subject = $_POST['form_subject'];
        $phone = $_POST['form_phone'];
        $message = $_POST['form_message'];

        $subject = isset($subject) ? $subject : 'New Message | Contact Form';

        $botcheck = $_POST['form_botcheck'];

        $toemail = '[email protected]'; // Your Email Address
        $toname = 'Prueba'; // Your Name

        if( $botcheck == '' ) {

            $mail->SetFrom( $email , $name );
            $mail->AddReplyTo( $email , $name );
            $mail->AddAddress( $toemail , $toname );
            $mail->Subject = $subject;

            $name = isset($name) ? "Nombre: $name<br><br>" : '';
            $email = isset($email) ? "Email: $email<br><br>" : '';
            $phone = isset($phone) ? "Teléfono: $phone<br><br>" : '';
            $message = isset($message) ? "Mensaje: $message<br><br>" : '';

            $referrer = $_SERVER['HTTP_REFERER'] ? '<br><br><br>Este formulario ha sido enviado por: ' . $_SERVER['HTTP_REFERER'] : '';

            $body = "$name $email $phone $message $referrer";

            $mail->MsgHTML( $body );
            $sendEmail = $mail->Send();

            if( $sendEmail == true ):
                $message = 'Se ha enviado el mensaje con <strong>éxito.</strong> Recibirás una contestación lo más rápido posible.';
                $status = "true";
            else:
                $message = '<strong>No se pudo</strong> enviar el mensaje por algún motivo. Por favor, inténtelo de nuevo más tarde.<br /><br /><strong>Razón:</strong><br />' . $mail->ErrorInfo . '';
                $status = "false";
            endif;
        } else {
            $message = 'Bot <strong>Detectado</strong>.! Límpiate por completo.!';
            $status = "false";
        }
    } else {
        $message = 'Por favor <strong>rellena</strong> todos los campos y envíelo de nuevo.';
        $status = "false";
    }
} else {
    $message = 'Se ha producido <strong>un error</strong>. Por favor, inténtelo de nuevo más tarde.';
    $status = "false";
}

$status_array = array( 'message' => $message, 'status' => $status);
echo json_encode($status_array);
?>

¿De qué puede ser el problema? He intentado muchas cosas pero sigo sin dar con la solución.

Muchas gracias

2 Respuestas

1voto

danielreales7 Puntos5380

Al final el problema no estaba en mi código sino en que tenía que habilitar el uso de aplicaciones menos seguras de gmail.
Aquí adjunto la URL:
https://www.google.com/settings/security/lesssecureapps
Muchas gracias por todo, después de casi una semana dándome golpes he conseguido solucionarlo.

1voto

Leonardo-Tadei comentado

gracias por compartir la respuesta!

1voto

Leonardo-Tadei Puntos227320

Hola @danielreales7,

para enviar un mail usndo como SMTP a GMail, tenés que poner datos válidos d euna cuenta de GMail.

Acá hay un ejemplo con los datos de conexión y el puerto correspondiente.

Saludos!

1voto

danielreales7 comentado

Tengo la configuración igual que el ejemplo que me has mandado y sigue sin funcionar, los datos del correo están correctamente configurados.

El error es el siguiente:
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

0voto

Leonardo-Tadei comentado

Probaste con el puerto 465 en vez de con el 587 ?

Cómo dice el documento que enlazás, el error connect() failed no es un error en el código, sino en la conexión con el servidor SMTP.

Hay varias pruebas ahí mismo sugeridas para determinar por qué no conecta. Qué resultados te dan?

0voto

danielreales7 comentado

Sí también lo he puesto con el puerto 465 y sigue dándome el mismo error.

Llevo tiempo modificando los puertos, las conexiones con ssl y tls y nada.

1voto

danielreales7 comentado

Buenas Leonardo, al final el problema no estaba en mi código sino en que tenía que habilitar el uso de aplicaciones menos seguras de gmail.
Aquí adjunto la URL:
https://www.google.com/settings/security/lesssecureapps
Muchas gracias por todo, después de casi una semana dándome golpes he conseguido solucionarlo.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta