viernes, 11 de noviembre de 2016

Como enviar correo con PHP en servidor que no permite la función mail()



Como enviar correo con PHP

Me he encontrado con un hosting o servidor compartido en el cuál daba problemas para enviar ,mediante php, un simple correo HTML con la función mail().

Y bien el problema reside que hay servidores compartidos que por seguridad no permiten el envío de correo por lo que la utilización de una función tan simple e importante como mail() no se puede utilizar ya sea porque no funciona o porque envía cuando quiere (lo que me ha ocurrido a mi).



Para solucionar esto, y gracias al soporte técnico del servidor que me dio las pautas, se puede usar el siguiente código que quiero compartir para aquellas personas que les ocurra lo mismo y no saben como solucionarlo. Si esto les puede ayudar estaría contento con ello. Vamos allá:

error_reporting( E_ALL & ~( E_NOTICE | E_STRICT | E_DEPRECATED ) ); //Aquí se genera un control de errores "NO BORRAR NI SUSTITUIR"
require_once "Mail.php"; //Aquí se llama a la función mail "NO BORRAR NI SUSTITUIR"
include 'Mail/mime.php' ;
$to = 'prueba@ejemplo.com'; //Aquí definimos quien recibirá el formulario
$from = 'prueba@ejemplo.com'; //Aquí definimos que cuenta mandará el correo, generalmente perteneciente al mismo dominio
$host = 'smtp.ejemplo.com'; //Aquí definimos cual es el servidor de correo saliente desde el que se enviaran los correos
$username = 'prueba.ejemplo.com'; //Aquí se define el usuario de la cuenta de correo
$password = 'Asdf1234'; //Aquí se define la contraseña de la cuenta de correo que enviará el mensaje
$subject = 'Su asunto'; //Aquí se define el asunto del correo
$body = 'Su mensaje
';//Aquí se define el cuerpo de correo
$crlf = "\n";
$text="El texto que aparecerá si no llega el email en formato HTML";
//A partir de aquí empleamos la función mail para enviar el formulario
$headers = array ('From' =$from,
'To' =$to,
'Subject' = $subject);
$smtp = Mail::factory('smtp',
array ('host' = $host,
'auth' =" true",
'username' =$username,
'password' =$password));
$mime = new Mail_mime(array('eol' = $crlf));
$mime->setTXTBody($text);
$mime->setHTMLBody($body);
$body = $mime->get();
$hdrs = $mime->headers($headers);
$mail =& Mail::factory('mail');
$mail = $smtp->send($to, $headers, $body);
//Una vez aquí habremos enviado el mensaje mediante el formulario
if (PEAR::isError($mail)) {
echo("
" . $mail->getMessage() . "");
} else {
echo "Mensaje enviado desde POA a ". $to ;
};
Las librerías Mail y Mail_mime la podéis encontrar en:
Mail
Mail_mime

Al revisar los enlaces veis que se utiliza la función mail() pero al venir acompañada de una conexión al servidor smtp de correo y con autenticación hace que el servidor no rechace el envío.

Mail_MIME se utiliza para poder mandar el correo en formato HTML, sino no se podría utilizar correo con etiquetas html, lo cual hoy en día a un correo para un cliente o cualquier otra persona es básico que tenga un mínimo de formato. Aunque esto último es opcional, también se puede mandar el correo sin formato HTML, ya eso lo dejo a elección del que quiera.

Gracias al soporte técnico y al blog de JOSÉ MANUEL MARTOS RODRÍGUEZ para poder poner el código correctamente en él.

No hay comentarios:

Publicar un comentario