Modalità di lettura

Roundcube webmail

Roundcube è una webmail avanzata con una bella interfaccia grafica.

Changelog

  • Dec 14, 2025
    version 1.6.12
  • Mar 9, 2025
    added $config['quota_zero_as_unlimited'] = true; to show quota unlimited instead of unknown for accounts with unlimited quota

  •  

ClamAV

Clam AntiVirus is an open source (GPL) anti-virus toolkit for UNIX, designed especially for e-mail scanning on mail gateways.

Changelog

  • Oct 18, 2025
    - clamav upgraded to v 1.5.1
  • Oct 11, 2025
    - clamav upgraded to v 1.5.0. A recent version of rust is needed (successfully using 1.88 here). Just reinstall as explained below. No particular change is needed in the config files.

  •  

daemontools

daemontools è una collezione di strumenti per gestire servizi UNIX. Monitora i servizi di qmail e salva i messaggi di errore in uno o più logs.

Changelog

  • Jan 5, 2026 (v0.83)
    This release doesn't add any new feature nor fixes any bug or issue. It just simplifies the installation by leaving the sources where the user wants them, installing the commands in the /command directory and creating a symbolic link in /usr/local/bin. From now on there's no daemontools directory in /var/qmail anymore.
  • Sep 30, 2025 (v0.82)
    - Fixed crash in multilog caused by invalid buffer access when read() returned -1 ea3abe9
  • Sep 8, 2025 (v. 0.81)
    - compiles with latest gcc 15.2
  • Aug 3, 2025
    - multilog prints a readable datetime in milliseconds if used with "m" flag (thanks squidvisa)
  • Mar 19, 2025 (v. 0.79)
    This version does not add new features nor corrects bugs. It's just a reorganizations of the files in the source dir
    - daemontools will be installed in /var/qmail/daemontools
    - Moved 'package' and 'src' to the top dir
    - Version grabbed from 'VERSION' in package/upgrade
  • Feb 9, 2025 (v0.78.4)
    - several adjustments to get clang version 18.1.6 compatibility
    - restored !/bin/sh in all scripts
  • Oct 14, 2024 (version 0.78.3)
    - all package/ scripts now run the bash shell
    - package/run script will recognize if we are in an lxc container to skip inittab configuration
    - package/run.rclocal will find both /etc/rc.local /etc/rc.d/rc.local
    - daemontools-0.78.2 directory renamed to daemontools
  • Oct 9, 2024
    - added -ltr to conf-ld to restore compatibility with systems with glibc prior to v. 2.17 like RHEL6/CentOS6, where the librt.so library is not linked
  • Oct 10, 2024
    - version 0.78.1: added package/compile which was missing again! (tx Bai Borko)
  • Sep 6, 2024
    - fixed a .gitignore issue which was preventing the package/compile script upload (thanks Ivelin Topalov)
  • Jul 29, 2024 (version 0.78)
    - multilog prints a readable datetime if used with "d" flag, it prints timestamps if used in the usual way with the "t" flag (80f2133)
    - fixed several compilation warnings and/or breaks on gcc-14.1
  • Dec 9, 2023
    -moved my patched daemontools to github and called 0.77 the new version
    -clear service moved to qmail/supervise/clear

  •  

Spamassassin TxRep Reputation plugin e filtro Bayesiano (SQL)

TxRep was designed as an enhanced replacement of the AutoWhitelist plugin. TxRep, just like AWL, tracks scores of messages previously received, and adjusts the current message score, either by boosting messages from senders who send ham or penalizing senders who have sent spam previously. This not only treats some senders as if they were whitelisted but also treats spammers as if they were blacklisted. Each message from a particular sender adjusts the historical total score which can change them from a spammer if they send non-spam messages. Senders who are considered non-spammers can become treated as spammers if they send messages which appear to be spam. Simpler told TxRep is a score averaging system. It keeps track of the historical average of a sender, and pushes any subsequent mail towards that average.

The Bayesian classifier in Spamassassin tries to identify spam by looking at what are called tokens; words or short character sequences that are commonly found in spam or ham. If I've handed 100 messages to sa-learn that have the phrase penis enlargement and told it that those are all spam, when the 101st message comes in with the words penis and enlargment, the Bayesian classifier will be pretty sure that the new message is spam and will increase the spam score of that message.

In pratica Bayes è un classificatore statistico: guarda i token (parole, header, URL, ecc.) e calcola la probabilità che il messaggio sia spam senza interessarsi di chi manda, ma solo del contenuto.

Invece TxRep tiene traccia della reputazione del mittente (indirizzo email + IP).


Changelog

  • 18 agosto 2025: aggiunte parecchie informazioni alla sezione "Addestramento del sistema bayesiano"

  •  

Aggiornare qmail

Per mia comodità ho spostato i sorgenti di qmail sources nel mio spazio github. Ciononostante, tutte le informazioni riguardanti qmail e programmi correlati continueranno a essere riportate in questo spazio web, e questo spazio rimarrà il luogo ove chiedere eventualmente supporto. Da ora in poi, annzichè rilasciare una patch combinata, rilascerò un pacchetto da scaricare da github, che sarà ovviamente il risultato dell'accomodamento delle patch elencate sotto più varie modifiche che verranno indicate nei commit di github.

Changelog

  • Jan 8, 2026
    - bug fixed in helodnscheck: it allowed domains with only one dot #30
  • Jan 5, 2026
    - helodnscheck.cpp
    : PCRE dependency avoided, to make happy Debian 13 d987ec4
    - config-all now grabs the correct network interface c60d3fa
    - config-all will now prompt for 1024/2048 key length for DKIM c842cea
    - Fixed typo in qmailctl 3f1ea75
    - Makefile: Fixed incorrect rule syntax for 'make cert' 80222cc
  • Sep 8, 2025
    - Fixes in SPP handling and support for [pass] plugins after RCPT accept. Support for RBLRESULT environment variable and RBL ignore ('=') option. (tx Andreas Gerstlauer)
    - Added -std=gnu17 to conf-cc, fixed some other issues and now it compiles on gcc-15.2 in #28
    - scripts/qmail-pop3d and qmail/pop3sd: ports changed to 110 and 995
    - Received: email header now hides the sender's hostname when the sender is RELAYCLIENT or is authenticated. 785e84b
  • Jul 10, 2025
    - Authentication-Results: header support (Andreas Gerstlauer)
    - DKIM: added ERROR_FD=2 in control/filterargs to send error output of qmail-dkim in stderr when acting as a qmail-remote filter (Andreas Gerstlauer)
    - improved qmail-dkim error reporting when signing outgoing messages (Andreas Gerstlauer)
    - helodnscheck.cpp: qmail dir determined dinamically
    - qmHandle: Add -x and -X parametr for remove email by To/Cc/Bcc (by Stetinac)
  • Jun 9, 2025
    - CRLF fix for fastremote-3 patch (thanks Andreas Gerstlauer)
    - Bug fix to the greetdelay program (thanks Andreas Gerstlauer): qmail-smtpd crashes if SMTPD_GREETDELAY is defined with no DROP_PRE_GREET defined.
    - turned off TLS and helo dns check on qmail-smtpsd/run script (tx Luis)
  • Apr 30, 2025
    qmailctl
    , qmHandle, queue_repair and all scripts installed in QMAIL/bin and not in /usr/local/bin by config-all.sh
  • Apr 25, 2025
    - added a configuration script config-all, which configure and installs the control files (as per the original config-fast script), aliases, SRS (uses control/me as the srs_domain), log dirs in /var/log/qmail, tcprules (basic, just to make initial tests), supervise scripts, qmailctl script, DKIM control/filterargs and control/domainkeys dir, SURBL, smtpplugins, helodnscheck spp plugin, svtools, qmHandle, queue-repair, SSL key file (optional).
    Consider this feature as "testing"
  • Feb 11, 2025
    - Several adjustments to get freeBSD and netBSD compatibility. More info in the commit history. Hints/comments are welcome.
    - freeBSD users have to erase the very 1st line of the file "conf-lib", as libresolv.so in not needed on freeBSD.
    - Dropped files install-big.c, idedit.c and BIN.* files.
    - Dropped files byte_diff.c, str_cpy.c, str_diff.c, str_diffn.c and str_len.c, which break compilation on clang and can be replaced by the functions shipped by the compiler (tx notqmail).
    - Old documentation moved to the "doc" dir. install.c and hier.c modified accordingly
    - conf-cc and conf-ld now have -L/usr/local/lib and -I/usr/local/include to look for srs2 library
    - conf-cc and conf-ld now have -L/usr/pkg/lib and -I/usr/pkg/include to satisfy netBSD
    - vpopmail-dir.sh: minor correction to vpopmail dir existence check
    - srs.c: #include <srs2.h> now without path

  •  

Converting a Linux installation to a Slackware one in an OVHcloud server

This article explains how to convert a given Linux distribution to a Slackware one in an OVHcloud server. I wrote in the past an article about doing the same for OVH kimsufi.

It is inspired by the Slackware wiki page Install Slackware on an online.net Dedibox BareMetal Server, which explains the same for a Dedibox BareMetal Server on online.net.

The plan is to

  1. install a Linux of your choice
  2. reboot in rescue mode that Linux distro
  3. download the Slackware initrd and prepare the install environment
  4. download the set of Slackware packages to be installed
  5. chroot into the Slackware initrd image
  6. partition and install Slackware over the existing Linux
  7. configure the fresh installed Slackware and reboot

  •  

Limitare il numero di email inviate da un dato auth-user/domain/IP

NB se si è seguita la 'configurazione veloce' basata sullo script config-all, questo programma è già stato configurato.

Changelog

  • Jun 14, 2025
    - Added a cronjob for rcptcheck-overlimit that only removes cases that didn't exceed the limit, i.e. enforces a permanent ban (tx Andreas Gerstlauer)

Se si vuole evitare il rischio di compromettere il proprio server a causa di account che inviano indiscriminatamente messaggi a tutto il mondo, ad esempio per via di di una password che è stata violata in qualche modo, si può utilizzare lo script rcptcheck-overlimit di Luca Franceschini, che deve essere usato insieme alla patch rcptcheck (una patch derivata da Luca da un lavoro originale di Jay Soffian).

  •  

Installare un certificato Let's Encrypt per i server qmail e dovecot

Changelog

  • Jun 6, 2025
    - dehydrated now launches a hook.sh script which handles the post-installation tasks (assemble and copy the certificate into the qmail dir, restart the server and eventually alert the administrator in case of problems). It replaces the old scripts.
  • 22 febbraio 2025
    Let's Encrypt ha annunciato che interromperà il servizio di avviso via mail per i certificati in scadenza. Aggiunto uno script che fa la stessa cosa internamente.
  • 5 agosto 2023
    - L'installzione del certificato è ora basata su dehydrated. La vecchia documentazione basata su certbot si trova in fondo a questa pagina, ma non verrà più aggiornata.
  • May 18, 2023
    - added the option --key-type rsa to the certbot command, to avoid that certbot will silently default to ECDSA the private key format, which results not understandable by my openssl-1.1. In this way the format of the private key will be RSA. More info here.

To enable HTTPS on your website, you need to get a certificate (a type of file) from a Certificate Authority (CA). Let’s Encrypt is a CA. In order to get a certificate for your website’s domain from Let’s Encrypt, you have to demonstrate control over the domain. With Let’s Encrypt, you do this using software that uses the ACME protocol which typically runs on your web host.

  •  

Configurazione di qmail

qmail v2025.04.18 e successivi include un nuovo script config-all che automatizza la configurazione di qmail. Vari script che prima dovevano essere installati a mano successivamente all'installazione di base di qmail vengono ora installati automaticamente se si lancia semplicemente il comando './config-all mx.domain.tld' dopo la compilazione. Ecco cosa sarà installato e configurato con l'installazione rapida:

  • control file pricipali come da script originale config-fast,
  • alias,
  • RBL
  • SPF
  • SRS (usa control/me come srs_domain),
  • directory log in /var/log/qmail,
  • cronjobs 
  • logrotate
  • PATH e MANPATH in /etc/profile.d/qmail.sh
  • tcprules (base, solo per poter fare i testi inziali),
  • supervise scripts,
  • qmailctl script,
  • DKIM control/filterargs and control/domainkeys directory,
  • SURBL,
  • overlimit feature,
  • moreipme,
  • smtpplugins,
  • helodnscheck spp plugin,
  • svtools,
  • qmHandle,
  • queue-repair,
  • SSL key file (opzionale)

Da ora in avanti, lanciando ./config-all mx.mydomain.tld dopo la compilazione si otterrà una installazione di qmail pronta per i test. Si dovrà solo aggiungere i propri domini virtuali e le altre funzionalità non menzionate sopra.

Coloro che preferiscono configurare tutto a mano possono continuare a usare lo script config-fast, che orà copia i miei script supervise nella cartella qmail/doc.

In quanto segue, la sezione "Configurazione Manuale" è ovviamente una lettura caldamente suggerita al fine di avere un quadro di come funziona il tutto, soprattutto se si è principianti di qmail.

Changelog

  • Apr 15, 2025
    - added script config-all.sh
  • Jul 31, 2024
    multilog uses "d" flag as default to gain compatibility with the readable datetime format of multilog in daemontools-0.78. Change it with the "t" flag if you prefer to have timestamps.

  •  

Illustrazione "qmail virtual user delivery"

L'architettura della mia configurazione di qmail è stata modificata parecchio nel corso degli anni, specialmente per quanto riguarda il recapito dei messaggi verso gli utenti virtuali nel caso si sia abilitata la funzionalità "defaultdelivery" per vpopmail (--enable-defaultdelivery) che ho modificato recentemente, pertanto ho costruito una illustrazione di qmail con l'intento di chiarire come le cose funzionano insieme.

E' ovviamente ispirata alle illustrazioni di djb e dalla "Big qmail picture" di André Oppermann.

  •  

Installare e configurare VPopMail

Vpopmail fornisce un modo semplice di gestire indirizzi di posta su domini virtuali e account email diversi da quelli su /etc/passwd.

Changelog

  • Nov 20, 2025
    - vutil: 'isSomething' functions reviewed to satisfy qmailadmin calls in #9
    - Added definition of 'call_onchange' function and cured its calls to avoid break 97ffe38
  • Oct 30, 2025 (v. 5.6.10)
    - Added specific usage informations for s/qmail users (look here)
    - Dropped -std=gnu17 from compilation options and solved (probably) all breaks and warnings on gcc 15.2 2d8526d
    - configure.ac now looks for mariadb include and lib dir in addition to mysql dab36e8
    - configure.ac automatically looks for vanilla qmail's users/cdb and s/qmail's users/assign.cdb file 723efb3
    - Updated the usage() funcion message in vadduser.c to clarify the use of pre-hashed passwords with -e 5b5ccdb
    - control/defaultdelivery is now installed by vpopmail if --enable-defaultdelivery 77f54eb
    - vrcptcheck checks all kind of address (users, forwards, valiases) #7
    - Dropped unused functions in vpopmail.c #8
  • Sep 1, 2025 (v. 5.6.9)
    - added -std=gnu17 to gain compatibility with gcc-15 (PR #6)
    - pw_clear_passwd field enlarged to varchar(128) to create room for long passwords (tx Ricardo Brisighelli) c54688d
  • Mar 29, 2025
    - defaultdelivery
    feature (--enable-defaultdelivery) changes (more info here, commit):
    • vdelivermail is installed by default in .qmail-default of newly created domains with option 'delete' as in the previous version.
    • if no user's valiases and no .qmail are found, then the message is sent to the control/defaultdelivery file, so that dovecot-lda (or whatelse) can store the mail into inbox and execute the sieve rules.
    • if vdelivermail is found in control/defaultdelivery, then it is ignored. The delivery remains in charge to vdelivermail, 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.
  • Mar 23, 2025 (v. 5.6.7)
    - bug fix in vpopmaild.c: Crypted[64] enlarged to Crypted[128] to make room for SHA-512 passwords. This restores the usability of the RoundCube's 'password' plugin (commit)
    - fixed quota calculation in sql procedures for dovecot (tx Hakan Cakiroglu) (commit)
    - minor changes to the usage function of vmakedotqmail.c (commit)
  • Feb 15, 2025 (v. 5.6.6)
    - bug fix: pwstr.h was not installed by Makefile (tx Bai Borko)
  • Feb 9, 2025
    - added pwd strength check also for vadduser.c
    -
    removed -std=c99 -D_XOPEN_SOURCE=500 arguments from CFLAGS in configure.ac to make clang happy
    - several changes to compile on FreeBSD clang v. 18.1.6
  • Dec 20, 2024 (v. 5.6.4)
    - Password strength enforcement PR #5 (grabbed from Matt Brookings' 5.5.0-dev version)
    - Dropped min pwd length feature.
    - vmysql.h: tables' layout changed in order to have VARCHAR instead of CHAR. Fields containing ip addresses enlarged to VARCHAR(39), to create room for ipv6. Unix timestamps definition changed from BIGINT(20) to INT(11). (commit 44bad58) Have a look to the upgrade notes below.
  • Oct 14, 2024 (v. 5.6.3)
    - fixed a configure break where a trivial C test program exits on error with gcc-14.1 due to missing headers
    - vusaged/domain.c: fixed -Wimplicit-function-declaration compilation warning
    - vmysql.h: dropped the multicolumn PRIMARY KEY in valias table to allow multiple forwards for a given alias.
       In case one already has the valias table defined, this is the sql query for the upgrade:
       ALTER TABLE `vpopmail`.`valias` DROP PRIMARY KEY, ADD INDEX (`alias`, `domain`, `valias_type`) USING BTREE;
       ALTER TABLE `vpopmail`.`valias` ADD `id` INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (`id`);

Aggiornare alla versione 5.6.x

Quando si passa dalla versione 5.4.33 alla versione 5.6.x, se si hanno gli account su SQL, è necessario aumentare le dimensioni della colonna vpopmail.pw_passwd del database, poichè il meccanismo di criptaggio delle password è ora basato su SHA512, che è più lungo del vecchio MD5; si può comunque scegliere di disabilitare le SHA512 pwd con --disable-sha512-passwords al momento della configurazione. La colonna vpopmail.pw_passwd dovrebbe essere ora impostata a una dimensione di 128; questa la query:

ALTER TABLE `vpopmail` CHANGE `pw_passwd` `pw_passwd` CHAR(128) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL;

Aggiornare dalla versione 5.6.3 alla versione 5.6.4

Varie altre modifiche che però non creano incompatibilità con le versioni precedenti sono state apportate al layout delle tabelle MySQL. Ecco la query da lanciare per alterarle (inlclusa la modifica già menzionata sopra):
/* vpopmail */
ALTER TABLE `vpopmail` CHANGE `pw_name` `pw_name` VARCHAR(64) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL; 
ALTER TABLE `vpopmail` CHANGE `pw_domain` `pw_domain` VARCHAR(96) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL; 
ALTER TABLE `vpopmail` CHANGE `pw_passwd` `pw_passwd` VARCHAR(128) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL;
ALTER TABLE `vpopmail` CHANGE `pw_gecos` `pw_gecos` VARCHAR(64) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL;
ALTER TABLE `vpopmail` CHANGE `pw_dir` `pw_dir` VARCHAR(160) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL;
ALTER TABLE `vpopmail` CHANGE `pw_shell` `pw_shell` VARCHAR(20) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL; 

/* vlog */
ALTER TABLE `vlog` CHANGE `user` `user` VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL; 
ALTER TABLE `vlog` CHANGE `passwd` `passwd` VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL;
ALTER TABLE `vlog` CHANGE `domain` `domain` VARCHAR(96) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL; 
ALTER TABLE `vlog` CHANGE `remoteip` `remoteip` VARCHAR(39) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL; 
ALTER TABLE `vlog` CHANGE `error` `error` TINYINT(1) NULL DEFAULT NULL;
ALTER TABLE `vlog` CHANGE `timestamp` `timestamp` INT NOT NULL DEFAULT '0'; 

/* lastauth */
ALTER TABLE `lastauth` CHANGE `user` `user` VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL; 
ALTER TABLE `lastauth` CHANGE `domain` `domain` VARCHAR(96) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL; 
ALTER TABLE `lastauth` CHANGE `remote_ip` `remote_ip` VARCHAR(39) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL;
ALTER TABLE `lastauth` CHANGE `timestamp` `timestamp` INT NOT NULL DEFAULT '0'; 

/* limits */
ALTER TABLE `limits` CHANGE `domain` `domain` VARCHAR(96) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL; 

/* alias */
ALTER TABLE `valias` CHANGE `alias` `alias` VARCHAR(32) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL;
ALTER TABLE `valias` CHANGE `domain` `domain` VARCHAR(96) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL;

/* dir_control */
ALTER TABLE `dir_control` CHANGE `domain` `domain` VARCHAR(96) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL;

/* aliasdomains */
ALTER TABLE `aliasdomains` CHANGE `alias` `alias` VARCHAR(96) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL;
ALTER TABLE `aliasdomains` CHANGE `domain` `domain` VARCHAR(96) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL;

Mie modifiche al programma

Questo l'insieme delle mie patch che sono incluse in vpopmail a partire dalla versione 5.6.0:

  • la patch sql-aliasdomains, che fa in modo che VPopMail salvi gli aliasdomains su mysql. Questo consente al driver sql di dovecot di fare l'autenticazione non solo con i domini reali ma anche con gli alias, a condizione che si modifichi anche la query all'interno del driver, come verrà spiegato dopo. Ciò è ora importante, dato che dovecot ha eliminato il driver per VPopMail.
  • la patch defaultdelivery (--enable-defaultdelivery):
    • vdelivermail è installato per default nel .qmail-default dei nuovi domini con l'opzione 'delete'.
    • se nessun utente e nessun .qmail sono stati trovati viene eseguito quanto contenuto nel file control/defaultdelivery, di modo che dovecot-lda possa salvare la mail ed eseguire le regole sieve.
    • se vdelivermail è stato trovato nel file control/defaultdelivery, allora control/defaultdelivery viene ignorato e la consegna del messaggio rimane a carico di vdelivermail, per evitare loop.
    Per informazioni precise leggere qui. Dare anche una occhiata al file doc/README.defaultdelivery.md nel codice sorgente.
  • dovecot-sql-procedures patch. Se si vuole usare il driver sql di dovecot con la configurazione "una tabella per un dominio) (--disable-many-domains) è necessario personalizzare in modo pesante le query sql. Con questo aggiustamento vpopmail installerà in modo autonomo la procedura e le funzioni sql nel database quando si crea un nuovo dominio. La procedura può essere chiamata da dovecot per fare l'autenticazione.
    Il codice sql supporta gli aliasdomains e i mysql limits, e sarà caricato dal file ~/vpopmail/etc/disable-many-domains_procedures.sql che si può ovviamente personalizzare.
    E' necessario configurare vpopmail con --enable-mysql-bin=PATH poichè dobbiamo installare la procedura chiamando mysql con un comando shell.
  • vusaged configure patch
    Almeno su Debian 11 sembra che vusaged si rifiuti di terminare la configurazione (comando configure) a causa di un mancato link alle librerie mysql (configure: error: No vauth_getpw in libvpopmail). Ovviamente ho spulciato lo script e il link sembra impostato correttamente, e ciò è al momento molto strano. Dopo un po' di prove, ho notato che facendo in modo che il configure superi il problema senza bloccarsi con un messaggio di errore, la compilazione susseguente vada a buon fine linkando corrrettamente libmysqlclient e terminando con successo la compilazione.
    NB: è necessario dare un autoreconf -f -i nella directory vusaged prima della configurazione, dal momento che il file configure.ac è stato modificato.
  • s/qmail cdb patch. Questa patch, che consente a vpopmail di localizzare correttamente il file assign.cdb di qmail per gli utenti s/qmail, nell'attuale pacchetto perchè rimpiazzata da una analoga. Gli utenti di s/qmail dovrebbero configurare vpopmail con l'opzione --enable-qmail-cdb-name=assign.cdb
  • recipient check per gli utenti s/qmail. Da usare con s/qmail di Erwin Hoffmann al fine di validare il destinatario della mail. Questa patch non è importante nella presente installazione. Si veda qui per maggiori informazioni.
  • vuserinfo-D_newline, una piccola patch che migliora la leggibilità quando si utilizza il comando vuserinfo -D, introducendo una nuova linea
  • Numerose modifiche per rendere il programma compatibile con gli ultimi compilatori gcc e clang.
  • Una patch che risolve i seguenti problemi (Ali Erturk TURKER):
    - vdelivermail.c controlla i permessi di spamassassin anzichè di maildrop.
    - vopen_smtp_relay() restituisce il valore corretto, di modo che open_smtp_relay() possa rilevare e riportare gli errori di connessione al database (vmysql.c, voracle.pc, vpgsql.c)
    - vdel_limits() esegue un core-dump se la connessione al database non è disponibile. (vmysql.c, voracle.pc)

  •  

Installazione di Dovecot e sieve su qmail + vpopmail

Changelog

  • Nov 24, 2025
    - dropped 'enforce = no' from 90-quota.conf to enforce quota limits (commit)
  • Nov 22, 2025
    - quota driver switched to 'count' (commit). 'count' is the recommended way of calculating quota on recent Dovecot installations.
  • Oct 30, 2025
    - dovecot ugraded to v. 2.4.2
  • Mar 29, 2025
    - dovecot updated to v. 2.4.1-4
  • Mar 15, 2025 (config version 2.4.0.1 diff
    - Added quota warnings feature. Improved quota configuration in 90-quota.conf (more info here)
    - Configured auth-master.conf.ext and auth-deny.conf.ext. To be included from local.conf
  • Mar 9, 2025
    - fixed quota calculation in sql queries (tx Hakan Cakiroglu)
  • Feb 22, 2025
    - Bug fix in 90-sieve.conf: global script to move spam into Junk now working
    - Bug fix in move-spam.sieve: erroneously matches "YES" if "BAYES" is in the header
  • Feb 15, 2025
    - added support for vpopmail configured with --disable-many-domains
    - 90-sieve.conf: global script move-spam.sieve called correctly
  • Feb 8, 2025
    - dovecot_postlogin.sh: query changed in order to add new records as well (tx Bai Borko)
    - bug fix: pop3 service was executing imap instead of pop3 (tx Gabriel Torres)
  • Jan 29, 2025
    - dovecot upgraded to v 2.4.0. Old configuration files are not valid anymore and you have to install dovecot from scratch.
  • Nov 15, 2024
    - added a postlogin script to update the vpopmail.lastauth SQL table on login (see 10-master.conf, thanks kengheng)
  • Dec 29, 2023
    default_pass_scheme = SHA512-CRYPT (was MD5-CRYPT) in dovecot-sql.conf.ext, as vpopmail-5.6.x has now SHA512-CRYPT password by default
  • Feb 10, 2023
    - added a patch to restore the old vpopmail-auth driver (tx Ali Erturk TURKER)

  •  

autorespond

autorespond è usato per le risposte automatiche in caso di assenza (vacation messages). E' richiesto da qmailadmin.

Changelog

  • Mar 12, 2025
    - bug fix in memory allocation which caused a segfault when To: address has be used (tx Stephan for the hint)

  •  

AWStats

Un grande grazie a Bai Borko per aver fornito le istruzioni su cui si basa quanto segue e per lo script perl.

AWStats è uno strumento libero e potente che genera statistiche per vari servizi per il web. Questo analizzatore di log funziona via CGI o dalla linea di comando e mostra tutte le informazioni possibili contenute nei log per mezzo di grafici in delle pagine web.

  •  

QmailAdmin

qmailAdmin è un software libero che fornisce un'interfaccia web per gestire sistemi qmail con domini virtuali basati su vpopmail. Fornisce amministrazione per la creazione/cancellazione di utenti, alias, forward, mailing list e autoesponder.

Changelog

  • Nov 28, 2025 (v1.2.27)
    - Solved a compilation break on mailinglist.c when onchange is enabled in vpopmail a6395a9
    - --with-auth-log becomes --with-auth-logdir e6bdd48
    - Dropped VPOPMAIL_DEFS_H def in template.c 658eaa9
    - Revised the definition of PACKAGE and VERSION macros in several .c files 18abb99 bff23be
    - Functions file_exists() and str_replace() renamed to file_exists2() and str_replace2() on util.c because they are already defined in vpopmail bff23be
    - Fixed quick search button functionality (wasn't working well) bff23be
    - qmailadmin now requires vpopmail-5.6.11 a640c59
    - Solved undefined EZMLDIR and changing --enable-auth-log to --enable-auth-logdir in #5
    - Dropped a lot of br tags in lang files, fixed accents in italian language in #6
    - Dropped unusued --enable-help feature in configure in #7
    - mailinglist.c: if MySQL support is enabled mysql:localhost is the default host in #8
  • Nov 8, 2025 (v1.2.26)
    - Improved the handling of program exit because of wrong configuration. This should avoid the unpleasant "blank screen" situation in some cases.
    * Configure program is now able to require a minimum vpopmail version 3846a52
    * Upgrade in auth-logging feature: added configurable auth log path via --with-auth-log=DIR (default ~vpopmail/log). Log file now written under vpopmail privileges instead of apache. 59e234d 04e2bf9 0c75b47 5f768b1
    * Added verbosity to the "File error" event #4

  •  

vQadmin

VqAdmin è un pannello di controllo su interfaccia web che consente di eseguire azioni che richiedono l'accesso a root — per esempio, aggiungere e cancellare domini.

Come si può vedere, VqAdmin ha una nuova versione con un nuovo aspetto mobile responsive, con tutte le mie vecchie patch incluse (compresa quella di ALI) e diverse correzioni e ripuliture del codice sorgente. Ho risolto tutti i warnings sia di autotools che di gcc e cambiato un paio di cose per poter rifare il tema html (guardare il changelog per maggiori dettagli). Come sempre i contributi nei commenti sono graditi.

PS: anche la parte apache è stata modificata e prima di fare l'aggiornamento è necessario guardare quali modifiche sono necessarie.

Have fun!

Changelog

  • Dec 06, 2024
    - added a patch to highlight users with restrictions and with admin privileges (PR #1, thanks Bai Borko)
    - added control files notlshosts_auto and tlsserverciphers
  • Oct 19, 2024 (version 2.4.2)
    - Minor fix to view_domain.html
    - Minor fix to the html of list all domains
    - aclocal fix
  • Jul 26, 2024 (version 2.4.1)
    - Fixed configure break. Trivial C test program breaks on gcc-14.1 due to missing headers (commit)
  • Mar 5, 2024
    - version 2.4.0 marked as stable
  • Jan 19, 2024
    - 2.4.0-beta.2
     * fixed a buffer overflow in domain.c (tx Bai Borko)
     * solved stringop-truncation warnings in domain.c and lang.c
  • Dec 21, 2023
    - 2.4.0-beta released
    - new skin
    - vqadmin moved to github
  • Jul 18, 2023
    patch updated
    - Italian translation file html/it updated, following the patch by Ali Erturk TURKER
    - the vqadmin source directory has been cleaned of unnececessary files
  • Feb 18, 2023
    Added Ali Erturk TURKER's patch to my combo. Original patch here

  •  

Email Address Internationalization for qmail. MAV from chkuser modified accordingly

We now have support for EAI (RFC 5336 SMTP Email Address Internationalization), as I accomodated the patch of Arnt Gulbrandsen into my qmail distribution (Nov 03, 2024 and later versions). This means that from now on addresses containing UTF8 characters like mimì@domain.tld or even आर्न्ट@यूनिवर्सल.भारत will be accepted provided that the remote server advertises the SMTPUTF8 verb after the MAIL FROM. If the remote server doesn't advertise SMTPUTF8 capabilities, then the conversation goes as in the past with no allowed UTF8 characters in the email addresses, with a few exceptions for special chars like $%?*^~&/\£#+_-.=

I also had to modify the Mail Address Verification program shipped by chkuser because, if activated by defining the CHKUSER_SENDER_FORMAT and/or CHKUSER_RCPT_FORMAT variables, it accepted only ASCII characters plus a small set of additional UTF8 in user and domain names. And since I was there I simplyfied the code dropping a couple of functions and variables.

  •  

qmail - basic setup

Changelog

  • 19 agosto 2025
    - netqmail-1.07.1 ora compila con gcc 15.2
  • 10 febbraio 2025
    - i sorgenti di netqmail sono ora compatibili con le nuove versioni di gcc e clang.
    - rinominati come netqmail-1.07 i vecchi sorgenti di netqmail

  •  

Installare Mailman3 in un server con qmail e vpopmail

Mailman è un software libero per la gestione delle discussioni via mail e le liste di distribuzione. Mailman è integrato con il web, al fine di semplificare agli utenti la gestione degli account e agli ai proprietari (owners) l'amministrazione delle liste. Mailman comprende come parte integrante il sistema di archiviazione, il processamento automatico dei rimbalzi (bounce), il filtro dei contenuti, la spedizione dei digest, filtri anti spam, e altro.

Mailman è un software libero distribuitosotto la GNU General Public License, e scritto nel linguaggio di programmazione Python.

Indice

  •  

Codice sorgente spostato su github

Per mia comodità di lavoro, ho spostato il codice sorgente di daemontools, qmail, vpopmail, qmailadmin e simscan su github. Da ora in avanti, invece dui rilasciare nuove patch di questi programmi pubblicherò un pacchetto sulla piattaforma github, che sarà linkato da qui. Ciononostante questo spazio web rimarrà il posto ove reperire le informazioni ed eventualmente chiedere supporto. Noterete che gli "issues" nel mio spazio github sono disabilitati, poichè vorrei centralizzare qui le discussioni.

vpopmail sarà scaricato da https://github.com/brunonymous/vpopmail. Questi ragazzi francesi hanno fatto un enorme lavoro rilasciando una nuova versione di vpopmail che include moltissime patche, tra cui le mie. Cosa più importante, hanno ripulito e corretto il codice, e aggiunto diverse funzionalità che potete vedere nel changelog.

GitHub logo

  •  

Configurare il Sender Rewriting Scheme (SRS) su qmail

SPF è in conflitto con il reindirizzamento delle email. SRS è un metodo che consente di risolvere questo problema mediante la riscrittura degli indirizzi email.

NB: Se si è effettuata 'configurazione rapida' basata sullo script config-all, il sistema SRS è stato già configurato. E' solo necessario tener presente  che il dominio srs_domain coincide con il dominio in control/me domain, ovvero il nome della propria MTA.

Configurazione

Configurare srsfilter in modo tale che il programma sia lanciato ogni qual volta viene ricevuto un messaggio per l'utente srs:

echo "| /var/qmail/bin/srsfilter" > /var/qmail/alias/.qmail-srs-default

Quindi creare e configurare un dominio virtuale da usare esclusivamente per l'SRS. Si tenga presente questo dominio virtuale non deve essere creato, come siamo abituati a fare, dal programma vadddomain, poichè esso ha il solo scopo di lanciare srsfilter attraverso l'account fittizio alias/.qmail-srs-default che abbiamo creato prima. Notare la  differente sintassi di questa linea nel file virtualdomains rispetto ai domini virtuali regolari:

echo srs.mydomain.tld:srs >> /var/qmail/control/virtualdomains

Quell'srs dopo i due punti : sarà usato da qmail-local come un prefisso negli indirizzi locali associati a srs.mydomain.tld e sarà gestito da .qmail-srs-default, dal momento che nessun altro utente srs esiste. Per esempio:

2023-06-20 22:55:51.265166500 starting delivery 62: msg 32560286 to local srs-SRS0=jiQ3=CI=gmail.com=sender@srs.mydomain.tld

Fare riferimento alla "bibbia" Life With Qmail per comprendere meglio la logica sottostante, specialmente per quanto concerne i concetti relativi a virtual domains, aliases, .qmailextensions addresses.

Aggiungere srs.mydomain.tldrcpthosts di modo che qmail-smtpd sappia che deve spedire localmente i messaggi per quel dominio. Non aggiungerlo al file control/locals altrimenti il file virtualdomains sarà ignorato e srsfilter non verrà lanciato.

echo srs.mydomain.tld >> /var/qmail/control/rcpthosts

Porre srs.mydomain.tld nel file srs_domain, di modo che srsfilter lo utilizzi nella riscrittura degli indirizzi per tutti i domini virtuali. Creare anche il file srs_secret. E' una stringa casuale che serve a generare e controllare gli indirizzi SRS.

echo srs.mydomain.tld > /var/qmail/control/srs_domain
echo "xxxxxxxxxxxxxxxxxxxxxx" > /var/qmail/control/srs_secrets

Queste sono le uniche impostazioni obbligatorie; vedere i link in testa a questa pagina per avere informazioni riguardanti gli altri parametri che è possibile impostare.

Naturalmente è necessario dotare, nel proprio DNS, il dominio srs_domain appena creato di un record MX valido e anche di un record SPF come il seguente:

srs.mydomain.tld. IN TXT "v=spf1 a mx -all"

E' anche necessario configurare i record DKIM e DMARC per il dominio srs.mydomain.tld. Questo per soddisfare le politiche di google, che è uno dei provider più stringenti.

Inoltre, dovremmo aver già creato un analogo record SPF anche per il dominio che compare in control/me. Se non lo si è ancora fatto, sarà bene farlo ora.

Possiamo ora riavviare qmail e testare il nostro sistema SRS.

  •  

Configurazione di DKIM per qmail

Questa pagina riguarda la patch DKIM inclusa nella mia patch combinata (maggiori informazioni qui). Questo argomento è avanzato ed è consigliabile tornare qui alla fine del tutto.

DKIM fornisce un metodo per validare l'identità di un nome a dominio associato a un messaggio con una autenticazione crittografata. La tecnica di validazione è basata sulla crittografia di una chiave pubblica: Il server che invia l'email aggiunge il nome a dominio al messaggio e vi affigge una firma digitale. Questa chiave è posta nell'intestazione DKIM-Signature: del messaggio. Colui che riceve il messaggio può controllare la validità della chiave pubblica leggendo un record TXT del DNS del dominio associato al messaggio.

Sei invitato a dare un'occhiata alle pagine man a partire da qmail-dkim(8) e spawn-filter(8).

Changelog

  • Jul 10, 2025
    added ERROR_FD=2 in control/filterargs to send error output of qmail-dkim in stderr when acting as a qmail-remote filter (Andreas Gerstlauer)
  • Feb 12, 2024
    - v. 1.48: fixed minor bug using filterargs for local deliveries (commit)
  • Feb 6, 2024
    -DKIM patch upgraded to v. 1.47
    * fixed a bug which was preventing filterargs' wildcards to work properly on sender domain
  • Jan 11, 2024
    - version 1.46
    * dk-filter.sh has been dropped. If signing at qmail-remote level, before upgrading, you have to review the configuration as explained below.
    * The variables USE_FROM, USE_SENDER and DKIMDOMAIN have been dropped
    * when signing at qmail-remote level qmail-dkim now has to be called directly by spawn-filter in the rc file. man spawn-filter for more info
    * In case of bounces the signature will be automatically based on the from: field. This will solve issues of DMARC reject by google in case of sieve/vacation bounces.
    * In case of ordinary bounces (mailbox not found, for instance) the bounce domain will be taken from control/bouncehost and, if doesn't exist, from control/me
  • Jan 4, 2024
    - patch upgraded to v. 1.44
    * fixed an issue with filterargs where spawn-filter is trying to execute remote:env xxxxx.... dk-filter. This issue happens when FILTERARGS environment variable is not defined in the qmail-send rc script.
    * dkim.c fix: https://notes.sagredo.eu/en/qmail-notes-185/configuring-dkim-for-qmail-92.html#comment3668 
    * adjustments fo dk-filter and dknewkey man pages
  • Nov 20, 2023
    * The patch now by default excludes X-Arc-Authentication-Results
    * dkim can additionally use the environment variable EXCLUDE_DKIMSIGN to include colon separated list of headers to be excluded from signing (just like qmail-dkim). If -X option is used with dk-filter, it overrides the value of EXCLUDE_DKIMSIGN.
  • Feb 19, 2023 (v. 1.37 upgrade)
    - ed25519 support​ (RFC 8463)
    - multiple signatures/selectors via the enhanced control/dkimkeys or DKIMSIGNDKIMSIGNEXTRADKIMSIGNOPTIONS  DKIMSIGNOPTIONSEXTRA variables
    - domainkey script replaced by dknewkey in order to create ed25519 keys and rsa keys with 1024/2048/4096 bit
    - dropped yahoo's domainkeys support (no longer need the libdomainkeys.a library)
    - man pages revised and enhanced
    - domainkeys directory moved to /var/qmail/control/domainkeys
    - the documentation in this page has been revised. You can find how to sign with the rsa key together with the ed25519 key below.

  •  

Configurare un filtro DMARC in Spamassassin

DMARC (Domain-based Message Authentication, Reporting, and Conformance) è un metodo standard per l'autenticazione delle email, che aiuta gli amministratori della posta a impedire che hacker e altri malintenzionati eseguano lo spoofing dell'organizzazione e del dominio Lo spoofing è un tipo di attacco che falsifica l'indirizzo nell'intestazione Da: di un messaggio email. Un messaggio contraffatto mediante lo spoofing sembra provenire dall'organizzazione o dal dominio la cui identità è stata rubata.

DMARC ti permette anche di richiedere rapporti dai server email che ricevono i messaggi dalla tua organizzazione o dal tuo dominio. I rapporti contengono informazioni utili per identificare possibili problemi di autenticazione e attività dannose nei messaggi inviati dal tuo dominio.

Changelog

  • 17 gennaio 2026
    - aggiunto unhow per dmarc-srg (analizzatore di report DMARC)

Configurazione

E' possibile usare Spamassassin per applicare un filtro DMARC per mezzo del plugin AskDNS. E' sufficiente aggiungere quanto segue a 80-dmarc.cf:

cat > /etc/mail/spamassassin/80-dmarc.cf << EOF
# DMARC
ifplugin Mail::SpamAssassin::Plugin::AskDNS
askdns __DMARC_POLICY_NONE   _dmarc._AUTHORDOMAIN_ TXT /^v=DMARC1;.*\bp=none;/
askdns __DMARC_POLICY_QUAR   _dmarc._AUTHORDOMAIN_ TXT /^v=DMARC1;.*\bp=quarantine;/
askdns __DMARC_POLICY_REJECT _dmarc._AUTHORDOMAIN_ TXT /^v=DMARC1;.*\bp=reject;/

meta DMARC_REJECT !(DKIM_VALID || SPF_PASS || SPF_HELO_PASS) && __DMARC_POLICY_REJECT
score DMARC_REJECT 5
meta DMARC_QUAR   !(DKIM_VALID || SPF_PASS || SPF_HELO_PASS) && __DMARC_POLICY_QUAR
score DMARC_QUAR 2.5
meta DMARC_NONE   !(DKIM_VALID || SPF_PASS || SPF_HELO_PASS) && __DMARC_POLICY_NONE
score DMARC_NONE 0.1
endif # Mail::SpamAssassin::Plugin::AskDNS
EOF

  •  

Realtime Block List (RBL) - qmail-dnsbl

Changelog

  • 3 ottobre 2025:
    - Aggiunta la sezione Data Query Service, che risolve il problema del ban di spamhaus da connessioni fatte con DNS pubblico.

 

Una Realtime Block List (RBL) è una lista di indirizzi che il fornitore della lista RBL ritiene che sia sorgente di Spam.

  • Scarica la patch qmail-dnsbl
  • Autore: Fabio Busatto
  • Added support for welcomelists, TXT and A queries, configurable return codes 451 or 553 with custom messages (by Luca Franceschini)

Questa patch sostituisce il programma rblsmtpd dell'autore dello stesso qmail, Daniel Bernstein. Essa incorpora la parte riguardante il controllo nelle Block List all'interno di qmail-smtpd con il vantaggio che si può vedere l'envelope dalla lettura del log. Registrare l'envelope accanto all'IP bannato è importante per poter risalire sempre a che fine hanno fatto i messaggi non ricevuti e poter così dare risposte certe ai nostri utenti.

Un'altra miglioria di questa patch rispetto al vecchio rblsmtpd  è che gli utenti che si autenticano per inviare la posta da remoto con un IP dinamiconon vengono bannati e quindi possiamo ora attivare il filtro anche sulla porta 587.

  •  

Playing with qmail-spp

qmail-spp provides plug-in support for qmail-smtpd. It allows you to write external programs and use them to check SMTP command argument validity. The plug-in can trigger several actions, like denying a command with an error message, logging data, adding a header and much more.

  • Author: Pawel Foremski
  • More info here

Today I played for the first time with an ancient patch for qmail: qmail-spp. I was really impressed for the ease of use and the elegance of its code, which is inserted inside qmail-smtpd.c with a few touches, despite of the many things that it can do when installed and enabled.

It can run a custom plugin in any language and at any level of the smtp session, grabbing the environment variables, writing into stderr or blocking the smtp session with a return error for the sender.

In no time at all I managed to understand its logic and write a small plugin by adapting a c program I wrote for s/qmail a few months ago to check the validity of the recipient.

Of course I decided to add this patch to my combo. I've just modified the way it has to be enabled, just not to bother those who don't want to touch their run scripts. So, while the original patch is enabled by default, I modified things a little bit so that you have to manually enable it by exporting the variable ENABLE_SPP in your run scripts. Therefore the original NOSPP variable is useless.

Have fun!

  •  

Script e cronjob per il sistema di learning e reporting di Spamassassin

Ora che abbiamo preparato i filtri antispam dobbiamo addestrare il nostro sistema bayesiano e inviare i report a Razor, Pyzor e Spamcop.

La cosa più ovvia che può venirci in mente di fare a questo punto è forse quella di lanciare sa_learn e spamassassin --report uno dopo l'altro al click sul bottone "Marca come Spam" della webmail Roundcube (vedere i driver cmd_learn e multi_driver del plugin markasjunk), ma questa scelta ha alcuni svantaggi importanti:

  • il processo di addestramento, la conseguente sincronizzazione del journal e la connessione ai vari network per il reporting può richiedere anche una decina di secondi, un tempo che i nostri utenti non sono disposti ad attendere.
  • cosa anche più grave, quando essi cliccano sul bottone "Marca come Spam" non è sempre detto che si tratti di un vero messaggo di posta indesiderata. Prendiamo ad esempio il classico caso delle newsletter a cui si sono regolarmente iscritti e che non vogliono più leggere, e che decidono di eliminare etichettandole come spamming anzichè inoltrare una regolare richiesta di cancellazione.

E' qundi più corretto eseguire questi due compiti durante la notte per mezzo di un cronjob (primo problema risolto), processando i soli messaggi di vero spam/ham che l'utente ha consapevolmente copiato in una cartella apposita (secondo problema).

  •  

Migrating from Linux-VServer to LXC (Slackware)

Tired of the nightmares of remotely compiling the kernel with Linux-VServer, a software that I'm pleased with despite of some lack of documentation, these days I was playing with LXC, which is included and supported by Slackware and for which the Linux kernel doesn't need any patching because it already embeds the hacks for LXC containers.

To convert an existing Linux-VServer container in a (eventually unprivileged) LXC container you can follow these steps. I assume that you already know  how to create an LXC container; in case you are interested in unprivileged containers take a look to the excellent Chris Willing's guide (a big thanks to him) linked below.

More info:

  •  

Bye bye Drupal

Era ora che riuscissi a liberarmi della vecchia piattaforma Drupal come strumento per questo blog, ma finalmente ho trovato il tempo per migrare il database di Drupal e per riprendere qui la vecchia grafica (solo lo stile, il codice html è mio).

D'altronde, da almeno 15 anni porto avanti lo sviluppo di un mio CMS (basato su php/mariadb), che però originariamente non avevo usato per la mancanza del tempo necessario a costruirmi un tema html.

Ora il sito vive in ambiente Mobile Responsive e soprattutto mi consente di svincolarmi dagli incubi degli aggiormanti di Drupal e dei suoi pacchetti.

La parte sui commenti del presente CMS non è perfettamente collaudata e mi farebbe piacere avere eventualmente dei feedback su ogni problematica, quindi non esitate a scrivermi al riguardo.

Buon divertimento!

  •