PHPmailer funciona en XAMPP pero no en el hosting

Iniciado por bettu, 11 Agosto 2019, 20:21 PM

0 Miembros y 1 Visitante están viendo este tema.

bettu

Buenas,

A ver si alguien me puede echar un cable, que ando un poco perdido...

He creado un formulario de contacto con PHPMailer que envia un mail con documento adjunto a una cuenta de Google. El formulario funciona perfecto dentro de XAMPP, no tengo ningun tipo de problema, hasta que decido subir los archivos al hosting...

Cuando relleno el formulario en el hosting (es Plesk Onyx 17.5.3 por si sirve de referencia) me genera un error "The following From address failed: xxx@yyy.com". Eso no me pasaba en localhost y por más que revise el codigo no veo ningun tipo de fallo.

No sé si tengo que modificar alguna linea de código en mi documento php para que funcione en un entrono Plesk o si debo modificar el php.ini de mi hosting. En cualquier caso, que puedo hacer?

Recalco que no puedo modificar nada de PHP en mi hosting y entiendo que en caso de querer modificar algo, debo contactar con mi proveedor para que me habilite ciertos permisos?

Agradecería alguna orientación,


Gracias,

animanegra

¿Que servidor de smtp tienes puesto en tu código de php? Ten en cuenta que tienes que tener cuenta (usuario + password) en el servidor smtp al que se conecta.
Podría pasar que en tu xamp tenias puesto que se conectase a localhost y admitías cualquier usuario o no requeria de autenticación y al subirlo no has cambiado usuario y pass en relación a la configuración del servidor que te provee el servicio de hosting.
Lo más directo y tipico es utilizar el servidor smtp de outlook, gmail, whatever y el usuario y login de una cuenta que crees ahí.
Lo digo porque parece que en el servidor smtp al que te conectas parece no gustarle tus credenciales.

42
No contesto mensajes por privado, si tienes alguna pregunta, consulta o petición plantéala en el foro para que se aproveche toda la comunidad.

bettu

Hola,

Gracias por contestar. Pues mira, usé el smtp de Google y el usuario y contraseña de una cuenta de Gmail que tengo para hacer pruebas. Pego aquí el código que tengo hecho y que en local no tengo problemas.

Código (php) [Seleccionar]
<?php
 
require (
'phpmailer/class.phpmailer.php');
require ('phpmailer/class.smtp.php');
  
    if(isset(
$_POST['submit'])){
// recoge nombre, mail archivo adjunto y comentario desde formulario HTML
        
$name=$_POST['name'];
        
$email=$_POST['email'];
        
$message=$_POST['message'];
$file $_FILES['attachment'];


        
$mail = new PHPMailer();
         
        
$mail->IsSMTP();
$mail->SMTPDebug 3;
$mail->SMTPAuth true;
$mail->SMTPSecure 'ssl'
        
$mail->Host "smtp.gmail.com"// SMTP a utilizar    
        
$mail->Port 465;

//Mail y pass a utilizar
        
$mail->Username "micuenta@gmail.com";
        
$mail->Password "mipassword";

        
$mail->From $email;
        
$mail->FromName "Formulario";
        
$mail->AddAddress ("micuenta@gmail.com"); 
 
        
$mail->IsHTML(true); 
         
        
$mail->Subject "Formulari de contacte de $name"
         
        
// Inicio del mensaje HTML
         
        
$mail->Body "
        <html>
            <body>
                <table style='width:600px;'>
                    <tbody>
                        <tr>
                            <td style='width:150px'><strong>Nom i cognoms: </strong></td>
                            <td style='width:400px'>
$name</td>
                        </tr>
                        <tr>
                            <td style='width:150px'><strong>Email: </strong></td>
                            <td style='width:400px'>
$email</td>
                        </tr>
                        <tr>
                            <td style='width:150px'><strong>Comentari: </strong></td>
                            <td style='width:400px'>
$message</td>
                        </tr>
                    </tbody>
                </table>
            </body>
        </html>
        "
;
        
// Fin del mensaje HTML
       
   $mail->AddAttachment($file['tmp_name'], $file['name']);
  
if ($mail->Send())
echo "<script>alert('Formulari enviat. Li respondrem aviat.');location.href ='https://www.xxxxx.yyy';</script>";
else
echo "<script>alert('Error a l'hora d'enviar el formulari');location.href ='javascript:history.back()';</script>";


    }
?>


Probé también con 'tls' y puerto 587 sin ningun éxito. También probé con el siguiente codigo sin éxito: https://gist.github.com/emmgfx/7762b85e924c24f7575fe36c315ff0e7

Añadiendo esto:

$mail->Host = 'localhost';
$mail->Port = 25;
$mail->SMTPSecure = 'tls'; # SSL is deprecated
$mail->SMTPOptions = array (
    'ssl' => array(
        'verify_peer'  => true,
        'verify_depth' => 3,
        'allow_self_signed' => true,
        'peer_name' => 'Plesk',
    )
);


Que tampoco lo conseguí hacerlo funcionar en mi hosting.

Gracias,

Saludos,

#!drvy

¿Puedes dar el error entero?

Veo que tienes habilitado el SMTPDebug y que está al nivel 3 así que deberías tener un log donde se ha registrado la información del debug.

https://github.com/PHPMailer/PHPMailer/wiki/SMTP-Debugging

Saludos

MinusFour

No se en que puerto escucha el SMTP de google o si usa SSL pero en tu código el:

From: está puesto para que use el correo del usuario y el destinatario eres tu. En otras palabras, estás usando el servidor de Gmail para decirle que envié un correo de la cuenta del usuario a tu misma cuenta de Gmail.

A menos que estes usando un campo de $_POST para configurar el sender.

bettu

#5
Hola,


Gracias por las respuestas. Os comento...

Cita de: #!drvy en 12 Agosto 2019, 13:40 PM
¿Puedes dar el error entero?

Veo que tienes habilitado el SMTPDebug y que está al nivel 3 así que deberías tener un log donde se ha registrado la información del debug.

https://github.com/PHPMailer/PHPMailer/wiki/SMTP-Debugging

Saludos

Me genera este error:

The following From address failed: xxx@yyy.zzz. The following From address failed: xxx@yyy.zzz

SMTP server error: 5.5.1 Authentication Required. Learn more at 530 5.5.1 https://support.google.com/mail/?p=WantAuthError b2sm12650924wrf.94 - gsmtp


Cita de: MinusFour en 12 Agosto 2019, 15:52 PM
No se en que puerto escucha el SMTP de google o si usa SSL pero en tu código el:

From: está puesto para que use el correo del usuario y el destinatario eres tu. En otras palabras, estás usando el servidor de Gmail para decirle que envié un correo de la cuenta del usuario a tu misma cuenta de Gmail.

A menos que estes usando un campo de $_POST para configurar el sender.

Pues no ha mejorado poniendo como destinatario otra cuenta de destino distinta, así que no sé :S

Recalco que en dicha cuenta de Gmail tengo activada el acceso de aplicaciones poco seguras

Saludos,

@XSStringManolo

Estás usando el puerto smtps, gmilio no lo soporta.
Usa el 587, hablita tls y como te comentaron el from debe ser tu correo. From = Origen, no destino.
Where are you from? XD
Eso pasa por copiarle el código a los del vaticano. JAJA

bettu

Hola,

Gracias a todos por sus recomendaciones. Lamentablemente, ninguna me funcionó. Como dije, el código me iba perfecto en local pero cuando lo subí al hosting dejó de funcionar.

Ya probé usando SSL puerto 465 y TLS puerto 587 de Google sin ningún éxito en el hosting.

Al final lo que hice fue crear un nuevo correo: formularios@mihosting.com y configurar phpmailer para Plesk con esa dirección siguiendo como pauta el link que dejé más arriba. Al momento funcionó. Después, lo que hice fue crear una redirección de ese correo a la cuenta de Gmail que quería usar.

Por mi parte podemos dar el tema como resuelto.


Muchas gracias!

WHK

#8
Supongo que antes de hacer todas estas pruebas has configurado tu cuenta de gmail para habilitar la conexión de aplicaciones de terceros o inseguras, a demás de habilitar el servicio smtp.

Por defecto cuando gmail detecta que te estás conectando desde una dirección IP no común y que a demás no pertenece al mismo pais donde siempre te conectas, te bloquea la conexión por motivos de seguridad.

Debes ir a las configuraciones de tu cuenta e indicar que vas a permitir que tu servidor se pueda conectar a tu cuenta de gmail, no es un proceso facil, es bastante tedioso, despues deberás resolver una captcha y entrar en un enlace que te envían por correo.

https://devanswers.co/allow-less-secure-apps-access-gmail-account/
https://support.google.com/accounts/answer/6010255?hl=es

No has pensado en utilizar sendmail para enviar los correos de manera nativa via php utilizando mail()? asi no necesitarás una cuenta de gmail, recuerda que gmail te limita la cantidad de envíos y remitentes por día.

https://stackoverflow.com/questions/12301358/send-attachments-with-php-mail#answer-12313090
https://www.codexworld.com/send-email-with-attachment-php/