Configurando o encaminhamento SMTP duplo
Gerenciar vários servidores de email com contas de usuário idênticas pode ser um desafio. Nesse cenário, quando um email é enviado a um usuário em example.com, ele precisa ser recebido pelos servidores james e winmail, garantindo que o conteúdo do email permaneça inalterado.
Soluções comuns, como configurar vários registros MX no DNS, são insuficientes, pois só podem direcionar example.com para um único servidor por vez. Usar o Postfix para encaminhar e-mails para ambos os servidores sem armazenamento local tem se mostrado complexo, levando a soluções como scripts com smtplib, que podem não ser confiáveis. Vamos explorar alternativas melhores.
Comando | Descrição |
---|---|
import smtplib | Importa a biblioteca Simple Mail Transfer Protocol para enviar e-mails usando Python. |
import sys | Importa os parâmetros específicos do sistema e o módulo de funções, usado para obter argumentos de linha de comando. |
from email.mime.text import MIMEText | Importa a classe MIMEText para criar mensagens de email baseadas em texto. |
from email.mime.multipart import MIMEMultipart | Importa a classe MIMEMultipart para criar mensagens de email multipartes. |
msg.attach(MIMEText('text', 'plain')) | Anexa um corpo de texto simples à mensagem de email. |
with smtplib.SMTP(server) as smtp | Abre uma conexão com o servidor SMTP e garante que ela seja devidamente fechada após o envio do e-mail. |
postmap /etc/postfix/transport | Gera um banco de dados binário a partir do arquivo de mapa de transporte, usado pelo Postfix para roteamento de correio. |
systemctl reload postfix | Recarrega a configuração do Postfix sem parar o serviço, aplicando as alterações feitas. |
Compreendendo a integração Postfix e Python
Os scripts fornecidos são projetados para encaminhar emails para dois servidores SMTP, garantindo que ambos os servidores recebam o mesmo email. O script Python, multi_forward.py, usa o import smtplib biblioteca para lidar com o envio de e-mail. Ele importa sys para obter argumentos de linha de comando, como o remetente e o destinatário. O script constrói o e-mail usando from email.mime.text import MIMEText e from email.mime.multipart import MIMEMultipart para criar e anexar o corpo do email. Em seguida, ele itera sobre uma lista de servidores SMTP e envia o e-mail para cada um deles usando with smtplib.SMTP(server) as smtp.
No lado do Postfix, a configuração envolve a modificação do /etc/postfix/master.cf arquivo para definir o serviço de transporte personalizado, multi_forward, que usa o script Python. O /etc/postfix/main.cf arquivo é atualizado para incluir um mapa de transporte, que é especificado em /etc/postfix/transport. O comando postmap /etc/postfix/transport cria um banco de dados binário a partir do mapa de transporte e systemctl reload postfix aplica as alterações de configuração sem interromper o serviço Postfix. Essa configuração garante que qualquer email enviado para example.com seja processado pelo script Python e encaminhado para ambos os servidores SMTP.
Encaminhar e-mails para vários servidores SMTP com Python
Usando Python para lidar com encaminhamento SMTP
# multi_forward.py
import smtplib
import sys
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
sender = sys.argv[1]
recipient = sys.argv[2]
def forward_email(sender, recipient):
msg = MIMEMultipart()
msg['From'] = sender
msg['To'] = recipient
msg['Subject'] = 'Forwarded email'
msg.attach(MIMEText('This is the body of the email', 'plain'))
# SMTP servers
smtp_servers = ['james.example.com', 'winmail.example.com']
for server in smtp_servers:
with smtplib.SMTP(server) as smtp:
smtp.sendmail(sender, recipient, msg.as_string())
if __name__ == '__main__':
forward_email(sender, recipient)
Configurando o Postfix para usar o script Python
Configuração do Postfix para encaminhamento de email personalizado
# /etc/postfix/master.cf
multi_forward unix - n n - - pipe
flags=Rhu user=nobody argv=/usr/local/bin/multi_forward.py ${sender} ${recipient}
# /etc/postfix/main.cf
transport_maps = hash:/etc/postfix/transport
# /etc/postfix/transport
example.com multi_forward:
# Update transport map
postmap /etc/postfix/transport
# Reload Postfix
systemctl reload postfix
Aprimorando a funcionalidade do Postfix com ferramentas adicionais
Outra abordagem para encaminhar e-mails para vários servidores SMTP envolve o uso de ferramentas e configurações adicionais do Postfix. Uma dessas ferramentas é o Postfix sender_dependent_relayhost_maps, que permite especificar diferentes hosts de retransmissão com base no endereço do remetente. Embora esse recurso seja normalmente usado para rotear mensagens de saída por meio de diferentes hosts de retransmissão, ele pode ser adaptado para nosso caso de uso com algumas configurações criativas. Por exemplo, uma combinação de virtual_alias_maps e recipient_bcc_maps poderia ser usado para duplicar e-mails e encaminhá-los para endereços diferentes, que são então roteados para os respectivos servidores.
Além disso, integrando o Postfix com um filtro de e-mail como Amavisd-new ou Procmail poderia fornecer mais flexibilidade no manuseio e roteamento de e-mails. Esses filtros podem processar e-mails à medida que passam pelo Postfix, permitindo que scripts ou regras personalizadas dupliquem e encaminhem mensagens para vários destinos. Embora essa configuração possa ser mais complexa do que usar um simples script Python, ela pode oferecer maior confiabilidade e escalabilidade para ambientes que exigem recursos robustos de processamento de e-mail.
Perguntas comuns e soluções para encaminhamento de e-mail Postfix
- Como posso configurar vários registros MX no DNS?
- Infelizmente, os registros DNS MX suportam apenas o mapeamento para um servidor por nível de prioridade, portanto, essa abordagem não funcionará para encaminhamento para vários servidores simultaneamente.
- Qual é o propósito do transport_maps diretiva?
- O transport_maps A diretiva no Postfix especifica o mapeamento de endereços de email ou domínios para métodos e destinos específicos de transporte de email.
- Pode sender_dependent_relayhost_maps ajudar neste cenário?
- Sim, sender_dependent_relayhost_maps pode rotear e-mails através de diferentes hosts de retransmissão com base no endereço do remetente, mas precisa ser adaptado de forma criativa para encaminhar para vários servidores.
- Como é que virtual_alias_maps funciona no Postfix?
- O virtual_alias_maps A diretiva permite que o Postfix mapeie endereços de e-mail para outros endereços, permitindo o encaminhamento e redirecionamento de e-mails.
- Qual é o papel recipient_bcc_maps?
- O recipient_bcc_maps A diretiva permite que o Postfix adicione automaticamente destinatários CCO aos e-mails recebidos, útil para duplicar mensagens.
- Eu posso usar Amavisd-new com Postfix para encaminhamento de e-mail?
- Sim, Amavisd-new pode ser integrado ao Postfix para aplicar regras personalizadas de filtragem e encaminhamento, fornecendo mais controle sobre o processamento de e-mail.
- O que é master.cf arquivo usado para?
- O master.cf arquivo no Postfix define os processos de entrega de correio e suas configurações, incluindo serviços de transporte personalizados.
- Como faço para atualizar o transport map base de dados?
- Use o postmap /etc/postfix/transport comando para criar ou atualizar o banco de dados binário a partir do arquivo de mapa de transporte.
- Por que recarregar o Postfix é importante?
- Recarregando o Postfix com systemctl reload postfix aplica alterações de configuração sem interromper o serviço, garantindo um bom funcionamento.
- O que é smtplib usado em Python?
- O smtplib A biblioteca em Python é usada para enviar e-mails via SMTP, permitindo que scripts lidem com a transmissão de e-mail de forma programática.
Considerações finais sobre encaminhamento de servidor duplo
Configurar o Postfix para encaminhar mensagens para vários servidores SMTP envolve uma combinação de scripts personalizados e configurações detalhadas do Postfix. Embora as tentativas iniciais de usar DNS ou scripts Python simples possam não oferecer a confiabilidade necessária, a integração de recursos e ferramentas avançadas do Postfix, como Amavisd-new ou Procmail, pode fornecer uma solução mais robusta. Ao configurar cuidadosamente mapas de transporte, mapas de alias virtuais e mapas BCC de destinatários, você pode garantir o encaminhamento de mensagens contínuo e eficiente para servidores James e Winmail. Essa abordagem garante que sua infraestrutura de e-mail permaneça resiliente e capaz de lidar com requisitos complexos de roteamento.