Pular para o conteúdo
Início » Como Configurar Seu Próprio Servidor SMTP de Envio

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.

Marcações: