Changelog
- Mar 29 , 2025
- defaultdelivery feature (--enable-defaultdelivery) changes:
*vdelivermailis installed by default in .qmail-default of newly created domains with option 'delete' as in the previous version.
* if no user'svaliasesand no .qmail are found, then the message is sent to the control/defaultdelivery file, so thatdovecot-lda(or whatelse) can store the mail into inbox and execute the sieve rules.
* ifvdelivermailis found in control/defaultdelivery, then the .qmail is ignored and the delivery remains in charge tovdelivermail, to avoid loops.
* v. 5.6.8 is backward compatible. The users having .qmail from previous versions of the defauldelivery feature are not affected by this change. - Jan 10, 2024
- fixed a bug in vpopmail which was preventing the correct auto creation of the valias table in MySQL
Tra i vari problemi che mi ero proposto di affrontare prima o poi credo di averne definitivamente risolto uno: l'impossibilità di avere le sieve rules e allo stesso tempo gli alias di vpopmail salvati su database (--enable-valias).
Ma prima di presentare le soluzioni, facciamo un po’ di chiarezza sul problema da risolvere, che tra l’altro è stato discusso più volte anche nei commenti di questo blog. Non a caso la soluzione da me individuata è stata in parte ispirata dalla (ri)lettura di alcuni post dei visitatori.
Il problema
Normalmente vpopmail copia il proprio delivery agent (vdelivermail) nel file .qmail-default file dei domini appena creati. Ciò rende impossibile usare i filtri di Dovecot basati sulle regole sieve, dato che questo richiederebbe l’utilizzo di Dovecot-LDA.
Per contro, se poniamo in .qmail-default il delivery agent di dovecot al fine di avere le sieve rules, quando l’utente userà i filtri per generare un reinoltro causerà senza volerlo la violazione delle regole SPF, perché qmail, essendo ora fuori causa, non potrà lanciare il programma SRS per riscrivere l’indirizzo del mittente. Per lo stesso motivo, gli alias salvati su MySQL sono irraggiungibili, quando si opta per Dovecot che non ha nulla a che fare con essi.
Sono problemi che conosciamo bene a causa delle mail di protesta degli utenti che si vedono rimbalzare indietro i loro messaggi di inotro. Ma ora ci daremo una sistemata una volta per tutte :-)
La soluzione
vdelivermail è installato come al solito nel file .qmail-default dei domini appena creati. Questo assicura che gli alias degli utenti siano eseguiti come prima cosa.
vdelivermail è stato modificato (vpopmail v5.6.8) affinchè giri le mail a control/defaultdelivery dopo aver controllato i virtual alias e il file .qmail dell'utente rispettivamente. A questo punto control/defaultdelivery può lanciare dovecot-lda e con esso eseguire le regole sieve.
E' importante sapere che control/defaultdelivery viene letto solo se l'utente non ha alias (sia del tipo dot-qmail che del tipo valias) e solo se control/defaultdelivery non contiene già vdelivermail. Gli utenti che lanciano dovecot-lda secondo le impostazioni di vpopmail precedenti alla versione 5.6.8 non devono cambiare nulla, poichè l'accoppiata valias/sieve continuerà a funzionare anche con le vecchie impostazioni, che non sono in conflitto con la nuova logica.
Riassumendo, questo è il modo in cui viene gestita la spedizione dei messaggi (si veda anche l'illustrazione più grande qui):
In tal modo l'eventuale gestione dei forward e con esso il lancio di srsfilter, sia nella modalità dot-qmail che nella modalià virtuale su MySQL/valias, viene fatta preventivamente da qmail/vpopmail, mentre il salvataggio definitivo dei messaggi e con essi l’esecuzione delle sieve rules (filtri) viene svolta successivamente da Dovecot, al momento dell’apertura del file .qmail dell’utente.
I forward su valias
Da ora in poi sarà anche possibile salvare i forward su MySQL (vpopmail compilato con –enable-valias). Inserirò questa impostazione in questa guida e ricordo perché ciò è importante.
Allo stato attuale delle cose la gestione di questi reinoltri (con eventuale copia in mailbox) sulle caselle utente può essere fatto solo tramite qmailadmin dall’amministratore del dominio, che ovviamente non ha il tempo per soddisfare certe richieste che, in un sistema organico e ben fatto, dovrebbero invece essere appannaggio dell’utente stesso.
Avere i forward utente su MySQL apre alla possibilità di costruire programmi web per la loro gestione, come ad esempio un plugin per Roundcube, cosa che infatti vi trovate nel pacchetto di programmi che sto rilasciando qui.
Aggiornamento del proprio server
vpopmail
La nuova patch defaultdelivery per vpopmail funziona diversamente rispetto a prima, ovvero secondo la logica illustrata sopra. E’ necessario scaricare la nuova patch e reinstallare vpopmail al solito modo.
Se si desidera, come credo, utilizzare i valias e con essi il mio plugin qmailforward plugin per Roundcube, è necessario compilare vpopmail con –enable-valias e successivamente aggiornare lo schema della tabella valias.vpopmail, a meno che questa tabella sia ancora inesistente e allora sarà lo stesso vpopmail a crearla per noi. Si potrebbe anche decidere di cancellare quella tabella e lasciarla ricreare a vpopmail, se essa è vuota oppure contiene solo pochi record che possiamo ricreare facilmente in poco tempo.
Ecco dunque cosa fare per quanto riguarda vpopmail:
./configure \ --other-options-here \ --enable-mysql-limits \ --enable-sql-aliasdomains \ --enable-defaultdelivery \ --enable-valias make make install-strip
Ora ricompilare e reinstallare qmail
make qmailctl stop make setup check qmailctl start
Nel caso sia necessario, questa è la query SQL da eseguire per modificare lo schema della tabella vpopmail.valias. Essa cerca di cancellare la PRIMARY KEY eventualmente già definita.
USE vpopmail; ALTER TABLE `valias` ADD `valias_type` TINYINT(1) NOT NULL DEFAULT '1' COMMENT '1=forwarder 0=lda' FIRST; ALTER TABLE `valias` ADD `copy` TINYINT(1) NOT NULL DEFAULT '0' COMMENT '0=redirect 1=copy&redirect' AFTER `valias_line`; ALTER TABLE `valias` ADD INDEX (`valias_type`, `alias`, `domain`);
Come già menzionato, gli utenti che lanciano dovecot-lda come da vecchie impostazioni non devono modificare nulla. Ad ogni modo, se ci si vuole liberare dei file .qmail installati nelle mailbox, è possibile usare vmakedotqmail in questo modo:
vmakedotqmail -r -A
vedere vmakedotqmail -h per maggiori informazioni, specialmente se si vuole cancellare il .qmail di un singolo utente o dominio.
qmailadmin
Riscaricare il programma, che presenta alcuni aggiustamenti riguardanti i virtual alias, ricompilare e installare al solito modo.
Ricompilare qmailadmin dopo aver reinstallato e configurato vpopmail è sempre necessario.
Plugin qmailforward per Roundcube
L’idea di base che sta dietro questo plugin è di Michael Dick, che ringrazio.
qmailforward riprende il codice php che serve a generare il form dal plugin managesieve, che già mette a disposizione l’inoltro, ma al costo di utilizzare le regole sieve, come già detto. Se lo si è abilitato, disabilitare quel plugin per non confonderlo con questo.
$config['managesieve_forward'] = 0;
qmailforward mette l'utente in condizioni di gestire il proprio reinoltro (con eventuale copia) attraverso il pannello delle impostazioni di Roundcube.
Per installarlo è sufficiente scaricarlo da github, scompattare nella cartella plugin, dove dovrà comparire una cartella qmailforward, e abilitare dalle impostazioni di Roundcube.
$config[‘plugins’] = […… ,‘qmailforward’];
In alternativa è possibile eseguire una installazione automatica via composer.
Nel file config.inc.dist.php ci sono le impostazioni di default. Leggere questo file e copiare le impostazioni che si vuole sovrascrivere in config.inc.php. E’ necessario inserire almeno le credenziali di accesso al database, che sono quelle di vpopmail ricavabili dal file ~vpopmail/etc/vpopmail.mysql.
Il plugin si presenta così e non ha bisogno di spiegazioni sulle modalità di utilizzo:
Per chi è curioso di sapere cosa succede nella tabella vpopmail.valias, qmailforward può comportarsi in due modi:
- come un reinoltro semplice. In tal caso viene scritto un solo record con il destinatario nel campo
valias_line. Qui il nuovo campocopyassume valore0, mentrevalias_typesarà uguale a1. - come inoltro di una copia del messaggio. Lo stesso di prima, ma il campo
copysarà in questo caso uguale a1, convalias_type=1. In aggiunta a ciò verrà inserito un altro record di natura diversa riconoscibile perchèvalias_type=0che conterrà il delivery agent responsabile del salvataggio della copia in mailbox. Si può configurare quale delivery agent usare attraverso il file di configurazione. Per default saràDovecot, di modo che vengano pure eseguite in cascata le regolesieve. No utilizzarevdelivermailcome opzione, che già è installato in .qmail-default, altrimenti si causerà un loop divpopmaile un conseguente errore diqmail-queue.
La chiave primaria che abbiamo aggiunto alla tabella è necessaria per le query di scrittura sul database, quindi non modificatela.
Il plugin ha le sole traduzioni in inglese e in italiano. Per favore collaborate nella traduzione in altre lingue e inviatemele via mail (cartella localization).
Quanto sopra è codice fresco e pertanto va considerato ancora come testing. Come sempre, non esitate a postare eventuali informazioni, suggerimenti e problematiche nei commenti qui sotto.
Questo è tutto, have fun!



