Este artigo mostra passo-a-passo um método de instalação de um servidor de e-mail com suporte a SMTP, POP, IMAP, quota e armazenamento e controle de contas em MySQL. Veja como é possível obter um servidor de e-mail para domínios virtuais, utilizando Postfix, Courier IMAP, MYSQL e SASL.
Muitas distribuições já trazem o MySQL, como eu estou usando o CL8,
instalei os seguintes pacotes:
MySQL-client-3.23.46-3cl
MySQL-3.23.46-3cl
MySQL-devel-3.23.46-3cl
No Conectiva, um script chamado /usr/sbin/mysql_createdb cria a
database mysql e configura a senha do usuário ROOT.
# /usr/sbin/mysql_createdb
This script will create the main mysql database
where user passwords and general permissions are
stored. It will also ask you to configure the root
password so that a blank one does not get asigned.
Please, type the root password:
Please, retype to confirm:
021231 18:08:56 /usr/sbin/mysqld: Shutdown Complete
Sem essa etapa você não conseguirá iniciar o MySQL. Depois da senha
criada, é hora de iniciar o MySQL:
# cds
# ./mysql start
OBS: "cds" é um a ALIAS no Conectiva que te leva para o diretório /etc/init.d/.
Após iniciar o MySQL, criaremos agora as tabelas de usuários e suas
configurações, a tabela de transporte e a tabela de aliases. Para ser mais
prático, você pode usar o seguinte script chamado mail.db:
OBS: Troque os valores de uid e gid pelo número correspondente ao do
seu usuário e grupo do Postfix. Você também pode alterar o valor
default (10000000=10MB) da cota de disco:
# ==========MAIL.DB============
#
# Cria a database com o nome de mail
#
CREATE DATABASE mail;
use mail;
#
# Cria a tabela de aliases
#
CREATE TABLE aliases (
alias varchar(255) NOT NULL default '',
rcpt varchar(255) default NULL,
PRIMARY KEY (alias)
) TYPE=MyISAM;
# Cria a tabela transport
#
CREATE TABLE transport (
domain char(128) NOT NULL default '',
transport char(128) NOT NULL default '',
UNIQUE KEY domain (domain)
) TYPE=MyISAM;
Salve esse script como mail.db e execute o seguinte comando:
$ mysql -u root -p < mail.db
Isso irá criar todas as tabelas bem como a base de dados "mail".
Vamos agora criar o usuário que o Postfix irá usar para acessar o MySQL.
Logando no MySQL
Para conectar ao SGBD MySQL, basta executar a linha de comando abaixo:
(Note que o prompt "Password" é mostrado, e claro será necessário
informar a senha do banco de dados previamente criada no script de
inicialização do MySQL.
$ mysql -u root mysql -p
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 3.23.46-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
Adicionando o usuário "postfix":
mysql> INSERT INTO user (host, user, password) VALUES
('localhost','postfix','');
Query OK, 1 row affected (0.00 sec)
mysql> UPDATE user set password=PASSWORD('senha') WHERE user='postfix';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Descrição: É a tabela onde serão criados os usuários e suas configurações
como senha, diretório, cota de disco etc.
unique_id: indica o número do usuário na tabela.
id: é o login do usuário, pode ser marco.maximo.dominio.com.br
ou marco.maximo@dominio.com.br.
password: é a senha do usuário, você pode usar dois tipos de senhas,
crypt() ou clear text. Esse último é interessante caso você vá usar
alguma autenticação que use Cram-MD5. Eu uso o crypt, acho mais
ético :-)
uid: virtual uid (use o do usuário postfix).
gid: virtual gid (use o do usuário postfix).
home: é o diretório onde será criado as contas dos usuários.
maildir: é o Maildir do usuário, onde os emails serão armazenados.
date_add: data da criação do usuário.
time_add: hora da criação do usuário.
domain: domínio de qual faz parte o usuário.
name: o nome completo do usuário.
imapok: esse campo serve para habilitar(1) ou desabilitar(0) a
conta do usuário, é usado pelo courier-imap para permitir o logon
do usuário. Serve também para judiar um pouco dos seus desafetos
dentro da empresa :-)
quota: é a cota de disco do usuário, o default é 10MB.
Criando um usuário na tabela
mysql> INSERT INTO virtual_users ( id,home,password,maildir,date_add,
time_add,domain,nome) VALUES ('marco.maximo@dominio.com.br',
'/home/',encrypt('senha'),'dominio.com.br/marco.maximo/Maildir/',
'2002-12-18','05:18:24','dominio.com.br','Marco A. S. Máximo');
mysql> select unique_id, uid, gid, quota from virtual_users where
id='marco.maximo@dominio.com.br';
OBS: Os campos uid, gid, cota estão com um valor padrão e o campo
unique_id é auto incremental.
Como viram, agora posso criar o nome do usuário já com o seu domínio,
podendo assim adicionar vários usuários de diferentes domínios na mesma
tabela. O que temos que fazer é "ensinar" ao Postfix a conectar-se no
MySQL e pegar os dados que ele precisa sobre o usuário, mas antes vamos
configurar o Courier-IMAP.
[1] Comentário enviado por fabio em 05/09/2003 - 09:38h
Muito bom este artigo! Na minha opinião a adoção de servidores de e-mail com contas de usuários armazenados em MySQL é essencial para empresas de médio a grande porte.
Com usuários em banco de dados você passa a oferecer uma fácil integração com sistemas de gestão, perde o limite de 65 mil usuários do sistema operacional, tem maior organização no servidor, etc.
Legal mesmo! No meu caso uso Exim com MySQL, mas o Postfix também é muito bem falado.
[3] Comentário enviado por dinho_rock em 06/09/2003 - 11:25h
Parabéns Romulo.
A muito tempo estava querendo saber como fazia algo parecido. Os e-mails eu estava criando tudo como email-dominio, e ele o cliente tinha que escrever isso na conta pop, que era uma chateação.
Parabéns pelo artigo, agora vou ver se tiro algum dia para transformar os e-mails da minha empresa para assim.
[5] Comentário enviado por fabio em 06/09/2003 - 20:45h
Daniel, o IMAP não depende do servidor MTA e sim do servidor POP. Se você optar por Courier IMAP ele não vai nem querer saber qual MTA você está utilizando, seja Postfix, Sendmail, Exim e sim onde estão as mensagens dos usuários e quais os campos de autenticação na tabela, coisas que já estão bem explicadas por aqui :)
[7] Comentário enviado por msmaximo em 08/09/2003 - 17:21h
************ FALTA DE ÉTICA *******************
Esse tutorial NÃO PERTENCE ao senhor Rômulo Banhe
Fui alertado por uma amigo, sobre o ocorrido o que me deixou muito desapontado com o comportamento de alguns membros da comunidade.
Não tenho nada contra, que esse tutorial circule pela internet. Pois o meu intuito, foi que ele alcança-se as pessoas que pudessem a vir tirar algum benefício dele.
O que não contava, era que pessoas SEM escrúpulo, o tomassem como seu não levando em consideração o trabalho do autor original.
É ainda PIOR, o fato de não estar completo. Sendo que o Senhor Rômulo Banhe não teve nem a capacidade de copia-lo.
Mas caso queiram ver o tutorial completo, acessem:
[8] Comentário enviado por fabio em 09/09/2003 - 10:19h
Olá Marco,
Infelizmente em alguns casos não tenho como perceber que um artigo é de terceiros e só descobrimos quando o autor original se identifica, como é o seu caso.
Logo, nos desculpamos pelo transtorno e gostaríamos de saber o que você prefere:
1. que o artigo seja removido de nosso banco de dados?
2. que o artigo permaneça, porém com os devidos direitos autorais dedicados à você?
[9] Comentário enviado por msmaximo em 09/09/2003 - 13:40h
Olá Fabio,
li seu artigo e sei que você não possui nenhuma culpa...
Como eu havia comentado, eu tenho interesse que todos possam tirar algum proveito do meu tutorial, desde que, permaneçam os direitos autorais.
Respondendo a sua pergunta. Eu opto pela a segunda alternativa, e sugiro que seja completado a parte que falta usando o conteúdo do link que forneci.
Também informo para aos interessados, que estou em fase de teste para uma atualização desse tutorial, acrescentando algumas novas funcionalidades.
Só que dessa vez, espero que seja eu, que possa enviar o tutorial ao site :-)
Atenciosamente,
Marco A. S. Máximo
marco.maximo@pwo.com.br
[13] Comentário enviado por ezdn em 19/09/2004 - 15:10h
òtimo artigo eu preciso faze algo semelhante e este artigo é uma mao
na roda vai me ajudar muito
vlw msmaximo eu adorei este teu artigo vai me ajudar bastate té mais .
[19] Comentário enviado por hgdanilo em 09/05/2005 - 18:31h
Olá,
Eu estou precisando de uma ajuda sua, eu estou tentando instalar em casa o Postfix com o Courier-imap, tenho instalado o conectiva 9, mas quando eu passo o comando ./configure para iniciar a instalação do Courier ele dá a mensagem de erro abaixo:
configure: WARNING: === Courier authentication library not found.
configure: WARNING: === You need to download and install
configure: WARNING: === http://www.courier-mta.org/download.php#authlib first.
configure: WARNING: === If courier-authlib is installed in a non-default
configure: WARNING: === directory, set the COURIERAUTHCONFIG environment
configure: WARNING: === variable to the full path to the courierauthconfig
configure: WARNING: === binary and rerun this configure script.
configure: WARNING:
configure: error: courierauthconfig not found
Você sabe como eu devo fazer para instalar esse authlib?
[23] Comentário enviado por juliopimentel em 16/03/2006 - 20:24h
Acompanhei o ocorrido e achei lamentavél o ato praticado pelo Sr. Rômulo, quero deixar aqui o meu repúdio a este tipo de ato.
Quanto a dúvida do Sr. Buzaneli quero informar que em breve estarei postando aqui uma pequena modificação do tutorial do Marco Maximo, voltado exatamento para o Conectiva Linux 10. Com os devidos créditos ao autor do tutorial é claro, que por sinal foi competentissimo na sua criação.
Obrigado Marco !!! Seu tutorial me foi muito util!
[25] Comentário enviado por penrral em 13/04/2006 - 00:47h
Ola.. uma pequena dica pra os usuarios do OpenBSD.. o Courier-IMAP contém algumas pequenas diferença, deste localização dos arquivos a maneira como ele deve ser inicializado.
Para os interessados de uma olhada neste link http://dantams.sdf-eu.org/guides/obsd_courier_imap.html
[30] Comentário enviado por snails em 24/08/2006 - 20:02h
Kra...to lendo, relendo e reelendo esse tuto.....
Primeiramente...td bem q num eh legal fazer plagio de uma coisa alheia e sai pela net falando que é sua...mas mew...o proprio autor falo q a itensao do tuto foi passada pelo Romulo, que é o conhecimento d uma pessoa para otra....intam, o erro aki foi num ter falado q o tuto original era d FULANO....mas msm assim...sendo d um ou otro ta muito bom.....
Agora o seguinte....tava vendo as regras no BD, e as configurações no Postfix....e uma coisa que num entendi...pode ser bestera, como tbm pode num ser.....na Quota de disco, determinada no BD é de 10 Mb, e no arquivo main.cf tbm....mas e se eu tiver uma conta no meu servidor que tenha de ter 20 MB ???????
Ou se ao inves de um dominio só, eu tiver uns 50 dominios e todos com quotas de virtualbox diferentes ??????
Bom, fica aew a ideia, ou ate mesmo um ponto para atualizar esse tuto...como montar o mesmo servidor, mas para varios dominios...que acho que num foi focado essa ideia....
[35] Comentário enviado por rodrigoncar em 26/12/2006 - 13:14h
e ae pessoal...
Preciso retirar a configuração no servidor pop, para q ele não verifique a criptografia da senha (ou seja texto puro), pois instalei um slack e nele o sasl não aceita a criptografia, deixando como texto puro a msg sai, mas não recebe pois o pop está configurado para a criptografia...
Alguém pode me ajudar????
Abraços
Rodrigo N Carneiro
[36] Comentário enviado por psantos02 em 20/01/2007 - 22:33h
AJUDA....
Tenho instalado o Postfix e a funcionar, instalei agora o courier-imap e pop3.
Faço telnet à porta 25 dentro do SUSE 10.1 e fora (winxp) e não faço telnet às portas 110 e 143. Executando o netstat -lt todas estas portas estão à escuta.
o telnet funciona tanto por ip como por nome.
O que poderá estar a faltar?
[38] Comentário enviado por fernandocesario em 07/02/2007 - 19:57h
Ajuda,
Estou usando o artigo do colega para a instalacao Servidor de email com SMTP, POP, IMAP, quota e MySQL no conectiva 10 e quando dou o comando ./configure --without-ipv6 --enable-workarounds-for-imap-client-bugs ele me devolve o seguinte erro:
beta [/usr/local/src/courier-imap-4.1.2] > ./configure --without-ipv6 --enable-workarounds-for-imap-client-bugs
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking for C compiler default output file name... configure: error: C compiler cannot create executables
[40] Comentário enviado por ifc0nfig em 04/04/2007 - 09:02h
Este artigo tá blz segui ele diretinho e funcionou blz, agora seguinte tem como eu cadastrar outro dominio nele. Por exemplo: quero que o dominiovelho.com.br fique na mesma maquina do dominionovo.com.br que já está cadastrado no server, e que todos os e-mails de todos os usuarios do dominiovelho.com.br envia para suas contas respectivas no dominionovo.com.br e que a saida de e-mail fosse com o user@dominionovo.com.br.
[43] Comentário enviado por removido em 03/09/2008 - 11:39h
Olá estou gostando muito do tutorial, esta sendo de grande ajuda para um leigo como eu em linux, porem quando eu digito qualquer comando depois de selecionar o banco de dados, meu terminal fika assim:
mysql>CREATE TABLE aliases ( alias varchar(255) NOT NULL default, rcpt varchar(255) default NULL, PRIMARY KEY (alias)) TYPE=MyISAM;
->
e não sai desse " -> " até que eu de um comando inválido, todos os comandos tipo "show tables" ele tbm faz isso, alguem sabe me dizer oque está acontecendo ???
[50] Comentário enviado por wellingtoncunha em 04/01/2011 - 16:51h
Ola Sr. Marcos
Eu acho que no seu tutorial vc se esqueceu ou omitiu sobre o courier-authlib ou na sua maquina jah tinha instalado
checking for courierauthconfig... no
configure: WARNING: === Courier authentication library not found.
configure: WARNING: === You need to download and install
configure: WARNING: === http://www.courier-mta.org/download.php#authlib first.
configure: WARNING: === If courier-authlib is installed in a non-default
configure: WARNING: === directory, set the COURIERAUTHCONFIG environment
configure: WARNING: === variable to the full path to the courierauthconfig
configure: WARNING: === binary and rerun this configure script.
configure: WARNING:
configure: error: courierauthconfig not found
pois apartir desse ponto ele pede essa lib ele nao encontrar e pede para ser instalado
vou configurar agora o courier-authlib depois posto se tiver problema
Mais valeu seu turorial me ajudou muito ele salvou minha vida aqui na empresa estava a alguns meses me batendo com isso.
Quanto a gelera que estar tendo problema tipo
CC $PATH algo do tipo tem que installar um compilador C (recomendo o GCC), e ver se ele esta no profile da distro (para Debian /etc/profile)
Espero ter contribuido, da mesma forma que contribuiram comigo
[52] Comentário enviado por crissbarbosa123 em 04/04/2014 - 15:25h
olá meu nome e Cristiane e eu estou fazendo um projeto final de curso(TÉCNICO EM REDES DE COMPUTADORES) e pretendo criar um servidor de email mas não faço ideia de onde começar .. me ajude por favor.. Obrigado pela atenção..
[53] Comentário enviado por esdrasconde em 03/10/2014 - 00:31h
Boa noite Marco,
Eu gostaria de te pedir uma ajuda se fosse possível. Eu instalei o servidor de email do Postfix no mesmo servidor que roda o Zabbix, e meu intuito era que quando o zabbix tivesse um alerta crítico mandasse um email automaticamente pro gmail que eu criei, no Zabbix já está tudo configurado corretamente pois tenho até um livro, porém no Postfix eu já olhei tutoriais, vídeos, mas não deu jeito.
No Zabbix consta como se tivesse enviado o email pro email cadastrado, mas não está enviando. Lá no Zabbix ele pede para colocar o nome do servidor SMTP, não sei qual nome colocar lá, gostaria também de uma ajuda caso você possa me dar, e como configurar no Postfix para ele mandar email pro gmail, se eu devo ter um domínio.. enfim.
[54] Comentário enviado por julianamoraes em 22/07/2016 - 11:05h
Pessoal, desculpa, sou novo no fórum, mas estava tendando configurar o meu e-mail profisssional para receber e enviar mensagens direto no gmail, vi um tutor nesse site http://gmailentrarlogin.net/ mas ainda assim não consegui. Deu uns erros parecidos com os comentários de alguns membros acima.
Alguém poderia me mostrar um tutor passo a passo para eu consegui?