SnappyMail

Cicle formatiu: CFGM Sistemes Microinformàtics i Xarxes (SMX) / CFGS Administració de sistemes informàtics en xarxa (ASIX)

Mòdul: 0227 - Serveis de xarxa / 0375 - Serveis de xarxa i Internet

Sistema operatiu: Ubuntu Server 26.04 LTS

1. Què és SnappyMail

SnappyMail és un client de correu web (webmail) senzill, modern i lleuger, escrit en PHP i JavaScript. Es tracta d’una bifurcació (fork) de RainLoop Webmail Community Edition, creada per continuar el desenvolupament d’aquell projecte quan va quedar pràcticament abandonat. És una opció excel·lent quan es necessita una interfície webmail lleugera, ràpida i sense dependències de base de dades per connectar-se a un servidor IMAP/SMTP ja existent, amb Dovecot i Postfix. La seva instal·lació a Ubuntu 26.04 es redueix a desplegar uns quants fitxers PHP darrere d’Apache o Nginx amb PHP-FPM, sense necessitat de dimonis addicionals.

SnappyMail logo

Característiques generals del projecte:

💡
Nota

SnappyMail no és un servidor de correu. És únicament una interfície web que es connecta a un servidor IMAP/SMTP que ja ha d’existir prèviament.

2. Llicència

SnappyMail es distribueix sota la llicència GNU Affero General Public License versió 3 (AGPL-3.0).

Punts clau d’aquesta llicència:

3. Funcionalitats principals

4. Requisits previs

Abans d’instal·lar, cal tenir:

Extensions PHP necessàries:

Extensió Obligatòria Ús
mbstring Gestió de cadenes multibyte
zlib Compressió
json Format de dades
libxml Processament XML
dom Processament DOM
curl No Peticions HTTP externes
gd / imagemagick No Redimensionar imatges adjuntes
gnupg No Correu xifrat/signat
intl No Dominis IDN
ldap No Contactes via LDAP
openssl Recomanada Xifratge de dades confidencials
sodium Recomanada Millor xifratge encara que OpenSSL
pdo (sqlite/mysql/pgsql) No Contactes en BD

5. Instal·lació a Ubuntu 26.04

Hi ha dues vies habituals: baixar el paquet .tar.gz directament (mètode universal, vàlid per a qualsevol distribució) o utilitzar el dipòsit APT (només Debian/Devuan de moment). A Ubuntu 26.04 farem servir el mètode del .tar.gz, que és el recomanat oficialment.

5.1. Actualitza el sistema

Actualitza la llista de paquets

sudo apt update

Actualitza el sistema

sudo apt upgrade

5.2. Instal·la Apache, PHP-FPM i extensions

sudo apt install apache2 php-fpm php-mbstring php-xml php-curl php-gd \
  php-intl php-ldap php-sqlite3 php-common php-cli unzip wget

Activa els mòduls necessaris d’Apache:

sudo a2enmod proxy_fcgi setenvif rewrite headers expires deflate

Activa el fitxer de configuració de php8.5-fpm:

sudo a2enconf php8.5-fpm

Registra els serveis perquè s’engeguin automàticament en cada arrencada i els arrenca immediatament:

sudo systemctl enable --now php8.5-fpm apache2

5.3. Descarrega i desplega SnappyMail

Crea la carpeta webmail:

sudo mkdir -p /var/www/webmail

Descarrega SnappyMail:

sudo wget -c https://snappymail.eu/repository/latest.tar.gz

Descomprimeix a la carpeta creada:

sudo tar -xzf latest.tar.gz -C /var/www/webmail

Esborra el fitxer descarregat:

sudo rm latest.tar.gz

5.4. Estableix permisos correctes

Canvia els permisos de les carpetes:

sudo find /var/www/webmail -type d -exec chmod 755 {} \;

Canvia els permisos dels fitxers (descarta directoris, enllaços simbòlics, etc.):

sudo find /var/www/webmail -type f -exec chmod 644 {} \;

Canvia el propietari de la carpeta i les subcarpetes:

sudo chown -R www-data:www-data /var/www/webmail

5.5. Treu la carpeta data fora del document root (recomanat)

Per seguretat, és bona pràctica moure la carpeta data/ (on es guarden configuracions i contrasenyes) fora de l’arrel pública del servidor web.

Crea la carpeta snappymail:

sudo mkdir -p /var/lib/snappymail

Mou el contingut de data a la carpeta creada:

sudo mv /var/www/webmail/data/* /var/lib/snappymail/

Canvia el propietari de la carpeta:

sudo chown -R www-data:www-data /var/lib/snappymail

Canvia el nom del fitxer perquè el detecti i el carregui en l’arrencada:

sudo mv /var/www/webmail/_include.php /var/www/webmail/include.php

Edita /var/www/webmail/include.php

sudo nano /var/www/webmail/include.php

Descomenta/afegeix la línia amb el nou camí:

define('APP_DATA_FOLDER_PATH', '/var/lib/snappymail/');

6. Configura el servidor web

Com que webmail.thos.local és un nom intern (no un domini públic), no pots obtenir-hi un certificat de Let’s Encrypt. La solució habitual en aquest cas és generar un certificat autosignat, que xifra igualment la connexió encara que el navegador mostri un avís de confiança fins que l’acceptis manualment (o ho importis com a certificat de confiança al client).

6.1. Genera el certificat autosignat

sudo openssl req -x509 -nodes -days 825 -newkey rsa:4096 \
  -keyout /etc/ssl/private/webmail.thos.local.key \
  -out /etc/ssl/certs/webmail.thos.local.crt \
  -subj "/C=ES/ST=Catalunya/L=Mataro/O=IES Thos i Codina/OU=SMX/CN=webmail.thos.local"

Què fa cada part:

Ajusta permisos de la clau privada perquè només root hi pugui llegir:

sudo chmod 640 /etc/ssl/private/webmail.thos.local.key

Canvia el propietari i el grup:

sudo chown root:ssl-cert /etc/ssl/private/webmail.thos.local.key
💡
Nota

Un certificat autosignat xifra el trànsit igual de bé que un de “de confiança”, però no aporta cap validació d’identitat per un tercer: el navegador avisarà de “connexió no segura” fins que acceptis l’excepció o instal·lis el certificat com de confiança als clients.

6.2. Apache (VirtualHost amb PHP-FPM i HTTPS)

Activa el mòdul SSL d’Apache:

sudo a2enmod ssl

Crea la configuració HTTP (/etc/apache2/sites-available/webmail.conf) i redirigeix tot el trànsit HTTP cap a HTTPS:

sudo nano /etc/apache2/sites-available/webmail.conf
<VirtualHost *:80>
    ServerName webmail.thos.local
    # Redirigeix tot el trànsit HTTP cap a HTTPS
    Redirect permanent / https://webmail.thos.local/
</VirtualHost>

Crea la configuració HTTPS (/etc/apache2/sites-available/webmail-ssl.conf):

sudo nano /etc/apache2/sites-available/webmail-ssl.conf
<VirtualHost *:443>
    ServerName webmail.thos.local
    DocumentRoot /var/www/webmail

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/webmail.thos.local.crt
    SSLCertificateKeyFile /etc/ssl/private/webmail.thos.local.key
    SSLProtocol -all +TLSv1.2 +TLSv1.3

    <Directory /var/www/webmail>
        Options -Indexes
        AllowOverride All
        Require all granted
    </Directory>

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php8.5-fpm.sock|fcgi://localhost"
    </FilesMatch>

    # No exposis mai la carpeta data si es queda dins del document root
    <LocationMatch "^/data/">
        Require all denied
    </LocationMatch>

    ErrorLog ${APACHE_LOG_DIR}/webmail_error.log
    CustomLog ${APACHE_LOG_DIR}/webmail_access.log combined
</VirtualHost>

Activa els fitxers de VirtualHost del lloc:

sudo a2ensite webmail.conf webmail-ssl.conf

Desactiva el VirtualHost predeterminat:

sudo a2dissite 000-default.conf

Comprova la sintaxi dels fitxers de configuració d’Apache:

sudo apachectl configtest

Recarrega Apache:

sudo systemctl reload apache2
Consell

Si més endavant thos.local deixa de ser intern i el servidor esdevé accessible des d’un domini públic, val la pena substituir el certificat autosignat per un de Let’s Encrypt (via certbot), que evita l’avís de confiança als navegadors dels usuaris.

6.3. Alternativa: Nginx

Si prefereixes Nginx en lloc d’Apache:

# Redirigeix tot el trànsit HTTP cap a HTTPS
server {
    listen 80;
    server_name webmail.thos.local;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name webmail.thos.local;
    root /var/www/webmail;
    index index.php;

    ssl_certificate     /etc/ssl/certs/webmail.thos.local.crt;
    ssl_certificate_key /etc/ssl/private/webmail.thos.local.key;
    ssl_protocols       TLSv1.2 TLSv1.3;

    client_max_body_size 50M;

    location ~ (^|/)\. { return 403; }
    location ~ ^/data/ { deny all; }

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~* \.php$ {
        fastcgi_pass unix:/run/php/php8.5-fpm.sock;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
    }
}

7. Primer accés i configuració del domini de correu

  1. Obre al navegador https://webmail.thos.local/?admin (accepta l’avís de certificat autosignat si és la primera vegada). Això generarà el fitxer admin_password.txt dins la carpeta de dades.

  2. Consulta la contrasenya inicial:

    sudo cat /var/lib/snappymail/_data_/_default_/admin_password.txt
  3. Inicia sessió amb l’usuari admin i aquesta contrasenya.

  4. Canvia l’idioma de la interfície.

    Idioma
  5. Ves immediatament a Seguridad i canvia el nom d’usuari i la contrasenya. Un cop canviada, el fitxer admin_password.txt s’esborra automàticament.

    Canvi de contrasenya
  6. Al menú Dominios, afegeix el domini de correu (per exemple thos.local) indicant:


    Afegeix servidor SMTP
  7. Opcionalment, a Contacts, activa el suport de llibreta d’adreces (SQLite és l’opció més senzilla per a una pràctica d’aula).

    Contactes
  8. Prova l’accés d’un usuari final a https://webmail.thos.local/ amb les credencials del seu compte de correu.

    Accés amb un usuari

Missatge

8. Seguretat i bones pràctiques

9. Actualització

Actualitzar és tan senzill com sobreescriure els fitxers amb la nova versió.

Descarrega la nova versió:

sudo wget -c https://snappymail.eu/repository/latest.tar.gz

Descomprimeix:

sudo tar -xzf latest.tar.gz -C /var/www/webmail

Esborra el fitxer descarregat:

sudo rm latest.tar.gz

Canvia el propietari de la carpeta /var/www/webmail:

sudo chown -R www-data:www-data /var/www/webmail

Cada versió es desa en un subdirectori propi dins de snappymail/v/; només se sobreescriuen /index.php i /data/VERSION. La resta de la reconfiguració la fa el mateix producte en la primera execució posterior.

10. Enllaços d’interès

Documentació oficial

Llicència

Projecte original (RainLoop)

Versions d’aquest document

Domini Públic (CC0)