捕获所有电子邮件并将它们全部通过后缀传输到脚本

捕获所有电子邮件并将它们全部通过后缀传输到脚本

我意识到这个问题之前有人问过并回答过。以下是我所做的。

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

@example.com catchall

已将其添加到main.cf。以下是条目。

virtual_alias_maps = hash:/etc/postfix/virtual

这很有效,我的所有邮件都发到了,/var/mail/catchall这很好。接下来我想创建一个管道,每次收到电子邮件时都会运行一个程序。为了实现这一点,我创建了一个 /etc/postfix/transport

example.com catchall:

然后我将其添加到我的master.cf文件中。

catchall  unix  -       n       n       -       -       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,该脚本输出catchall预期的 aaa.txt。

所以我的问题是,发生了什么?我遗漏了什么?有什么帮助吗?我已经阅读了文档,阅读了教程,但就是无法让它工作。catchall 地址工作正常,我看到正在接收邮件mail.logmail.err是空的,我已经在所有文件上运行了 postmap,并postfix reload在编辑文件后执行了。但我的 shell 脚本无法运行......

后配置-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

邮件日志

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

答案1

唉,真让人沮丧。幸运的是,我找到了答案,仔细检查了 mail.log 才有所帮助。

我必须做什么。

main.cf我将 mydestination 指令中的第一个条目更改为mydomain.com。我在询问之后和收到对 main.cf 文件的请求之前摆弄了一番,并注意到我在 mail.log 中得到了不同的结果

最后,我改变了

/etc/mailname包含twinsen.mydomain.com

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

答案2

我仍然收到错误。

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

运行后问题得到解决:

postmap /etc/postfix/transport

相关内容