frangipane - email (scripts)

Scripts pour gérer les Email.

Chose à se rappeler avant de commencer

  • Les mails et la conf pour les consulter (le serveur imaps/pop3s, dovecot) est dans la VM "ptt", c'est là qu'il faut aller pour toutes les manipulations qui concernent le $HOME, ou le maildir, de l'utilisateur, évoqué plus tard, ainsi que le fichier userdb.
  • Par contre, le serveur smtp (postfix) lui est dans la VM "smtp".

Contraintes à implémenter

Comptes shell

La base n'empêche pas la création d'une boîte @boum.org. C'est donc la méthode de création de bam/alias qui devra vérifier.

Réciproquement, quand on crée un nouveau compte shell, nous devrons vérifier qu'il ne correpond pas à 1 bam/alias déjà existant, et le cas échéant, ajouter dans hash:/etc/postfix/transport la ligne correspondante à <nouveau compte shell>@boum.org.

Travail pré-fGP

NB : cette page a été écrite avant la modélisation de franGiPane, il faut donc la retravailler sévèrement...

existe?(adresse_mail)

vérifie en interrogeant le serveur SMTP

créer_mail(adresse_mail, mot_de_passe=blabla, initialiser_boîte=oui)

SI le domaine n'est pas géré par nous (au niveau de Postfix, DNS, etc. ; cf ajout_domaine) ALORS exit(erreur: domaine étranger)

SI existe?(adresse_mail) reussit ALORS exit(erreur: cette adresse existe déjà)

SI il existe déjà une liste dont le nom est le même, y compris avec un autre nom de domaine ALORS exit(erreur: adresse non disponible)

Ajouter ce qu'il faut dans /etc/dovecot/userdb dans la VM ptt, en copiant/adaptant une ligne existante.

Mettre le bon mot de passe dans /etc/dovecot/userdb :

dovecotpw -s SHA512-CRYPT

vous demandera le mot de passe et vous donnera le hash du mot de passe comme il faut à copier dans le champ password.

Créer, avec les bonnes permissions Unix, le $HOME de l'user virtuel toujours dans la VM ptt : (/var/mail/domain.tld/user) :

sudo -u vmail mkdir /var/mail/DOMAIN.TLD/USER
sudo -u vmail chmod -R 750 /var/mail/DOMAIN.TLD/USER
sudo -u vmail chown -R vmail.vmail /var/mail/DOMAIN.TLD/USER

SI $initialiser_boîte == oui ALORS

sudo -u vmail maildirmake /var/mail/DOMAIN.TLD/USER/Maildir
sudo -u vmail maildirmake -q 50000000S /var/mail/DOMAIN.TLD/USER/Maildir
cat /etc/dovecot/message_de_bienvenue | sudo -u vmail /usr/lib/dovecot/deliver -d $adresse_mail -f root@boum.org

FIN SI

Ajouter ce qu'il faut dans /etc/postfix/vmailbox (ou vmailbox-infokiosques, etc., si un fichier comme ça existe déjà pour ce domaine, sinon, dans vmailbox) ; puis le compiler avec sudo postmap /etc/postfix/vmailbox (en adaptant si c'est un autre fichier).

Si l'adresse EMAIL@boum.org correspond à un compte shell : ajouter une ligne à /etc/postfix/vtransport pour forcer Postfix à la considérer comme une boîte virtuelle.

Cleaner après soi si ça déconne.

importer_mail(adresse_mail, repertoire_boîte, fichier_mot_de_passe_crypté)

verifier que le repertoire est bon

SI créer_mail(adresse_mail, non) ne marche pas ALORS exit(erreur de créer_mail)

$maildir = /var/mail/DOMAINE.TLD/USER/Maildir

sudo cp -a $repertoire_boite/{*,.*} $maildir

SI les dossiers .Drafts OU .Sent existent ALORS les renommer respectivement en .Brouillons et .Envoy&AOk-s FIN SI

sudo rm $maildir/courierimap{subscribed,uiddb}
sudo chown -R vmail.vmail $maildir
sudo find $maildir -type d -exec chmod 750 {} \;
sudo find $maildir -type f -exec chmod 640 {} \;

Renommer les répertoires contenant des caractères non-ascii :

  • é -> &AOk-
  • è -> &AOg-
  • ê -> &AOo-
  • à -> &AOA-
  • ç -> &AOc-
  • À -> &AMA-
  • É -> &AMk-
  • ô -> &APQ-

Au pire on peut s'aider de http://www.topolis.lt/squirrelmail/utf7-imap.php :)

initialiser_boîte($adresse_mail)

(re)créer le fichier "subscriptions" dans le Maildir/ dans la VM ptt.

Mettre le bon mot de passe dans /etc/dovecot/userdb :

  • si je connais le mot de passe en clair :

    dovecotpw -s SHA512-CRYPT

    vous demandera le mot de passe et vous donnera le hash à mettre dans le champs password.

  • sinon, y'a qu'a copier direct dans le fichier userdb après le "{SHA512-CRYPT}".

initialiser_boîte(adresse_mail)

$maildir = '/var/mail/DOMAINE.TLD/USER/Maildir'

SI $maildir/maildirsize existe ALORS l'effacer FIN SI

sudo -u vmail maildirmake $maildir

sudo -u vmail maildirmake -q 50000000S $maildir

envoyer le mail de bienvenue :
cat /etc/dovecot/message_de_bienvenue | sudo -u vmail /usr/lib/dovecot/deliver -d $adresse_mail -f root@boum.org

supprimer_mail

MySQL

Supprimer les trucs qui concernent la boite dans la base SQL de RoundCube ; exemple :

  $ mysql -h mailsql.boum.org -u roundcube -p roundcube
  DELETE FROM contacts   WHERE user_id = (SELECT user_id FROM users where username='test');
  DELETE FROM contacts   WHERE user_id = (SELECT user_id FROM users where username='test@infokiosques.net');
  DELETE FROM identities WHERE user_id = (SELECT user_id FROM users where username='test');
  DELETE FROM identities WHERE user_id = (SELECT user_id FROM users where username='test@infokiosques.net');
  DELETE FROM users      WHERE username='test';
  DELETE FROM users      WHERE username='test@infokiosques.net';

Postfix

  • commenter la ligne concernant la boite dans /etc/postfix/vmailbox ; mettre à jour /etc/postfix/vmailbox.db: sudo postmap /etc/postfix/vmailbox
  • commenter, le cas echeant, la ligne concernant la boite dans /etc/postfix/vtransport ; mettre à jour /etc/postfix/vtransport.db: sudo postmap /etc/postfix/vtransport

Dovecot

  • supprimer la ligne concernant la boite dans /etc/dovecot/userdb

Maildir

  • sudo wipe -r /var/mail/DOMAINE.TLD/USER/ dans la VM ptt pour supprimer ce qu'il reste de la boite (à savoir les mails...)

créer_alias(adresse_alias, adresse_cible)

SI le domaine n'est pas géré par nous (au niveau de Postfix, DNS, etc. ; cf ajout_domaine) ALORS exit(erreur: domaine étranger)

SI existe?(adresse_alias) reussit ALORS exit(erreur: cette adresse existe déjà)

SI il existe déjà une liste dont le nom est le même, y compris avec un autre nom de domaine ALORS exit(erreur: adresse non disponible)

Ajouter ce qu'il faut dans /etc/postfix/valias et le compiler avec sudo postmap /etc/postfix/valias

cleaner après soi si ça déconne

supprimer_alias