Usando postfix, me gustaría que todo el correo entrante, a cualquier dirección (incluidas las que no se asignan a usuarios locales) se canalice a un script. He intentado configurar mailbox_command
en /etc/postfix/main.cf
:
mailbox_command = /path/to/myscript.py
Esto funciona muy bien si el usuario es un usuario local, pero falla para los usuarios "desconocidos" que no tienen alias. Intenté configurarlo luser_relay
para un usuario local, pero esto se adelanta mailbox_command
, por lo que el comando no se ejecuta. Intenté configurar local_recipient_maps=
(cadena vacía), pero el mensaje aún se devuelve (usuario desconocido).
¿Existe una invocación mágica que pueda usar para que todos los usuarios conocidos y desconocidos también vayan al script?
Completo /etc/postfix/main.cf
sigue: es el Ubuntu 10.04 predeterminado, con la excepción de la mailbox_command
línea:
# 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
Respuestas:
Ok, acabo de hacer que esto funcione, aunque más peludo de lo que pensé que sería. Dejé caer la
maildir_command
parte y me fuitransport_maps
. La clave es hacer 5 cosas:/etc/postfix/master.cf
para canalizar el correo al script./etc/postfix/main.cf
uso del transporte db paratransport_maps
y el alias db paravirtual_alias-maps
.(1) Crear
/etc/postfix/virtual_aliases
para agregar un alias general:localuser
debe ser un usuario local existente:(2) Crear
/etc/postfix/transport
para agregar una asignación de transporte. "mytransportname" puede ser lo que quieras; se usa a continuación enmaster.cf
:(3) A continuación, ambos
transport
yvirtual_aliases
deben compilarse en archivos berkeley db:(4) Agregue el transporte a
/etc/postfix/master.cf
:(5) En
/etc/postfix/main.cf
:Y ... ¡listo! Sheesh
fuente
relay_domains
(en cuyo caso el archivo de transporte puede filtrar en función de la dirección To: real).virtual_transport = mailcaptcha:
inmain.cf
ymailcaptcha 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 y postfix.org/VIRTUAL_README.html .postfix restart
oreload
o algo así? Lo último: ¿hay un archivo de registro para ver los correos que llegaron a postfix?/var/log/mail.log
.La única vez que usé algo como esto fue para el buzón de un usuario específico. Todo lo que se requería era alias el nombre de ese usuario a una tubería y un proceso en alias:
Esto envió tráfico destinado a "[email protected]" a un script en perl que escribí para procesarlo.
gotit.pl (como ejemplo, no me molestes por la descuidada habilidad de programación =). Su trabajo consistía en procesar un correo electrónico que había enviado a nuestro servidor de Exchange (donde fue respondido automáticamente a través de algún código VB) para verificar que Exchange estaba procesando el correo electrónico de manera oportuna. De lo contrario, el servidor de correo enviaría un correo electrónico de alerta a nuestros buscapersonas y escribiría un archivo de bloqueo para que no recibiéramos correos no deseados constantemente.
fuente
He usado un "archivo plano" de estilo antiguo
Mailbox
para recibir todo el correo (y luego podarlo cada pocas horas si es grande), en lugar de usar lasmaildir/
carpetas modernas , para procesar el correo a través de scripts. También podría ejecutar logrotate sobre el archivo, supongo que lo mantendrá manejable.De esta manera, simplemente podría copiar todo el correo a un buzón como usuario local.
fuente
Después de un montón de dolores de cabeza que armó esta solución basada en un par de diferentes fuentes que dio lugar a mucho menos esfuerzo, los pasos críticos fueron configurando
virtual_alias_domains
así comovirtual_alias_maps
y asegurarse de que el mapeo virtual fue almy-alias@localhost
lugar de sólomy-alias
. En mi ejemplo, el alias de comando es canalizar el correo electrónico a un punto final de API del sitio web, pero podría canalizar fácilmente a otra cosa.Estos son los pasos que deberá seguir:
10 mail.your-domain-name
sudo apt-get install postfix
sudo vi /etc/postfix/main.cf
mydestination
valoreshasta el final del archivo
sudo apt-get vi /etc/aliases
sudo newaliases
sudo apt-get vi /etc/postfix/virtual_domains
(los campos #dominio suprimen las advertencias)
sudo postmap /etc/postfix/virtual_domains
sudo apt-get vi /etc/postfix/virtual
sudo postmap /etc/postfix/virtual
sudo /etc/init.d/postfix reload
fuente