Usando o postfix, eu gostaria que todos os emails recebidos, em qualquer endereço (incluindo aqueles que não mapeiam para usuários locais) fossem canalizados para um script. Eu tentei configurar mailbox_command
em /etc/postfix/main.cf
:
mailbox_command = /path/to/myscript.py
Isso funciona muito bem se o usuário é um usuário local, mas falha para usuários "desconhecidos" que não têm aliases. Eu tentei configurar luser_relay
para um usuário local, mas isso é um empecilho mailbox_command
para que o comando não seja executado. Tentei definir local_recipient_maps=
(sequência vazia), mas a mensagem ainda é devolvida (usuário desconhecido).
Existe uma invocação mágica que eu possa usar para fazer com que todos os usuários conhecidos e desconhecidos também acessem o script?
A /etc/postfix/main.cf
seguir, é o Ubuntu 10.04 padrão, com exceção da mailbox_command
linha:
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = ... snip ...
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = sassafras, ... snip ...,localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
mailbox_command = /path/to/my/script.py
Respostas:
Ok, acabei de fazer isso funcionar - embora mais cabeludo do que pensei que seria. Larguei a
maildir_command
peça e fui com elatransport_maps
. A chave é fazer 5 coisas:/etc/postfix/master.cf
para canalizar as mensagens para o script./etc/postfix/main.cf
para usar o transporte db paratransport_maps
e o alias db paravirtual_alias-maps
.(1) Crie
/etc/postfix/virtual_aliases
para adicionar um alias genérico -localuser
precisa ser um usuário local existente:(2) Crie
/etc/postfix/transport
para adicionar um mapeamento de transporte. "mytransportname" pode ser o que você quiser; é usado abaixo emmaster.cf
:(3) Em seguida, ambos
transport
evirtual_aliases
precisam ser compilados nos arquivos berkeley db:(4) Adicione o transporte a
/etc/postfix/master.cf
:(5) Em
/etc/postfix/main.cf
:E ... bom ir! Sheesh.
fonte
relay_domains
(nesse caso, o arquivo de transporte pode filtrar com base no endereço To:).virtual_transport = mailcaptcha:
inmain.cf
emailcaptcha unix - n n - - pipe flags=FR user=vmail argv=/usr/bin/perl /usr/local/mail-captcha/verify.pl ${sender} ${recipient}
inmaster.cf
. Consulte postfix.org/transport.5.html e postfix.org/VIRTUAL_README.html .postfix restart
oureload
ou algo assim? Última coisa: existe um arquivo de log para ver os e-mails que chegaram ao postfix?/var/log/mail.log
.A única vez que usei algo assim foi para a caixa de correio de um usuário específico. Tudo o que era necessário era alias o nome do usuário para um canal e um processo em alias:
Isso enviou o tráfego destinado a "[email protected]" para um script perl que eu escrevi para processá-lo.
gotit.pl (como exemplo, não me peguem na programação de baixa qualidade skillz =). Seu trabalho era processar um email que eu enviei ao nosso servidor Exchange (onde foi respondido automaticamente por meio de algum código VB) para verificar se o Exchange estava processando emails em tempo hábil. Caso contrário, o servidor de email enviaria um email de alerta para nossos pagers e gravaria um arquivo de bloqueio, para que não recebêssemos spam constantemente.
fonte
Usei um "arquivo simples" antigo
Mailbox
para receber todos os emails (e removê-los a cada poucas horas, se forem grandes), em vez de usar asmaildir/
pastas modernas , para processar emails por meio de scripts. Você também pode executar o logrotate sobre o arquivo, para mantê-lo gerenciável.Dessa forma, você pode simplesmente copiar todo o correio para uma Caixa de Correio como um usuário local.
fonte
Depois de muita dor de cabeça eu coloquei esta solução com base em um par de diferentes fontes que resultou em muito menos esforço, as etapas críticas foram configurando
virtual_alias_domains
, assim comovirtual_alias_maps
e certificando-se que o mapeamento virtual foi amy-alias@localhost
vez de apenasmy-alias
. No meu exemplo, o alias de comando é canalizar o email para o ponto de extremidade da API do site, mas poderia facilmente ser canalizado para outra coisa.Aqui estão as etapas que você precisará seguir:
10 mail.your-domain-name
sudo apt-get install postfix
sudo vi /etc/postfix/main.cf
mydestination
valoresaté o final do arquivo
sudo apt-get vi /etc/aliases
sudo newaliases
sudo apt-get vi /etc/postfix/virtual_domains
(os campos #domain suprimem avisos)
sudo postmap /etc/postfix/virtual_domains
sudo apt-get vi /etc/postfix/virtual
sudo postmap /etc/postfix/virtual
sudo /etc/init.d/postfix reload
fonte