Ya que acabo de hablar de mandar correos utilizando Spring voy a retomar el tema del envío de correos desde php. Recordaba que en su día había posteado algo al respecto, y debo pedir disculpas si en su día alguien confió de ese post y no le funcionó. Lo que puse ahí mejoraba ligeramente lo que se solía explicar habitualmente pero en muchos escenarios y en años posteriores eso es raro que funcione. De todas formas ese post era del 2006, casi na.

La mítica función mail de PHP

¿De qué dispone php para mandar emails? Muy fácil, una función llamada mail, tu pones $to, $subject, texto del mensaje y ya funciona, y eso es así porque lo decía el manual y porque lo han dicho miles de personas en internet. Puede que funcione pero en entornos concretos y de churro, y es que los emails no se mandan así como así. Para empezar en windows ya no funcionaba porque se tiraba de sendmail pero eso no es lo único.

Logo de spamassassin

Hace años ya se decía que la mitad de los emails que circulan por la red son basura. Ahora no me quiero ni imaginar. Por ese motivo los ISP y los sufridos sysadmin han ido apretando el culo a los servidores SMTP o dicho de forma más seria han aplicado políticas como el Sender Policy Framework. Los correos dan mucho trabajo, te pueden meter tu servidor en una lista negra, los filtros antispam se pasan de filtrar, etc...

El caso es que, por todas esas restricciones que se van imponiendo, tú no puedes hacer un programa para mandar emails y mandárlos sin más poniendo cualquier dirección de origen. O igual puedes hacerlo a través de un servidor con el relay abierto. La función mail de php debiera refactorizarse a mail_viva_la_virgen() porque eso no tiene ninguna garantía de funcionamiento. Hay que mandar corres de forma legítima. ¿Cómo? usando una cuenta de smtp autentificado. Es decir, para mandar un correo lo haces a través de un servidor smtp pero primero te validas. Entonces ese servidor SÍ, te dejará mandar todos los emails que quieras.

Enviar emails como dios manda

La función mail es un juguete así que olvídate de ella. Por suerte disponemos desde el siglo pasado con el framework PEAR, que provee un montón de librerías para mil cosas distintas. Y entre otras dispone del módulo de email. Elijo PEAR porque es oficial, es estándar y en cualquier sistema lo tendrás disponible. Aquí tienes un ejemplo de función php que manda un email a través de smtp autentificado:

// Esta es la función que manda el correo.
public function sendemail ($to,$subject,$message,$bcc="putin@snowden.ru")
        {

                        ini_set('include_path', '/usr/share/pear');
                        require_once "Mail.php";

                        $from = "TUCUENTA@guardianesdelaortodoxia.com";

                        $host = "ssl://smtp.gmail.com";  // Cada uno verá
                        $port = "465";  // o puede ser 587 (STARTTLS)
                        $username = "TUCUENTA@guardianesdelaortodoxia.com";
                        $password = "PON AQUÍ TU PASSWORD";

                        $headers = array ('From' => $from,
                                        'To' => $to,
                                        'Bcc' => $bcc,
                                        'Subject' => $subject);

                        $smtp = Mail::factory('smtp',
                                        array ('host' => $host,
                                                        'port' => $port,
                                                        'auth' => true,
                                                        'username' => $username,
                                                        'password' => $password));

                        $mail = $smtp->send($to, $headers, $message);

                        if (PEAR::isError($mail)) {
                                //return "

" . $mail->getMessage() . "

"); return false; } else { return true; } }

Al igual que pasaba con Spring, la única dificultad que te queda, aparte de tener el módulo PEAR instalado es dar con la configuración correcta de SMTP. Por cierto ya que he mencionado cosas viejunas, la mítica web de php ya tiene una versión beta...