Changelog
- Mar 29 , 2025
- defaultdelivery feature (--enable-defaultdelivery
) changes:
*vdelivermail
is installed by default in .qmail-default of newly created domains with option 'delete' as in the previous version.
* if no user'svaliases
and 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.
* ifvdelivermail
is 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 srsfilter
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:
.qmail-default (vdelivermail) ricerca virtual alias utente. Se trovati esecuzione e uscita ricerca .qmail utente. Se trovato esecuzione e uscita ricerca control/defaultdelivery. Se trovato (ma senza vdelivermail all'interno) esecuzione e uscita
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 campocopy
assume valore0
, mentrevalias_type
sarà uguale a1
. - come inoltro di una copia del messaggio. Lo stesso di prima, ma il campo
copy
sarà in questo caso uguale a1
, convalias_type=1
. In aggiunta a ciò verrà inserito un altro record di natura diversa riconoscibile perchèvalias_type=0
che 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 utilizzarevdelivermail
come opzione, che già è installato in .qmail-default, altrimenti si causerà un loop divpopmail
e 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!