Espero que este mensaje le sirva a quien, como yo, haya estado preocupado por la configuración de las funciones de correo electrónico en la versión 1.8.8.4., y más concretamente los mensajes de reenvío de contraseña.
En otro post (http://www.chamilo.org/forum/viewtopic.php?f=15&t=1513&hilit=smtp) se explica muy bien que el archivo en el que se configura el correo saliente está en /main/inc/conf/mail.conf.php
La configuración que me ha funcionado en un servidor linux ha sido:
- Code: Select all
$platform_email['SMTP_FROM_EMAIL'] = (isset($administrator['email'])?$administrator['email']:'admin@example.com');
$platform_email['SMTP_FROM_NAME'] = (isset($administrator['name'])?$administrator['name']:'John Doe');
$platform_email['SMTP_HOST'] = 'mail.psicologiadeportiva.net';
$platform_email['SMTP_PORT'] = 587;
// $platform_email['SMTP_MAILER'] = IS_WINDOWS_OS ? 'smtp' : 'mail'; // mail, sendmail or smtp
$platform_email['SMTP_MAILER'] = 'smtp'; // mail, sendmail or smtp
$platform_email['SMTP_AUTH'] = 1; // Default: 0
$platform_email['SMTP_USER'] = 'user@server';
$platform_email['SMTP_PASS'] = 'password';
$platform_email['SMTP_CHARSET'] = api_get_system_encoding();
Hay que tener en cuenta que mi servidor no usaba el puerto habitual, por lo que he cambiado ese parámetro a 587. También he forzado el valor de SMTP_MAILER a 'smtp' para evitar que se utilizase la función mail() de php por defecto.
Tras configurarlo de esta forma los mensajes de los administradores a los usuarios, así como los mensajes entre usuarios envían una notificación por email (dependiendo de cómo esté configurada la plataforma, claro).
A partir de ahí, lo más complicado ha sido encontrar la razón por la que no se enviaban los mensajes de recuperación de contraseñas. Tras múltiples pruebas, he encontrado que la función api_mail es la que se encarga de enviar estos emails, que se encuentra en /main/inc/lib/mail.lib.inc.php
En la línea 33 aparece:
- Code: Select all
if (api_valid_email($recipient_email)) {
return 0;
}
de este modo se solicita que se compruebe mediante otra función si la dirección a la que hay que enviar el email es válida. Como esta función devuelve el mismo email que se le pasa, es un error interrumpir la función api_mail cuando el email es válido. Por tanto, hay que interrumpirla cuando ocurra lo contrario:
- Code: Select all
if ((api_valid_email($recipient_email)) == false) {
return 0;
}
Yo he cambiado el código de arriba por el de abajo y ya se realizan correctamente todos los reenvíos de contraseñas.
Espero que a alguien más le sirvan las horas que he perdido en esto.
Un saludo.
