抓住所有的电子邮件,并将它们全部pipe理到一个脚本与后缀

我意识到这个问题之前曾经被问及过。 这是我所做的。

创build了一个catchall地址和用户。 这是我的/etc/postfix/virtual文件。

 @example.com catchall 

将其添加到main.cf 这是条目。

 virtual_alias_maps = hash:/etc/postfix/virtual 

这工作,我所有的邮件去了/var/mail/catchall这是很好的。 接下来,我想创build一个pipe道,每次收到邮件时都运行一个程序。 为了完成这个,我创build了一个/ etc / postfix / transport

 example.com catchall: 

然后我把这个添加到我的master.cf文件中。

 catchall unix - nn - - pipe flags=F user=catchall argv=/tmp/test.sh 

test.sh只是一个很小的shell脚本,所以我可以看到我的代码运行。

 #!/bin/bash echo `whoami` > /tmp/aaa.txt 

最后,我确保catchall用户可以用su -c "/tmp/test.sh " catchall运行这个脚本, su -c "/tmp/test.sh " catchall输出catchall到期望的aaa.txt。

所以我的问题是,是什么给了? 我错过了什么? 任何帮助? 我已阅读文档,阅读教程,我只是无法得到它的工作。 catchall地址正常工作,我看到mail.log中收到的mail.logmail.err是空的,我已经在我的所有文件上运行mail.log ,编辑完文件后postfix reload 。 但我的shell脚本不会运行….

postconf -n

 alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases append_dot_mydomain = no biff = no config_directory = /etc/postfix inet_interfaces = all mailbox_size_limit = 0 mydestination = twinsen.example.com, myhostname, localhost.localdomain, localhost myhostname = mydomain-guts mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 myorigin = /etc/mailname readme_directory = no recipient_delimiter = + relayhost = smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtpd_use_tls = yes transport_maps = hash:/etc/postfix/transport virtual_alias_maps = hash:/etc/postfix/virtual 

mail.log

 Jan 11 22:18:02 mydomain-guts postfix/smtpd[3835]: connect from mail-we0-f172.google.com[74.125.82.172] Jan 11 22:18:02 mydomain-guts postfix/smtpd[3835]: 790E01400D4: client=mail-we0-f172.google.com[74.125.82.172] Jan 11 22:18:02 mydomain-guts postfix/cleanup[3834]: 790E01400D4: message-id=<CA+wDdVbiDS=Kpa7nMA4-y5GCMgo0PcsK4G5Kb_uE_xKHBYY+vQ@mail.gmail.com> Jan 11 22:18:02 mydomain-guts postfix/qmgr[3829]: 790E01400D4: from=<[email protected]>, size=1828, nrcpt=1 (queue active) Jan 11 22:18:02 mydomain-guts postfix/smtp[3831]: 790E01400D4: to=<[email protected]>, orig_to=<[email protected]>, relay=none, delay=0.24, delays=0.2/0/0.04/0, dsn=5.4.6, status=bounced (mail for example.com loops back to myself) Jan 11 22:18:02 mydomain-guts postfix/cleanup[3834]: B3E2F1400D9: message-id=<20150112031802.B3E2F1400D9@mydomain-guts> Jan 11 22:18:02 mydomain-guts postfix/qmgr[3829]: B3E2F1400D9: from=<>, size=3677, nrcpt=1 (queue active) Jan 11 22:18:02 mydomain-guts postfix/bounce[3832]: 790E01400D4: sender non-delivery notification: B3E2F1400D9 Jan 11 22:18:02 mydomain-guts postfix/qmgr[3829]: 790E01400D4: removed Jan 11 22:18:02 mydomain-guts postfix/smtpd[3835]: disconnect from mail-we0-f172.google.com[74.125.82.172] Jan 11 22:18:03 mydomain-guts postfix/smtp[3831]: B3E2F1400D9: to=<[email protected]>, relay=gmail-smtp-in.l.google.com[64.233.171.26]:25, delay=0.85, delays=0.01/0/0.28/0.56, dsn=2.0.0, status=sent (250 2.0.0 OK 1421032683 p20si20890136qgd.117 - gsmtp) Jan 11 22:18:03 mydomain-guts postfix/qmgr[3829]: B3E2F1400D9: removed 

呃多么的</s> </s>。 我想,幸运的是,仔细检查mail.log是什么帮助。

我必须做的。

main.cf我将mydestination指令中的第一个条目更改为mydomain.com 。 在询问之后,我得到了一个表示要求main.cf文件的提示,并注意到我在mail.log中得到了不同的结果

最后,我改变了

/etc/mailname包含twinsen.mydomain.com

问题是由于子域名称不匹配,邮件被我的服务器拒绝。

我仍然收到错误。

 postfix/trivial-rewrite[4745]: warning: hash:/etc/postfix/transport lookup error for "*" 

运行后他们得到修复:

 postmap /etc/postfix/transport