Plesk sigue teniendo algunos defectos , uno de ellos es que a veces se pierde la integridad referencial en algunas tablas como las tablas mail y accounts, que provoca el fallo de las cuentas de correo. Este fallo puede ser :
- The error that the other server returned was: 550 550 sorry, no mailbox here by that name. (#5.7.17)
- The error that the other server returned was: 451 451 qq internal bug (#4.3.0)
- O bien que al acceder a las propiedades de la cuenta de correo o intentar eliminar la cuenta, obtengamos este error en Plesk :
ERROR: PleskFatalException Error: Can't create Account object: Account: unable to select: no such row in the table 0: common_func.php3:146 psaerror(string 'Error: Can't create Account object: Account: unable to select: no such row in the table') 1: client.domain.mail.mailname.php:86 plesk__client__domain__mail__mailname->accessItemOverview(string 'GET', NULL null) 2: client.domain.mail.mailname.php:160 __plesk__client__domain__mail__mailname->accessItem(string 'GET', NULL null) 3: UIPointer.php:596 UIPointer->access(string 'GET') 4: plesk.php:38
Pongamos el supuesto que en mi servidor tengo dos dominios uno que se llama hostingaldescubierto.com y otro senin.org y que la cuenta que falla con el error de antes es contacto@senin.org.
Vamos a lanzar esta consulta en la base de datos para localizar los registros huérfanos en la taba de mail con accounts.
select domains.name, mail.mail_name, accounts.id, accounts.password from domains, mail left join accounts on mail.account_id = accounts.id where domains.id = mail.dom_id and accounts.id IS null; +--------------------------+-------------+------+----------+ | name | mail_name | id | password | +--------------------------+-------------+------+----------+ | hostingaldescubierto.com | basura | NULL | NULL | | senin.org | contacto | NULL | NULL | +--------------------------+-------------+------+----------+ 2 rows in set (0.01 sec)
Ahora podemos hacer dos cosas o bien borrar la cuenta de correo de la tabla mail o bien insertar una entrada en la tabla accounts. El único problema que puede haber si borramos la entrada en la tabla mail, es que si volvemos a crear la cuenta de correo podría ser que plesk eliminase el buzón con el contenido y lo crease de nuevo, pero no estoy totalmente seguro de esto o si ocurriría en todas las versiones. Yo opto por insertar los registros que falten.
Podríamos proceder generando los valores a insertar en la tabla accounts, y generando unas passwords aleatorias :
select mail.account_id, 'plain', SUBSTRING(MD5(RAND()) FROM 1 FOR 8) from domains, mail left join accounts on mail.account_id = accounts.id where domains.id = mail.dom_id and accounts.id IS null;
Nos devuelve :
+------------+------+-------------------------------------+ | account_id | text | SUBSTRING(MD5(RAND()) FROM 1 FOR 8) | +------------+------+-------------------------------------+ | 1550 | text | 764dd7d1 | | 2310 | text | cdc15fc4 | +------------+------+-------------------------------------+
Con lo que montamos la sentencia INSERT y quedaría así:
INSERT INTO accounts select mail.account_id, 'plain', SUBSTRING(MD5(RAND()) FROM 1 FOR 8) from domains, mail left join accounts on mail.account_id = accounts.id where domains.id = mail.dom_id and accounts.id IS null; Query OK, 2 rows affected (0.04 sec) Records: 2 Duplicates: 0 Warnings: 0
y ahora verificamos que haya quedado corregido con la primera consulta:
select domains.name, mail.mail_name, accounts.id, accounts.password from domains, mail left join accounts on mail.account_id = accounts.id where domains.id = mail.dom_id and accounts.id IS null; Empty set (0.01 sec)
Y así tenemos corregido el problema con tan solo copiar y pegar.
Deja una respuesta