Esto lo tuve que implementar ya que en el servidor donde esta el sitio para el cual es el formulario que la utiliza, no funciono jamás con la funcion mail() de PHP.
Ahora bien, en mi hosting hice la prueba y luego de algunos errores puede hacerlo funcionar. Ahora bien, en el servidor en donde alojo el sitio con problemas el mismo código también dio errores al principio hasta que logre corrigiendo algunos parámetros que me de el mensaje de “éxito”
Hasta donde entiendo, si el mensaje es positivo, se supone que la conexión con el SMTP fue exitosa y el posterior envío del mail se realiza, a diferencia de la funcion mal() que solo nos informa si el mail fue enviado al SMTP.
Les dejo el código por si acaso:
Pero les recuerdo que en mi hosting comercial me funciona perfectamente, así que el problema esta en la configuración del SMTP del servidor en cuestión, supongo!
Desde ya muchas gracias a quien pueda darme una mano!!!
codigo PHP
Código php:
Ver original
<?php // para que no corte a los 30 segundos y muestre el verdadero error // primero hay que incluir la clase phpmailer para poder instanciar //un objeto de la misma include_once('includes/class.phpmailer.php'); //instanciamos un objeto de la clase phpmailer al que llamamos //por ejemplo mail $mail = new phpmailer(); //Definimos las propiedades y llamamos a los métodos //correspondientes del objeto mail //para que muestre los errores en español //$mail->SetLanguage("es", "includes/"); //Con PluginDir le indicamos a la clase phpmailer donde se //encuentra la clase smtp que como he comentado al principio de //este ejemplo va a estar en el subdirectorio includes $mail->PluginDir = "includes/"; //Con la propiedad Mailer le indicamos que vamos a usar un //servidor smtp $mail->Mailer = "smtp"; //Indicamos el puerto que sera diferente al 25 $mail->Port = "1025"; //Asignamos a Host el nombre de nuestro servidor smtp $mail->Host = "IPdelsmtp"; //Le indicamos que el servidor smtp requiere autenticación //$mail->SMTPAuth = true; //Le decimos cual es nuestro nombre de usuario y password //$mail->Username = "infoserver"; //$mail->Password = "xxxxxx"; //declaro las variables From y FromName $emailfrom=$_POST["mail"]; $nombrefrom=$_POST["nombre"]; //Indicamos cual es nuestra dirección de correo y el nombre que //queremos que vea el usuario que lee nuestro correo $mail->From = $emailfrom; $mail->FromName = $nombrefrom; //el valor por defecto 10 de Timeout es un poco escaso dado que voy a usar //una cuenta gratuita, por tanto lo pongo a 30 $mail->Timeout=30; //Indicamos cual es la dirección de destino del correo $mail->AddAddress("info@mailserver"); //cambiamos el formato de fecha y hora al español $nommes = array(Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Septiembre, Octubre, Noviembre, Diciembre); //Asignamos asunto y cuerpo del mensaje //El cuerpo del mensaje lo ponemos en formato html, haciendo //que se vea en negrita $mail->Subject = "Desde el Sitio"; $mail->Body = "<b>** Formulario Web **</b></br></br> ESCRIBIO: <b>" .$_POST["nombre"]."</b></br> EMPRESA: " .$_POST["empresa"]."</br> CARGO: " .$_POST["cargo"]."</br> PAIS: " .$_POST["pais"]."</br> TELEFONO: " .$_POST["telefono"]."</br> E-MAIL: " .$_POST["mail"]."</br></br> CONSULTA: " .$_POST["comentarios"]."</br></br> ** Mensaje enviado el ".$fecha." **.</br> ** El remitente accedio al formulario desde el sitio en ".$_POST["idioma"]." **.</br>"; //asignamos el tipo de caracteres que soportara el cuerpo del mail $mail->CharSet = "UTF-8"; //$mail->Body = utf8_decode(); //Definimos AltBody por si el destinatario del correo no admite email con formato html $mail->AltBody = "** FORMULARIO WEB **"."\n\n ESCRIBIO: " .$_POST["nombre"]."\n EMPRESA: " .$_POST["empresa"]."\n CARGO: " .$_POST["cargo"]."\n PAIS: " .$_POST["pais"]."\n TELEFONO: " .$_POST["telefono"]."\n E-MAIL: " .$_POST["mail"]."\n\n CONSULTA: " .$_POST["comentarios"]."\n\n\n\n ** Mensaje enviado el ".$fecha." **"."\n ** El remitente accedio al formulario desde el sitio en ".$_POST["idioma"].". **"."\n"; //se envia el mensaje, si no ha habido problemas //la variable $exito tendra el valor true $exito = $mail->Send(); //Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas como mucho //para intentar enviar el mensaje, cada intento se hara 5 segundos despues //del anterior, para ello se usa la funcion sleep $intentos=1; while ((!$exito) && ($intentos < 5)) { //echo $mail->ErrorInfo; $exito = $mail->Send(); $intentos=$intentos+1; } if(!$exito) { echo "Problemas enviando correo electrónico a ".$valor; echo "<br/>".$mail->ErrorInfo; } else { echo "Mensaje enviado correctamente!!!"; echo "&estatus=ok&"; } ?>