En utilisant postfix, j'aimerais que tout le courrier entrant, à n'importe quelle adresse (y compris celles qui ne mappent pas aux utilisateurs locaux) soit redirigé vers un script. J'ai essayé de configurer mailbox_command
dans /etc/postfix/main.cf
:
mailbox_command = /path/to/myscript.py
Cela fonctionne très bien si l'utilisateur est un utilisateur local, mais il échoue pour les utilisateurs "inconnus" qui n'ont pas d'alias. J'ai essayé de définir luser_relay
un utilisateur local, mais cela préempte mailbox_command
et la commande n'est donc pas exécutée. J'ai essayé de définir local_recipient_maps=
(chaîne vide), mais le message est toujours renvoyé (utilisateur inconnu).
Existe-t-il une invocation magique que je peux utiliser pour que tous les utilisateurs connus et inconnus accèdent également au script?
Complet /etc/postfix/main.cf
suit - c'est le Ubuntu 10.04 par défaut, à l'exception de la mailbox_command
ligne:
# 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
Réponses:
Ok, je viens de faire fonctionner ça - bien que plus poilu que je ne le pensais. J'ai laissé tomber la
maildir_command
pièce et je suis partietransport_maps
. La clé est de faire 5 choses:/etc/postfix/master.cf
pour diriger le courrier vers le script./etc/postfix/main.cf
pour utiliser la base de données de transport pourtransport_maps
et la base de données d'alias pourvirtual_alias-maps
.(1) Créer
/etc/postfix/virtual_aliases
pour ajouter un alias fourre-tout -localuser
doit être un utilisateur local existant:(2) Créez
/etc/postfix/transport
pour ajouter un mappage de transport. "mytransportname" peut être ce que vous voulez; il est utilisé ci-dessous dansmaster.cf
:(3) Ensuite, les deux
transport
etvirtual_aliases
doivent être compilés dans des fichiers db berkeley:(4) Ajoutez le transport à
/etc/postfix/master.cf
:(5) Dans
/etc/postfix/main.cf
:Et ... c'est bon! Sheesh.
la source
relay_domains
(auquel cas le fichier de transport peut filtrer en fonction de l'adresse To:).virtual_transport = mailcaptcha:
inmain.cf
etmailcaptcha unix - n n - - pipe flags=FR user=vmail argv=/usr/bin/perl /usr/local/mail-captcha/verify.pl ${sender} ${recipient}
inmaster.cf
. Voir postfix.org/transport.5.html et postfix.org/VIRTUAL_README.html .postfix restart
oureload
ou quelque chose comme ça? Dernière chose: existe-t-il un fichier journal pour voir les mails qui sont arrivés sur postfix?/var/log/mail.log
.La seule fois où j'ai utilisé quelque chose comme ça, c'était pour la boîte aux lettres d'un utilisateur spécifique. Tout ce qui était nécessaire était d'alias le nom de cet utilisateur à un canal et un processus dans les alias:
Cela a envoyé du trafic destiné à "[email protected]" vers un script perl que j'ai écrit pour le traiter.
gotit.pl (à titre d'exemple, ne me reprochez pas pour une programmation merde skillz =). Son travail consistait à traiter un e-mail que j'avais envoyé à notre serveur Exchange (où il a été répondu automatiquement via un code VB) pour vérifier qu'Exchange traitait les e-mails en temps opportun. Sinon, le serveur de messagerie enverrait un e-mail d'alerte à nos pagers et rédigerait un fichier de verrouillage afin que nous ne soyons pas constamment spammés.
la source
J'ai utilisé un "fichier plat"
Mailbox
à l' ancienne pour recevoir tout le courrier (puis le tailler toutes les quelques heures s'il est volumineux), au lieu d'utiliser lesmaildir/
dossiers modernes , pour traiter le courrier via des scripts. Vous pouvez également exécuter logrotate sur le fichier, je suppose pour le garder gérable.De cette façon, vous pouvez simplement copier tous les messages dans une boîte aux lettres en tant qu'utilisateur local.
la source
Après beaucoup de maux de tête, j'ai mis au point cette solution basée sur quelques sources différentes, ce qui a entraîné beaucoup moins d'efforts, les étapes critiques ont été configurées
virtual_alias_domains
ainsivirtual_alias_maps
et m'assurer que le mappage virtuel était aumy-alias@localhost
lieu de justemy-alias
. Dans mon exemple, l'alias de commande consiste à diriger l'e-mail vers un point de terminaison d'API de site Web, mais il pourrait tout aussi facilement être dirigé vers autre chose.Voici les étapes à suivre:
10 mail.your-domain-name
sudo apt-get install postfix
sudo vi /etc/postfix/main.cf
mydestination
valeursà la fin du fichier
sudo apt-get vi /etc/aliases
sudo newaliases
sudo apt-get vi /etc/postfix/virtual_domains
(les champs #domain suppriment les avertissements)
sudo postmap /etc/postfix/virtual_domains
sudo apt-get vi /etc/postfix/virtual
sudo postmap /etc/postfix/virtual
sudo /etc/init.d/postfix reload
la source