En la Facultad contábamos con un servidor de correo Qmail con squirremail como interfaz web.
El mismo se encontraba totalmente saturado, prácticamente a las horas picos no se podía ingresar:
Con todas estas causas y las quejas constantes acerca del funcionamiento del correo se hacía totalmente insostenible seguir con qmail
Nos pareció la mejor solución libre existente en la actualidad, sus funcionalidades, interfaz web y fácil administración era lo que mejor se adaptaba a la Facultad.
Teníamos dos caminos:
Finalmente optamos por la opción de crear un "Asistente" que hiciera transparente el traspaso de un servidor a otro, este nos serviría para recabar datos de los usuarios activos y ahorrarle trabajo al usuario final y a nosotros mismos.
El mismo debería ser web, para eso utilizamos PHP como lenguaje y mysql para crear la base de datos.
Las principales funciones:
function ssh_login($usuario, $clave){ // Primero verificamos que la funcion SSH2 exista, si no existe no va a funcionar if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist"); // nos conectamos con el servidor mediante el puerto 22 if(!($con = ssh2_connect("li", 22))){ return false; //verifiquen que el server tenga habilitada la autenticacion con password si no no funciona } else { // aqui se autentica con usuario y contraseña del servidor SSH if(!ssh2_auth_password($con, $usuario, $clave)) { return false; } else { // ya estamos dentro del servidor return true; } } }
Recordemos que los usuarios deben de estar creados en los dos servidores, para evitar la perdida de correos electrónicos. Así que simplemente lo que debe hacer el asistente es actualizar la cuenta zimbra
function CrearCuentaZimbra($mail,$pass,$nombre,$apellido,$lugar){ //$comando="zmprov ca ".$mail." ".$pass." gn '".$nombre."' sn '".$apellido."' zimbraMailQuota 2147483648 company "."'".$lugar."'"." displayName '".$nombre." ".$apellido."'"; // primero modificamos la clave $comando1 = "zmprov sp ".$mail." ".$pass; //luego modificamos los datos de la cuenta $comando2 = "zmprov ma ".$mail." company "."'".$lugar."'"." displayName '".$nombre." ".$apellido."' gn '".$nombre."' sn '".$apellido."' co Uruguay" ; $servidor="correo.psico.edu.uy"; $usuario="zimbra"; $clave="xxxxx"; ejecutar_comando($servidor,$usuario,$clave,$comando1); ejecutar_comando($servidor,$usuario,$clave,$comando2); }
Necesitaremos de una función para conectarnos al servidor Zimbra y poder ejecutar los comandos:
function ejecutar_comando($servidor,$usuario,$clave,$comando){ if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist"); // nos conectamos con el servidor mediante el puerto 22 if(!($con = ssh2_connect($servidor, 22))){ //verifiquen que el server tenga habilitada la autenticacion con password si no no funciona } else { // aqui se autentica con usuario y contraseña del servidor SSH if(!ssh2_auth_password($con, $usuario, $clave)) { } else { // ya estamos dentro del servidor // le mandamos a ejecutar un comando mediante una consola if (!($stream = ssh2_exec($con, $comando))) { // echo "fallo, no se puede enviar el comando"; } else { // recolectamos la data que nos arrojo el comando stream_set_blocking($stream, true); $data = ""; while ($buf = fread($stream,4096)) { $data .= $buf; } //importante cerrar o puede que nos rechaze la proxima conexion fclose($stream); } } }
Para sincronizar las cuentas utilizaremos imapsync, el cual debe estar previamente instalado en uno de los servidores. Nosotros optamos por instalarlo en el servidor Zimbra, ya que era mucho más "potente".
function ImportarImap($login,$pass){ $comando = "imapsync -host1 li.psico.edu.uy -user1 ".$login." -password1 ".$pass." -host2 correo.psico.edu.uy -user2 ".$login."@psico.edu.uy -password2 ".$pass." -noauthmd5"; ejecutar_comando("servidor","usuario","clave",$comando); }