* There is essentially no error handling. We report errors, but we don't fail when we see one. The main reason for this is that we don't know when each plugin will be run. If the first plugin encounters an error, we could quit right there. But what if the third one fails after the first two succeed? We would need some kind of rollback mechanism. For "mv", a rollback is conceivable. But with "rm", there's no going back. Maybe relying on the user to interpret the output and go fix stuff himself is the best we can do? * Add OpenDKIM support. * Rename the "dovecot" plugin to "filesystem". * Implement moving of domains. * The AgenDAV "user exists" test is wonky, because there's no real users in AgenDAV. Right now we check the "username" column in the "prefs" table, but all of the shares (and principals?) have URLs instead of usernames. We don't parse the URLs, and instead rely on doing find/replace of substrings in e.g. AgendavMv. In particular, this means that AgenDAV pruning does not work! If a user with default preferences is deleted, we don't notice. * mailshears --help crashes before doing what it should just do: $ mailshears --help ERROR: prune mode takes no additional arguments. * The "pretend mode" output is missing the destination information: # mailshears mv "test1@example.com" "test2@example.com" mailshears, 2020-01-30 14:40:09 -0500 (Plugin: MvPlugin) -------------------------------------------------------- AgendavMv - Would move user test1@example.com (User not found) to . DavicalMv - Would move user test1@example.com (User not found) to . DovecotMv - Would move user test1@example.com (/var/spool/mail/vhosts/example.com/test1) to . PostfixadminMv - Would move user test1@example.com to . RoundcubeMv - Would move user test1@example.com (User not found) to .