Backgroound Image

Dovecot et Postfix avec comptes virtuels

On a installé un certain nombre de choses sur le serveur, mais il nous manque quand mème un service essentiel, à savoir le mail, que ce soit à l’envoie (SMTP) ou à la reception (POP/IMAP).

Pour ce faire, et mème si on a le choix entre plus fournisseurs de serveurs SMTP et POP/IMAP (sendmail, exim, postfix, courier, solid, dovecot, etc..) mon penchant va plutôt vers un couplage Postfix/Dovecot avec un backend MySQL pour le stockage des noms de domaines virtuel ainsi que données d’authentification utilisateur.

Nous allons tout d’abord créer une base de donnée nommée vmails avec un compte utilisateur ayant les privilèges spécifiques à cette base de donnée, puis nous allons y exécuter le script sql suivant :

DROP TRIGGER IF EXISTS `vmail_users_trg_sha512_new`;
DROP TRIGGER IF EXISTS `vmail_users_trg_sha512_upd`;
DROP TABLE IF EXISTS `vmail_users`;
DROP TABLE IF EXISTS `vmail_domains`;
DROP TABLE IF EXISTS `vmail_aliases`;
CREATE TABLE `vmail_aliases` (
  `id` int UNSIGNED NOT NULL AUTO_INCREMENT,
  `email_src` text COLLATE utf8mb4_bin NOT NULL,
  `email_dst` text COLLATE utf8mb4_bin NOT NULL,
  `dtcrea` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `dtupdt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;


CREATE TABLE `vmail_domains` (
  `id` int UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8mb4_bin NOT NULL,
  `transport` varchar(255) COLLATE utf8mb4_bin NOT NULL DEFAULT 'virtual:',
  `dtcrea` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `dtupdt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `vmail_domains_uk_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

CREATE TABLE `vmail_users` (
  `id` int UNSIGNED NOT NULL AUTO_INCREMENT,
  `domain_id` int UNSIGNED NOT NULL,
  `email` varchar(512) COLLATE utf8mb4_bin NOT NULL,
  `passwd` varchar(200) COLLATE utf8mb4_bin NOT NULL,
  `cpasswd` text COLLATE utf8mb4_bin NOT NULL,
  `quota` int UNSIGNED NOT NULL DEFAULT '1048576000',
  `dtcrea` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `dtupdt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `vmail_users_uk_email` (`email`),
  CONSTRAINT `vmail_users_ibfk_1` FOREIGN KEY (`domain_id`) REFERENCES `vmail_domains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
DELIMITER $$
CREATE TRIGGER `vmail_users_trg_sha512_new` BEFORE INSERT ON `vmail_users` FOR EACH ROW SET NEW.passwd
Read the full article