La función PHP mail() es utilizada comúnmente por formularios web del tipo “contáctenos“. Desafortunadamente ésta función, en la actualidad, se ha vuelto un riesgo potencial para los servidores.

Esta función presenta agujeros de seguridad graves que ayudan a los intrusos para acceder al sistema de archivos del usuario y desencadenar actividades maliciosas.

Ahora veamos en qué consiste esta vulnerabilidad. Supongamos que el formulario nos solicita nuestra dirección de correo, tendríamos un etiqueta input como la siguiente:
<input type="email" id="mail" name="email" />
Al pulsar el botón de enviar la información llegaría al servidor y la función mail() tomaría la dirección de correo para usarla como desde en el envío del email. Pero, ¿qué pasaría si en vez de una dirección de correo, le metieramos un script malicioso como el siguiente?
“spam@emailfalso.com%0ACc:email@victima.com”
La función mail() tomaría a spam@emailfalso.com como el parámetro desde: (dirección del que nos envía el correo),  email@victima.com como parámetro  Cc: (Direcciones que recibirán el email). %0A es simplemente el valor hexadecimal de un salto de línea.

Así de sencillo es para un spammer utilizar la función mail() para enviar emails a sus víctimas, por tanto, y como se ha comentado antes, es muy recomendable no utilizar esta función.

Para evitar que tu cuenta de hosting sea hackeada o vulnerada por intrusos indeseables, es importante discontinuar el uso de la función PHP mail() en tu cuenta lo antes posible.

PHPMailer con autenticación SMTP


En su lugar, es aconsejable utilizar la función PHPmailer con autenticación SMTP, lo que permite que el email no sea enviado en forma anónima desde el Formulario Web, sino más bien, que corresponda a un envío autorizado por la cuenta de hosting que lo utiliza.
PHPMailer es una biblioteca de códigos para enviar (transportar) correos electrónicos de forma segura y fácilmente a través del código PHP desde un servidor web.
El envío de correos electrónicos directamente por código PHP requiere una familiaridad de alto nivel con el protocolo estándar SMTP (RFC 821, RFC 2821 y RFC 5321) y problemas relacionados (como el retorno de carro ) y vulnerabilidades sobre la inyección de correo electrónico para envío de correo basura . Desde 2001, PHPMailer es una de las soluciones populares para estos asuntos en PHP. Ver en github...
Ahora bien, para poder utilizar ésta función, es necesario armar un archivo .php, para hacerlo, simplemente copia y pega el código “ejemplo” provisto más abajo en un archivo de tu editor de HTML favorito y guárdalo en formato .php, por ejemplo, envio.php

Tú solamente deberás reemplazar la información que corresponda al servicio SMTP del correo electrónico de tu cuenta de hosting.

Ahora recordemos que significa servicio SMTP: En términos humanos y comprensibles, el SMTP (Simple Mail Transfer Protocol, o protocolo simple de transferencia de correo) es un protocolo básico que permite que los emails viajen a través de Internet. Es decir, es un protocolo de mensajería empleado para mandar un email de un servidor de origen a un servidor de destino. Este procedimiento, indispensable en el proceso de envío de emails, es completado por el servidor SMTP.

Qué es el servidor SMTP: El servidor SMTP es un ordenador encargado de llevar a cabo el servicio SMTP, haciendo las veces de “cartero electrónico” y permitiendo el transporte de ese correo electrónico por Internet. La retransmisión SMTP funciona de un modo muy sencillo: si el servidor SMTP confirma las identidades del remitente y del destinatario, entonces el envío se realiza.

Digamos que es como la oficina de correos de la web: recoge el email del remitente y lo entrega en la oficina de correos local del destinatario, que es otro servidor SMTP. Nació en 1982 y sigue siendo el estándar de Internet más utilizado a día de hoy.

Código de ejemplo para hacer nuestro archivo de envio.php

<?php
require("class.phpmailer.php");
require("class.smtp.php");

$mail = new PHPMailer();

$mail->IsSMTP();  // set mailer to

$mail->Host = "mail.tu-nombre-de-dominio.com";  // specify main and backup server
$mail->SMTPAuth = true;  // turn on SMTP authentication
$mail->Username = "tu-correo@tu-nombre-de-dominio.com";  // SMTP username
$mail->Password = "tu-contraseña"; // SMTP password

$mail->From = "prueba@tu-nombre-de-dominio.com";
$mail->FromName = "remitente";  // remitente
$mail->AddAddress("tu-correo@tu-nombre-de-dominio.com", "destinatario");  // destinatario

$mail->AddReplyTo("tu-correo@tu-nombre-de-dominio.com", "respuesta a");  // responder a

$mail->WordWrap = 50;  // set word wrap to 50 characters
$mail->IsHTML(true);  // set email

$mail->Subject = "Asunto .....";
$mail->Body    = "This is the HTML message body <b>in bold!</b>";
$mail->AltBody = "This is the body in plain text for non-HTML mail clients";

if(!$mail->Send())
{
   echo "Message could not be sent. <p>";
   echo "Mailer Error: " . $mail->ErrorInfo;
   exit;
}

echo "Message has been sent";
?> 
Puedes descargar un pequeño ejemplo donde solo deberás modificar el archivo enviar.php y luego publicarlo en tu sitio. Haz clic aquí para descargar el archivo.

  • Si quieres descargar la clásica biblioteca de envío de correo electrónico para PHP - PHPMailer
Si bien es un procedimiento sencillo, requiere algo de conocimiento en php, por lo tanto no te asustes si no logras hacerlo funcionar, recuerda que estamos para ayudarte, si necesitas ayuda no olvides dejar algún comentario, con gusto te ayudaremos.
Compartir
Tutoriales En Linea

Mi nombre es Alexander fundador y CEO, y me gusta llamarme un Geek. Amo la informática, tecnología y todo lo que está relacionado con ella. Inicié este sitio con la intención de compartir conocimientos como cursos en línea, tutoriales y videotutoriales. Estoy muy entusiasmado con la información que he descubierto y compartido hasta el momento. La verdad es que lo he hecho con el mayor de los gustos. Así es, soy un Geek con una visión para compartir conocimiento. Leer mas...