Estou tentando configurar o postfix para colocar mensagens de entrada de diferentes domínios em caixas de correio catchall.
O caso de uso é o seguinte:
- clientes empresariais enviam e-mails para o endereço [email protected] (a parte local é sempre diferente, a parte do domínio é sempre a mesma para todos os clientes)
- a caixa de correio de destino, onde o e-mail é colocado, deve ser igual ao domínio do remetente (e-mails de [email protected] e [email protected] são colocados no /customer1.com, e-mails de [email protected] em /customer2.com)
- as caixas de correio /customer1.com e /customer2.com são pesquisadas via POP3 por diferentes clientes com diferentes credenciais de autenticação
Exemplo, o seguinte e-mail recebido:
From: [email protected]
To: [email protected]
deve ser colocado na caixa de correio virtual local:
/customer1.com
O domínio To é sempre o mesmo. As caixas de correio locais são nomeadas como possíveis entrada de domínios.
Existe a possibilidade de usar virtual_mailbox_maps ou similar para este propósito?
ATUALIZAÇÃO:
Eu criei a seguinte entrada em /etc/postfix/virtual_alias_maps
:
@myservice.com catchall
para apontar todos os e-mails para a caixa de correio "catchall".
Nesta caixa de correio, criei um script do Sieve /var/mail/vhosts/myservice.com/catchall/.dovecot.sieve
:
require ["variables"];
# pick any ("*") domain in From or Sender header
if address :matches :domain ["From", "Sender"] "*" {
# the variable ${1} contains the domain name
redirect "${1}";
}
Este script do Google Sieve redireciona todos os e-mails para a caixa de correio igual ao domínio do remetente (por exemplo, customer1.com).
Para rejeitar todos os e-mails de domínios desconhecidos (não no banco de dados), usei smtpd_sender_restrictions em /etc/postfix/main.cf
:
smtpd_sender_restrictions = permit_mynetworks, pgsql:/etc/postfix/pgsql_check_sender_access.cf
/etc/postfix/pgsql_check_sender_access.cf
:
user = dbuser
password = dbpass
dbname = customers
query = select case count(*) when 0 then 'REJECT' else 'OK' end from servers where user_domain='%d';
hosts = 127.0.0.1:5432