Como Configurar Seu Próprio Servidor SMTP de Envio

Neste artigo, exploraremos como configurar nosso próprio servidor SMTP (Simple Mail Transfer Protocol) em nosso ambiente local e usá-lo para enviar e-mails de nosso servidor remoto. Para alcançar esse objetivo, utilizaremos o servidor Postfix em conjunto com Docker e a plataforma Gmail. Abordaremos os seguintes tópicos:

  1. Entendendo o SMTP e Servidor SMTP
  2. O que é o Postfix?
  3. Senha de Aplicativo do Gmail: O que é e como obtê-la?
  4. Configurando nosso Servidor SMTP em um Ambiente Docker

1. Entendendo o SMTP e Servidor SMTP

O SMTP, ou Protocolo de Transferência de Email Simples, é um protocolo de comunicação essencial para o envio de e-mails. Um servidor SMTP, por outro lado, é um servidor que lida com o encaminhamento de e-mails, tanto os recebidos quanto os enviados, por meio desse protocolo. O processo de envio de uma mensagem por meio de um servidor SMTP envolve as seguintes etapas:

  • O remetente cria uma mensagem de e-mail, especificando o destinatário, o assunto e o conteúdo, usando um cliente de e-mail (como Outlook, Thunderbird ou Gmail).
  • O cliente de e-mail estabelece uma conexão com o servidor SMTP, geralmente por meio da porta 25 usando TCP/IP.
  • O servidor SMTP autentica o remetente e realiza todas as ações necessárias para encaminhar a mensagem ao servidor de destino, incluindo a verificação dos endereços de destinatários e a formatação correta da mensagem.
  • Após a entrega bem-sucedida ao servidor de destino, a mensagem é depositada na caixa de entrada do destinatário.

É importante notar que um servidor SMTP também pode ser usado para recuperar e-mails, mas neste artigo, focaremos apenas na configuração do servidor para envio.

2. O que é o Postfix?

O Postfix é um software de servidor de e-mail amplamente utilizado em sistemas operacionais baseados em Unix. Funcionando como um Agente de Transferência de Correio (MTA), o Postfix facilita a transmissão e a distribuição de e-mails. É conhecido por ser altamente confiável, escalável e de alto desempenho, além de ser uma solução de código aberto. O Postfix utiliza o protocolo SMTP para lidar com operações de envio, recebimento e encaminhamento de e-mails.

3. Senha de Aplicativo do Gmail: O que é e como obtê-la?

Uma senha de aplicativo do Gmail é uma medida de segurança projetada para permitir o acesso a aplicativos ou dispositivos de terceiros usando uma conta do Gmail sem a necessidade da senha regular da conta. Essas senhas de aplicativo são especialmente úteis para contas que têm a autenticação de dois fatores (2FA) ativada. Para enviar e-mails de um servidor próprio usando uma conta do Gmail, é necessário usar uma senha de aplicativo, pois não é possível autenticar diretamente pelo servidor Postfix com 2FA ativada.

Após criar uma senha de aplicativo, poderemos prosseguir com a etapa 4.

4. Configurando nosso Servidor SMTP em um Ambiente Docker

Agora, vamos iniciar o processo de criação do servidor SMTP usando Docker. Utilizaremos uma imagem Docker já configurada para funcionar como um servidor SMTP. Para começar, instale o Postfix em uma imagem Ubuntu e configure todas as opções necessárias:

FROM ubuntu:latest

ARG EMAIL
ARG EMAIL_PASSWORD
ARG MAIL_NAME
ARG SMTP_DOMAIN
ARG SMTP_PORT

RUN apt-get update && \
    apt-get install -y mailutils && \
    apt install -y postfix

COPY main.cf /etc/postfix/main.cf

RUN sh -c 'echo "root: ${EMAIL}" >> /etc/aliases' && \
    sh -c 'echo "${MAIL_NAME}" >> /etc/mailname' && \
    sh -c 'echo "[${SMTP_DOMAIN}]:${SMTP_PORT} ${EMAIL}:${EMAIL_PASSWORD}" >> /etc/postfix/sasl_passwd' && \
    postmap /etc/postfix/sasl_passwd && \
    chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db

CMD service postfix restart && tail -f /dev/null

Aqui estão as principais etapas do Dockerfile:

  1. Selecionamos a imagem Ubuntu mais recente como nossa base.
  2. Definimos variáveis para os valores necessários, que serão passados durante a construção da imagem.
  3. Atualizamos e instalamos os pacotes necessários, incluindo o Postfix.
  4. Copiamos nosso arquivo de configuração main.cf para o local adequado.
  5. Configuramos os aliases, o arquivo mailname e as informações de autenticação SMTP.
  6. Finalmente, reiniciamos o serviço Postfix e mantemos o contêiner em execução.

Além disso, é necessário criar o arquivo main.cf com as configurações apropriadas. Este arquivo determina como o servidor SMTP funcionará. O Dockerfile já foi configurado para copiar este arquivo para o local certo. Aqui estão as configurações do main.cf:

# Consulte /usr/share/postfix/main.cf.dist para uma versão comentada e mais completa.

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 3.6

smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, /etc/mailname, localhost, localhost.localdomain, localhost
relayhost = [smtp.gmail.com]:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
inet_protocols = all
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_use_tls = yes
smtp_tls_CAfile = /etc/

ssl/certs/ca-certificates.crt

Agora, para criar e executar o contêiner, crie um arquivo docker-compose.yml:

version: '3.8'

services:
  smtp-server:
    build:
      context: .
      args:
        EMAIL: ${EMAIL}
        EMAIL_PASSWORD: ${EMAIL_PASSWORD}
        MAIL_NAME: ${MAIL_NAME}
        SMTP_DOMAIN: ${SMTP_DOMAIN}
        SMTP_PORT: ${SMTP_PORT}
    ports:
      - ${PORT}:25

Este arquivo docker-compose.yml define um serviço chamado smtp-server. Ele utiliza o Dockerfile que configuramos anteriormente e passa as variáveis de ambiente necessárias.

Por fim, crie um arquivo .env com as informações sensíveis, como seu endereço de e-mail, senha de aplicativo do Gmail e outras configurações específicas:

[email protected]
EMAIL_PASSWORD=sua_senha_de_aplicativo
MAIL_NAME=seu_nome_de_email
SMTP_DOMAIN=smtp.gmail.com
SMTP_PORT=587
PORT=25

Substitua as informações acima pelos seus próprios detalhes de conta.

Agora você pode construir e executar o servidor SMTP com o seguinte comando:

docker-compose up --build

Após a conclusão deste processo, seu servidor SMTP estará pronto para ser usado. Você pode enviar e-mails do seu servidor remoto usando o servidor Postfix que configurou.