
I am writing this in English since I've looked high end low for a solution to this online and now that I have it figured out I thought I'd just post it here for Google to index so it can help others.
Basically, what I wanted to do was to have mail sent to a specific address piped to a perl script. I own the domain "sandman.net" and I wanted mail to "mailinglist@sandman.net" to be piped to my selfbuilt mailinglist manager, which resides, on the server, in path "/Users/sandman/MailExec/list.pl"
Coming from a sendmail background, I have messed around with /etc/mail/virtusertable and /etc/aliases to achieve this, but with postfix (the MTA in OSX) it wasn't as straightforward.
Basically, putting this in /etc/postfix/aliases didn't work:
mailinglist: |/Users/sandman/MailExec/list.pl
And would bounce with "no such mailbox". Doing it the other way, in "/etc/postfix/virtual":
mailinglist@sandman.net "|/Users/sandman/MailExec/list.pl"
Did the same. The solution was to make it a two-step process:
/etc/virtual:
mailinglist@sandman.net mailinglist
/etc/aliases:
mailinglist: "|/Users/sandman/MailExec/list.pl"
So, the virtual user table handles the incoming address and pipes it to the local user "mailinglist", which is piped to the perl script in the aliases file. This is the output of my postconf -n:
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
content_filter = smtp-amavis:[127.0.0.1]:10024
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
enable_server_options = yes
html_directory = no
inet_interfaces = all
mail_owner = postfix
mailbox_size_limit = 0
mailbox_transport = cyrus
mailq_path = /usr/bin/mailq
manpage_directory = /usr/share/man
maps_rbl_domains =
message_size_limit = 0
mydestination = $myhostname,localhost.$mydomain,mail.eklundh.com
mydomain = eklundh.com
mydomain_fallback = localhost
myhostname = mail.eklundh.com
mynetworks = 127.0.0.1/32,web.eklundh.com
mynetworks_style = host
newaliases_path = /usr/bin/newaliases
owner_request_special = no
queue_directory = /private/var/spool/postfix
readme_directory = /usr/share/doc/postfix
recipient_delimiter = +
relayhost =
sample_directory = /usr/share/doc/postfix/examples
sendmail_path = /usr/sbin/sendmail
setgid_group = postdrop
smtpd_client_restrictions = permit_mynetworks reject_rbl_client sbl-xbl.spamhaus.org reject_rbl_client relays.ordb.org permit
smtpd_enforce_tls = no
smtpd_pw_server_security_options = cram-md5
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination,permit
smtpd_sasl_auth_enable = yes
smtpd_tls_cert_file = /etc/certificates/Sandman Mail Service.crt
smtpd_tls_key_file = /etc/certificates/Sandman Mail Service.key
smtpd_use_pw_server = yes
smtpd_use_tls = yes
unknown_local_recipient_reject_code = 550
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_mailbox_domains = hash:/etc/postfix/virtual_domains
virtual_transport = lmtp:unix:/var/imap/socket/lmtp
And after doing any edits to any of these files, issue these commands:
cd /etc/postfix
postmap virtual
postalias aliases
postfix reload
To make the changes active.