MailEnable permite la importación de contactos a partir de un fichero CSV, pero no así la exportación, de forma que lo que el usuario introduce no tiene forma de extraerlo posteriormente. A no ser que sea el administrador, claro, en cuyo caso lo puede hacer a partir de los ficheros vCard que se encuentran en C:\plesk\Mail Servers\Mail Enable\Postoffices\dominio.tld\MAILROOT\usuario en el caso de un servidor con Plesk 9.

Estos ficheros requieren algo de procesamiento para poder dejarlos al gusto de RoundCube, ya que éste es capaz de importar un único fichero vCard con todos los contactos juntos, en UTF-8 sin utilizar codificación QP. Así, pues, mediante las siguientes líneas de Python y un par de comandos, lo podemos dejar correctamente.

# This Python file uses the following encoding: utf-8
'''
qputf8: Elimina el quoted printable UTF-8 de un fichero
Created on 17/10/2011
@author: Vicente Monroig (Digital Disseny)
'''

import os
import sys

# Obtenemos la ruta donde se está ejecutando el archivo
ruta = os.path.dirname(os.path.abspath(__file__)) + '/'
# Recogemos los parámetros de entrada o mostramos la ayuda
if (len(sys.argv) > 1):
    entrada = sys.argv[1]
    if (len(sys.argv) > 2):
        salida = sys.argv[2]
    else:
        salida = entrada + '.OK'
    print "Procesando fichero " + entrada + "..."
    fentrada = open(ruta + entrada, "r")
    fsalida = open(ruta + salida, "w")
    lista = []
    while True:
        linorig = fentrada.readline()
        if not linorig: break
        # Si hay una cadena UTF-8, la procesamos
        lin = linorig.replace('=?UTF-8?Q?', '')
        if (lin != linorig):
            lin = lin.replace('=C3=80', 'À')
            lin = lin.replace('=C3=81', 'Á')
            lin = lin.replace('=C3=88', 'È')
            lin = lin.replace('=C3=89', 'É')
            lin = lin.replace('=C3=8C', 'Ì')
            lin = lin.replace('=C3=8D', 'Í')
            lin = lin.replace('=C3=92', 'Ò')
            lin = lin.replace('=C3=93', 'Ó')
            lin = lin.replace('=C3=99', 'Ù')
            lin = lin.replace('=C3=9A', 'Ú')
            lin = lin.replace('=C3=87', 'Ç')
            lin = lin.replace('=C3=91', 'Ñ')
            lin = lin.replace('=C3=A0', 'à')
            lin = lin.replace('=C3=A1', 'á')
            lin = lin.replace('=C3=A8', 'è')
            lin = lin.replace('=C3=A9', 'é')
            lin = lin.replace('=C3=AC', 'ì')
            lin = lin.replace('=C3=AD', 'í')
            lin = lin.replace('=C3=B2', 'ò')
            lin = lin.replace('=C3=B3', 'ó')
            lin = lin.replace('=C3=B9', 'ù')
            lin = lin.replace('=C3=BA', 'ú')
            lin = lin.replace('=C3=A7', 'ç')
            lin = lin.replace('=C3=B1', 'ñ')
            lin = lin.replace('=C2=AA', 'ª')
            lin = lin.replace('=C2=BA', 'º')
            lin = lin.replace('?=', '')
        # De paso, cambiamos los _ por espacios, con cuidado con las direcciones de e-mail
        if (not '@' in lin):
            lin = lin.replace('_', ' ')
        if (lin != linorig):
            print "Sustituída la línea " + linorig + " por " + lin + "."
        fsalida.write(lin)
    fentrada.close()
    fsalida.close()
    print("Fichero " + salida + " generado en %s." % ruta)
else:
    print """
Información:
    qputf8 es una pequeña utilidad que busca y elimina las cadenas codificadas como quoted printable en UTF-8
    dentro de un fichero de texto, transformándolo a su equivalente de texto "normal". Así, por ejemplo:
        ?UTF-8?Q?G=C3=B3mez_Domin=C3=B3?=;
    pasa a ser
        Gómez Dominó;
Uso:
    qputf8.py  []
       """

Con los siguientes comandos ejecutamos la utilidad en todos los ficheros y después creamos un único vCard:

find contactos/*.VCF -exec python qputf8.py {} \;
cat contactos/*.VCF.OK > todos.VCF

En cuanto a los grupos, no he encontrado nada, aunque tampoco le he dedicado mucho tiempo, así que cualquier sugerencia es bienvenida.