En los últimos día recibí 2 reportes de errores del servidor de alumnos de docentes que enviaban correos a sus alumnos y estos rebotaban indicando que los buzones no existían.
Después de urgar un rato, encontré el problema, el cual se encontraba en la configuración predeterminada de cyrus-imapd y postfix.
Con las pruebas que realice inicialmente nunca me rebotó un correo. Y las cuentas que registraban rebotes, también habían recibido correo, es decir, bajo ciertas circunstancias se producía el error (Mailbox doesn't exist).
Ví diferentes reportes de errores en las listas de correo de cyrus y postfix, pero ninguna correspondía.
Revisando los logs y con la ayuda de mailq logré determinar que si un correo tenía más de un destinatario en algún campo (To, CC) sólo al primero le llegaba el mensaje, y se producía un rebote por el resto de los destinatarios del servidor de alumnos.
Como cyrus maneja en forma distinta los buzones de correo (1 directorio para el usuario, y 1 archivo por cada mensaje) es necesario que el programa deliver realice la entrega de los mensajes. La configuración original en el archivo /etc/postfix/master.cf
cyrus unix - n n - - pipe
flags=R user=cyrus argv=/usr/cyrus/bin/deliver -e -m ${extension} ${user}
La opción -m se le debe indicar el mailbox, normalmente con el formato:
deliver -m user mi_cuenta
El cual sólo funciona bien si es 1 sólo parámetro mi_cuenta. Por lo tanto, es mejor indicarle (cyrus 2.0.x) que busque el archivo en forma local (de acuerdo a la configuración en /etc/imapd.conf), eliminando la opción de mailbox con los argumentos ${extension} ${user}. De esta forma quedó como:
cyrus unix - n n - - pipe
flags=R user=cyrus argv=/usr/cyrus/bin/deliver -q -r ${sender} -e ${user}
Aproveche añadir las opciones -q y -r, la primera permite despachar los mensajes aún si el usuarios se ha excedido en la cuota, y la segunda, añade al encabezado del mensaje el campo Return-Path con el el emisor.
Finalmente, comencé a afinar los parámetros de los principales servicios... que cuento más tarde.