Foros del Web » Programando para Internet » PHP »

Email no funciona

Estas en el tema de Email no funciona en el foro de PHP en Foros del Web. Hola tengo un problema en los formularios de contacto que no los recibo. He cambiado de servidor windows a linux. La version de php es ...
  #1 (permalink)  
Antiguo 13/07/2019, 17:38
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 7 años, 2 meses
Puntos: 10
Email no funciona

Hola tengo un problema en los formularios de contacto que no los recibo. He cambiado de servidor windows a linux. La version de php es 5.6.40. El error es:



Código HTML:
TypeError: data.error_msg is null<anonymous> mails.js:157
    jQuery 4
form.html


Código:
<script src="js/mails.js"></script>

 <form action="#">
                  <div class="form-group left">
                    <label class="sr-only" for="name">Nombre</label>
                    <input type="text" class="form-control" id="name" name="name" placeholder="Nombre" required />
                  </div>
                  <div class="form-group">
                    <label class="sr-only" for="phone5">Teléfono</label>
                      <input type="tel" pattern="^\d{3}\d{3}\d{3}$" class="form-control" id="phone4" name="phone" placeholder="Teléfono (123456789)" required />
                  </div>
                  <div class="form-group">
                    <label class="sr-only" for="msg">Mensaje</label>
                    <textarea class="form-control" id="msg" name="msg" placeholder="Mensaje" rows="4" required ></textarea>
                  </div>
                  <div class="form-group" style=" font-size:13px">
                    <input type="checkbox" required /> Acepto la <a href="#" target="_blank">política de privacidad.</a>                    </div>  
                  <button class="btn btn-warning" type="submit">Enviar</button>
                </form>
mails.js


Código HTML:
$('#wsForm form').on('submit', function(){
            $.ajax({
              method: "POST",
              url: "msg.php",
              data: $(this).serialize(),
              dataType: 'json'
            }).done(function( data ) {
            if(!data.error)
            {
                $('#wsForm').html('<div class="form"><div class="text-center">Gracias, pronto le llamaremos!</div></div>')
            }
            else
            {
                $('<div class="alert alert-danger" role="alert">' +
                        data.error_msg.message +
                         '</div>').prependTo('#wsForm');
            }
          });
          return false;
        });
msg.php
Código HTML:
<?
$return = array();

$to      = '[email protected]';
$subject = 'the subject';
$headers = 'From: [email protected]' . "\r\n" .
        'Content-type: text/html' . "\r\n" .
    'Reply-To: [email protected]' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

$message = 'New message from the site<br/><br/>';
if($_REQUEST['name'])
    $message .= 'Name: '.$_REQUEST['name']."<br/>";
if($_REQUEST['phone'])
    $message .= 'Phone: '.$_REQUEST['phone']."<br/>";
if($_REQUEST['msg'])
    $message .= 'Message: '.$_REQUEST['msg'].'<br/>';

$success = mail($to, $subject, $message, $headers);
if (!$success) {
    $return['error'] = true;
  $return['error_msg'] = error_get_last();
}


die(json_encode($return));
Gracias

Última edición por satjaen; 13/07/2019 a las 18:10
  #2 (permalink)  
Antiguo 14/07/2019, 10:02
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 10 años, 2 meses
Puntos: 214
Respuesta: Email no funciona

Hola
El asunto es en msg.php
No esta definido el elemento msg en el array return de manera inicial,
con algún valor predeterminado, así sea vacío inicialmente,
que sería lo ideal pues esto indicaría que no hay error alguno.



__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 14/07/2019, 12:17
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 7 años, 2 meses
Puntos: 10
Respuesta: Email no funciona

Gracias por contestar pero el formulario si esta mandado los datos al archivo msg.php. Funcionaba bien en el servidor windows pero al pasar a linux ha sido cuando da error. Un saludo

Última edición por satjaen; 14/07/2019 a las 12:30
  #4 (permalink)  
Antiguo 14/07/2019, 21:00
 
Fecha de Ingreso: abril-2006
Mensajes: 314
Antigüedad: 13 años, 6 meses
Puntos: 60
Respuesta: Email no funciona

Cita:
Iniciado por satjaen Ver Mensaje
Gracias por contestar pero el formulario si esta mandado los datos al archivo msg.php. Funcionaba bien en el servidor windows pero al pasar a linux ha sido cuando da error. Un saludo
el problema es desde linux, tienes que tener estas
  1. Configuracion de la funcion "mail" desde el PHP.ini para que envie emails
  2. Tener habilitado la funcion "mail" algunos servidores lo capan hasta que el cliente los solicite
  3. EL email usado para envio , debe de estar en una Lista de Salida de correos(en el CPANEL se debe crear el nombre del email,y eso ingresa a la lista del servidor para que te permita enviar correos desde ahi es como medida de seguridad)
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.me/pools/c/87BTML2gwr
  #5 (permalink)  
Antiguo 15/07/2019, 14:08
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 7 años, 2 meses
Puntos: 10
Respuesta: Email no funciona

Hola ya me funcionan los emails con este código de PHPMailer:


Código HTML:
<?php
require("PHPMailer/class.phpmailer.php");
require("PHPMailer/class.smtp.php");
$mail = new PHPMailer();

//Luego tenemos que iniciar la validación por SMTP:
$mail->IsSMTP(); //Usar SMTP
$mail->SMTPAuth = true; // Usar autentificación 
$mail->Host = "mail.correo.es"; // SMTP a utilizar. Por ej. smtp.elserver.com
$mail->Username = "[email protected]"; // Correo completo a utilizar
$mail->Password = "root"; // Contraseña
$mail->Port = 25; // Puerto a utilizar
$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

//Con estas pocas líneas iniciamos una conexión con el SMTP. Lo que ahora deberíamos hacer, es configurar el mensaje a enviar, el //From, etc.
$mail->From = "[email protected]"; // Desde donde enviamos (Para mostrar)
$mail->FromName = "test"; // Nombre que aparecera en el correo.

//Estas dos líneas, cumplirían la función de encabezado (En mail() usado de esta forma: “From: Nombre <[email protected]>”) de //correo.
$mail->AddAddress("[email protected]"); // Esta es la dirección a donde enviamos
$mail->IsHTML(true); // El correo se envía como HTML
$mail->Subject = $_POST['asunto']; // Este es el titulo del email.
$body .="El email facilitado por el cliente es {$_POST['email']} <p> {$_POST['mensaje']}</p>"; // Contenido del mensaje.
$mail->Body = $body; // Mensaje a enviar
$exito = $mail->Send(); // Envía el correo.

//También podríamos agregar simples verificaciones para saber si se envió:
if($exito){
echo "El correo fue enviado correctamente.";
}else{
echo "Hubo un inconveniente. Contacta a un administrador.";
}
?>
pero quiero que me devuelva los resultados como en el archivo msg.php. Se puede hacer ?


msg.php
Código HTML:
<?
$return = array();

$to      = '[email protected]';
$subject = 'the subject';
$headers = 'From: [email protected]' . "\r\n" .
        'Content-type: text/html' . "\r\n" .
    'Reply-To: [email protected]' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

$message = 'New callback from sait<br/><br/>';
if($_REQUEST['name'])
    $message .= 'Name: '.$_REQUEST['name'].'<br/>';
if($_REQUEST['phone'])
    $message .= 'Phone: '.$_REQUEST['phone'].'<br/>';

$success = mail($to, $subject, $message, $headers);
if (!$success) {
    $return['error'] = true;
  $return['error_msg'] = error_get_last();
}


die(json_encode($return));
Gracias



La zona horaria es GMT -6. Ahora son las 08:20.