Created: 2020-05-24 10:11 Updated: 2021-07-22 10:24

Hoje vou falar sobre o MSMTP. Este cliente SMTP tem sido indicado para substituir o SSMTP, já que este último não está mais sendo mantido há algum tempo.

Mas, a pergunta deve ser a seguinte: por que eu preciso de um cliente SMTP num servidor Linux?

A resposta é simples, mas não tanto. A parte simples é que, muitas vezes, instalamos aplicações ou ferramentas de monitoramento nos servidores que podem precisar enviar e-mails de uma forma simples, sem que precisemos configurar um servidor de e-mails só para isso. Então, um cliente de e-mail poderia fazer esta função sem que você precise alterar a aplicação para que ela use um cliente SMTP próprio. Muitas aplicações Linux usam ferramentas do sistema operacional para enviar e-mails como, por exemplo, o comando mail.

Então, um cliente SMTP pode ser bastante útil e fácil de configurar. Outro exemplo de cliente SMTP é o SSMTP, que inclusive já comentei aqui quando falei um pouco sobre o SmartMon-tools.

A parte não tão boa de um cliente SMTP é a seguinte: se você tem disponível um serviço SMTP como o Exim, Postfix ou Sendmail, mesmo que funcionando como relay, o envio do e-mail vai consumir pouco tempo da sua aplicação, porque o serviço de e-mail irá inserir a mensagem na fila de envio, liberando a aplicação e somente depois a enviará a mensagem para o destinatário ou para o servidor de relay.

Já se você estiver usando um cliente SMTP como o SSMTP ou o MSMTP, quando a aplicação envia um e-mail, o comando de envio do e-mail só é finalizado (e a aplicação liberada) após o envio do e-mail. Isso com certeza será um problema se a aplicação enviar e-mails constantemente.

No entanto, eu considero estes clientes uma boa alternativa para, por exemplo, aplicações que enviam e-mails esporadicamente ou até mesmo aplicações de monitoramento como, por exemplo, o Smartd (SmartMonTools).

Na infraestrutura usada numa empresa para quem ofereço serviços na data de criação deste artigo, por exemplo, não há um serviço SMTP disponível, então, as aplicações de monitoramento, como o Smartd, utilizam o SSMTP ou MSTMP.

Então, se eu optar por um cliente SMTP, qual devo usar? Eu usaria o MSMTP pelo simples fato que o SSMTP não possui atualizações há um bom tempo.

Instalação do MSMTP no Debian

No Debian 10 (Buster), o MSMTP é parte do repositório oficial, o que facilita muito a sua instalação:

sudo apt install msmtp

Se a ideia é facilitar o uso das aplicações, como o SmartD, então serão necessárias mais duas aplicações:

sudo apt install msmtp-mta bsd-mailx

Configuração do MSMTP

O MSMTP pode ser configurado de duas formas: por usuário ou global. A diferença é onde o arquivo será armazenado: se ele for armazenado como /etc/msmtprc, então ele será global. Se a configuração for com base no usuário, então o arquivo deve ser criado no diretório home do usuário como, por exemplo /home/usuario1/.msmtprc. Em ambos os casos, o conteúdo do arquivo é idêntico, excetuando-se os dados das contas de acesso, claro.

O formato do arquivo pode ser dividido em 3 partes: configurações padrões (parâmetros gerais), configuração de contas e, no final, a conta padrão a ser utilizada. Veja o exemplo oferecido pelo Wiki do Debian:

# Set default values for all following accounts.
defaults
port 587
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

account gmail
host smtp.gmail.com
from <user>@gmail.com
auth on
user <user>
passwordeval gpg --no-tty -q -d ~/.msmtp-gmail.gpg

# Set a default account
account default : gmail

Costumo usar a configuração global (/etc/msmtprc) para servidores, lembrando que nesse caso, deve ser restringido o acesso ao arquivo:

chmod 640 /etc/msmtprc

A página do manual (man msmtp) contém todas as opções de configuração disponíveis, que podem variar de acordo com o serviço SMTP a ser utilizado. Por exemplo, para o SMTP da Locaweb, costumo usar a seguinte configuração:

# Enable or disable TLS/SSL encryption
auth on
tls on
tls_starttls on
tls_certcheck off
tls_trust_file /etc/ssl/certs/ca-certificates.crt

# Set up a default account settings
account meudominio
add_missing_from_header on
syslog on
host "nome-servidor-smtp"
port 587
domain "nome.dominio'"
maildomain "nome.dominio"
user nome-usuario@nome.dominio
password senha-usuario
from nome-usuario@nome.dominio

account default : meudominio

Para testar é muito simples:

mail -s "teste" destinatario@dominio.destinatario < /dev/null

Deve ser enviado um e-mail com o corpo da mensagem vazio.

Se ocorrer algum problema, dê uma olhada nos logs do sistema (/var/log/messages e /var/log/syslog) e revise as configurações.

Até mais.