Eu estava pesquisando como enviar e-mails usando shell scripts e fiquei impressionado com a facilidade com que o openSUSE permite instalar e configurar um servidor de e-mail simples por meio do Centro de Controle do YaST, enquanto outras distribuições demandam mexer em vários arquivos de configuração e executar vários comandos.
Se você já usou algum cliente de e-mail como o Evolution ou o Thunderbird, sabe que o recebimento de e-mails é feito por protocolos como o IMAP e o POP3, enquanto o envio de e-mails é feito pelo protocolo SMTP.
Há principalmente dois tipos de programas em todo o trâmite necessário para enviar, transmitir e receber e-mails, que são:
- o MUA (Mail User Agent, “agente do usuário de e-mail”, em uma tradução livre), que é o cliente de e-mail, o programa que o usuário usa para receber e/ou enviar e-mails, a exemplo dos já citados Evolution e Thunderbird e de outros aplicativos conhecidos, como KMail, Claws Mail, Geary, Microsoft Outlook e dos utilitários de linha de comando mailx e Mutt, dentre outros; e
- o MTA (Mail Transfer Agent, agente de transporte de e-mail), que é o servidor de e-mail, que tanto pode responder por um domínio como apenas encaminhar e-mails para outros MTAs, exemplos incluem Postfix, Sendmail, Exim e outros.
Para enviar e-mails usando shell scripts, podemos fazer um MUA como o mailx conectar diretamente no servidor SMTP de algum serviço de e-mail como o Gmail. Mas usar um MTA local pode nos trazer a vantagem de desacoplar o envio do e-mail da execução do script. Caso não seja possível conectar ao servidor SMTP (durante uma queda de conexão com a Internet, por exemplo), o MTA guarda o e-mail em uma fila e tenta enviá-lo de novo depois, enquanto o MUA simplesmente falha porque não consegue enviar o e-mail na mesma hora.
E para instalar e configurar um MTA localmente não precisamos subir todo um serviço de e-mail novo com um domínio personalizado: podemos simplesmente configurar o MTA local para fazer retransmissão SMTP (SMTP relay). Dessa forma, a única função do MTA local é atuar como ponte entre o MUA, invocado pelo script, e o MTA remoto, do serviço de e-mail, retransmitindo os e-mails e fazendo fila quando necessário.
Nesse tutorial, você verá como instalar e configurar o Postfix para atuar como SMTP relay no openSUSE. Depois, veremos como enviar e-mails a partir do terminal usando o mailx.
O Postfix é um MTA software livre que pode ser instalado em sistemas baseados no Unix, como o Linux, e é empacotado para fácil instalação por várias distribuições Linux.
O passo a passo a seguir foi testado no openSUSE Leap 15.3 e no Linux Kamarada 15.2 (lembrando que o Linux Kamarada é focado em desktops, não em servidores, mas é possível fazer coisas assim nele também).
Escolhi como MTA e MUA, respectivamente, o Postfix e o mailx porque já vêm instalados por padrão no openSUSE Leap e podem ser facilmente instalados no Linux Kamarada.
Para variar, vou usar um serviço de e-mail alternativo ao Gmail, o Zoho Mail. Criei uma conta nesse serviço só para enviar e-mails a partir de scripts para meu e-mail pessoal.
As configurações a seguir podem variar conforme o serviço de e-mail que você for usar. Verifique junto ao seu provedor de serviço como configurar o envio de e-mails por SMTP.
Instalando os pacotes necessários
Para configurar o Postfix, vamos usar um módulo do YaST que não vem instalado por padrão. Para garantir que estamos todos na mesma página, vamos instalar todos os pacotes de que vamos precisar:
1
# zypper in yast2-mail postfix mailx
Configurando o Postfix pelo YaST
Abra o Centro de Controle do YaST. Aqui vou mostrar a interface gráfica só porque é mais bonita, mas é possível usá-lo pelo terminal também, no caso de servidores.
Se você estiver usando a área de trabalho GNOME, para iniciar o YaST, abra o menu Atividades, no canto superior esquerdo da tela, digite yast
e clique no ícone correspondente.
Se você estiver usando o terminal, para iniciar o YaST, execute:
1
# yast
Na tela principal do YaST, na categoria Serviços de rede, clique em Servidor de e-mail:
Na primeira tela do assistente de configuração, Configurações gerais, deixe as opções como estão marcadas por padrão e clique em Próximo:
Na tela seguinte, no campo Servidor de correio eletrônico de saída, informe o endereço e a porta do servidor SMTP do serviço de e-mail remoto, separados por dois pontos (no formato endereco:porta
). Para o Zoho Mail, por exemplo, informe smtp.zoho.com:587
:
Em Criptografia TLS, certifique-se de que a opção Usar esteja marcada (isso também pode variar de acordo com o serviço de e-mail, mas geralmente o uso de TLS é recomendado).
Depois, clique em Autenticação.
Informe o Nome de usuário e Senha da sua conta no serviço de e-mail:
(para o nome de usuário, use o formato seunomedeusuario@zohomail.com
)
Clique OK e, na tela anterior, clique em Próximo.
Nessa última tela do assistente de configuração, Entrada de e-mail, também podemos deixar as opções como estão marcadas por padrão e clicar em Concluir:
Feito isso, o Postfix está pronto para ser usado como SMTP relay.
Testando o envio pelo Postfix
Para testar o funcionamento do Postfix, veja o tutorial:
Dicas para gerenciar o Postfix
Para verificar se há e-mails na fila para serem enviados, use o comando mailq.
Ele pode informar que a fila de e-mails está vazia (mail queue is empty):
1
2
$ mailq
Mail queue is empty
Ou mostrar quais e-mails estão na fila para serem enviados:
1
2
3
4
$ mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
CDE65BFC14B* 454 Tue Oct 26 11:35:27 seunomedeusuario@zohomail.com
emaildodestinatario@exemplo.com
O comando postqueue produz a mesma saída, mas precisa ser executado como root:
1
2
# postqueue -p
Mail queue is empty
Para tentar enviar os e-mails que estão na fila e, assim, esvaziá-la, use o comando postfix:
1
# postfix flush
Ou:
1
# postqueue -f
Para esvaziar a fila excluindo os e-mails sem enviá-los, use o comando postsuper:
1
# postsuper -d ALL
Se precisar reiniciar o serviço do Postfix:
1
# systemctl restart postfix
Normalmente, o Postfix escreve seu log em /var/log/mail
. Você pode monitorá-lo com:
1
# tail -f /var/log/mail
Ou, se esse arquivo não existir no seu sistema, pode ser que o sistema esteja usando o sistema de log do systemd, chamado de journal, como é o caso do Linux Kamarada. Nesse caso, o comando para monitorar o log é:
1
# journalctl -fu postfix
Servidor de e-mail avançado
Nesse tutorial, abordei como configurar um servidor SMTP simples para retransmitir (fazer relay) de mensagens para um servidor SMTP maior, de um provedor de serviço. Mas, caso seu interesse seja saber como configurar um servidor SMTP para um domínio, sugiro que consulte a wiki do openSUSE, que explica como configurar o Postfix e outros componentes:
Ou talvez você se interesse por uma suíte como o Zimbra, que também inclui o Postfix.