Iremos configurar e usar o Postfix em um sistema Debian. Parte-se do princípio de que o leitor está em seu computador pessoal, com um IP dinâmico e sem um domínio público. Isso significa que será preciso ter uma conta em um servidor de emails que aceite conexões SMTP. No exemplo, nós nos conectaremos ao Yahoo, mas todos os outros grandes servidores de email servirão. Usuários do GMail precisam saber que devem ativar a opção de "liberar acesso a aplicativos menos seguros" para que as instruções aqui funcionem.
Como estaremos trabalhando com SMTP, será possível apenas enviar emails. Pegar mensagens do servidor de email exige um procedimento totalmente diferente.
Preparações
Instale o Postfix com:
#apt-get install postfix
Isso irá desinstalar o Exim, que já vem por padrão com o Debian.
Agora descubra como se conectar ao seu servidor de email. No caso do Yahoo, as instruções, no momento desta postagem, dizem para se conectar a smtp.mail.yahoo.com, porta 465 ou 587. No entanto, o Postfix aceita apenas a porta 587.
Será preciso editar e criar arquivos na pasta /etc/postfix/, além de ler arquivos em /var/log/. É preciso ser root (ou usar sudo) para fazer essas coisas.
Vamos nos basear num caso fictício em que o usuário "batman" manda emails do computador "caverna", com domínio "localdomain", que é o domínio inválido padrão. No servidor do Yahoo, o email de login é "bruce_wayne@yahoo.com.br", com senha "euamogotham".
Arquivo de configuração
Abra o arquivo /etc/postfix/main.cf. Ele contém as principais configurações do postfix. Ele já virá com um bocado de configurações padrão no seguinte formato:
- Cada linha segue o padrão "constante = valor";
- Linhas começando com "#" são ignoradas;
- Linhas começando com espaços em branco são continuação da linha anterior.
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_generic_maps = hash:/etc/postfix/generic
smtp_tls_security_level = may
relayhost = [smtp.mail.yahoo.com]:587
myhostname = caverna.localdomain
A primeira linha diz que usaremos autenticação.
A segunda diz o arquivo onde estarão as credenciais.
A terceira diz que não nos comunicaremos anonimamente, ou seja, mandaremos as credenciais ainda que o servidor não peça.
A quarta linha determina um arquivo com informações para reescrever o endereço de remetente.
A quinta linha diz que usaremos SSL/TLS, protocolos exigidos em qualquer servidor de email decente.
A sexta diz qual será nosso servidor relay de SMTP.
A última diz quem somos. Essa informação não é muito útil, já que é um domínio falso que não pode ser acessado publicamente, mas é necessária para a reescrita do remetente.
Credenciais
Crie o arquivo /etc/postfix/sasl_passwd. Ele guardará as credenciais em uma única linha, conforme mostrado a seguir:
[smtp.mail.yahoo.com]:587 bruce_wayne@yahoo.com.br:euamogotham
A linha tem o servidor, com a porta, um espaço e depois o login e a senha separados por dois-pontos. O Postfix não irá ler esse arquivo mas sim um outro, gerado a partir desse, com extensão ".db". Tendo escrito o arquivo, vá para a pasta /etc/postfix/ e execute o seguinte comando:
#postmap sasl_passwd
O comando anterior gera o arquivo sasl_passwd.db. Você pode até mesmo apagar o arquivo de texto sasl_passwd se quiser, mas saiba que se você precisar alterar as credenciais, será preciso gerar o arquivo ".db" novamente.
Reescrita de remetente
Se você tentar mandar o email agora, ele irá com o remetente "batman@caverna.localdomain". Alguns servidores de email reescrevem automaticamente o remetente (como o do Hotmail/Live/Outlook), mas outros (como o do Yahoo) não irão aceitar a mensagem, porque o domínio do remetente é inválido. A solução é reescrever o remetente, que é um processo parecido com o das credenciais. Crie o arquivo /etc/postfix/generic, com a linha única mostrada a seguir:
batman@caverna.localdomain bruce_wayne@yahoo.com.br
Depois entre na pasta /etc/postfix/ e use o comando a seguir para criar o arquivo .db:
#postmap generic
Na teoria isso deveria ser suficiente para reescrever o remetente, mas na prática pode ser uma boa fonte de dor-de-cabeça, porque o Postfix tem outros mecanismos para alterar os endereços, e eles podem entrar em conflito. É preciso realizar muitos testes para assegurar que as transformações estejam acontecendo como desejado.
Finalização e teste
Execute o comando a seguir para reiniciar o Postfix:
#postfix reload
Você pode usar um programa de email como o Mutt para testar o envio de emails. Você pode enviar para interface de usuário dele ou com um comando como esse:
$ echo mensagem | mutt -s 'assunto' coringa@arkham.com