如何在 Postfix 中将所有电子邮件发送到单个用户邮箱

如何在 Postfix 中将所有电子邮件发送到单个用户邮箱

我是 Postfix 新手,我需要对其进行配置,以便将发送到我服务器的任何电子邮件都发送到本地用户帐户 (/etc/passwd)。我的服务器不会在任何地方列出任何虚拟域 ($mydestination),我只需要将所有未知邮件发送到本地用户帐户。

我看过一些与使用 luser_relay 和 local_receipients_maps 的配置相关的主题。但我不知道如何使用它们,如果你有时间,能告诉我如何使用吗?我在 centos 5.5 服务器上使用 postfix

提前致谢。

答案1

如果一切设置正确,您可以在 main.cf 中添加以下内容

luser_relay = username
local_recipient_maps =

更多信息

将用户名替换为收件人的用户名或完整地址,例如john[email protected]

答案2

以下是我的做法:

virtual_transport = regex:/etc/postfix/virtual
root@testmailm01:/etc/postfix# cat virtual
/system/        [email protected] ###this allows you to send outbound logs to another server
/*/     webtest ###catch everything and drop it in the webtest mailbox 

我们的 alpha 测试服务器直接将此框作为其邮件服务器,以便开发人员可以试验电子邮件地址。此外,我们的主要 SMTP 服务器有一个传输指令:

[adminuser@smtpserver01 adminuser]$ cat /etc/postfix/transport
example.com :[exchange.server.addy]
testing.example.com :[testmailm01.example.cfx]

这允许开发人员通过将 @ 更改为 @testing.example.com 来在 beta 和 prod 环境中测试某些内容,它会将带有该后缀的任何内容重定向到上述“测试”邮件服务器。

希望有所帮助。

编辑:您是否配置了 transport_maps 设置?postfix 问题的标准“帮助我”信息是“postconf -n”和“cat /etc/postfix/transport”的输出。此外,如果您能找到包含错误的完整对话,那将大有帮助。

如果你能找到其中一行(“grep 'web58007.mail.re3.yahoo.com' /var/log/maillog”或可能是/var/log/mail.log)

Jul 26 21:30:01 fjdx421.example.cfx postfix/qmgr[13444]: 2FBBF17B433: to=<[email protected]>, relay=none, delay=0, status=deferred (delivery temporarily suspended: connect to oram101.example.cfx[172.18.52.101]: Connection refused) 

奇怪的字母数字是该对话的伪唯一标识符,执行“grep 2FBBF17B433 /your/mail/logfile”并发布该输出

编辑:首先,我很抱歉...我之前提到过传输地图,而您需要定义的是“virtual_alias_maps”。我的第一个回答是正确的,但后来,出于某种原因,我的大脑开始关注传输地图...我想是老了。

查看您的 postconf 输出,您需要定义:

postconf -e virtual_alias_maps = hash:/etc/postfix/virtual
postconf -e recipient_canonical = hash:/etc/postfix/recipient_canonical

然后,编辑/etc/postfix/virtual:

/*/  <your.test.account>

和 /etc/postfix/recipient_canonical:

/./     webtest

然后重新加载 postfixpostfix reload 完成后,您需要确保正确连接到此邮件服务器,因为它可能未在任何地方列为 MX 记录。最简单的测试方法是:

telnet <mail.server.addy> 25

以下对话样本主要包含虚假信息:

Connected to testmailm01.example.cfx.
Escape character is '^]'.
220 testmailm01 ESMTP Postfix
HELO nowhere.com
250 testmailm01
mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
bla bla blah
.
250 2.0.0 Ok: queued as 9B4E820E249

此次对话的日志条目:

root@testmailm01:/etc/postfix# grep 9B4E820E249 /var/log/mail.log
Jul 27 08:37:17 testmailm01 postfix/smtpd[16125]: 9B4E820E249: client=someuser.example.cfx[172.18.47.102]
Jul 27 08:37:25 testmailm01 postfix/cleanup[18529]: 9B4E820E249: message-id=<20100727133717.9B4E820E249@testmailm01>
Jul 27 08:37:25 testmailm01 postfix/qmgr[1556]: 9B4E820E249: from=<[email protected]>, size=359, nrcpt=1 (queue active)
Jul 27 08:37:25 testmailm01 postfix/local[18554]: 9B4E820E249: to=<[email protected]>, orig_to=<[email protected]>, relay=local, delay=17, delays=17/0.01/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
Jul 27 08:37:25 testmailm01 postfix/qmgr[1556]: 9B4E820E249: removed

我还配置了 virtual_transport,虽然在重新阅读描述后我不确定为什么。以防万一需要它(先尝试上面的方法,如果仍然不起作用,再添加这个)。这个盒子是半生产的,所以我不能随便摆弄配置来测试东西:

postconf -e virtual_transport = regex:/etc/postfix/virtual

虚拟文件保持不变,但您始终需要确保已对使用 hash: 语句的所有文件进行了 postmap:

postmap <file>

编辑:根据此:

Jul 28 20:17:18 rabbits postfix/smtpd[1369]: NOQUEUE: reject: RCPT from mail-wy0-f182.google.com[74.125.82.182]: 554 5.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<mail-wy0-f182.google.com>

您正在向 amamun.info 发送电子邮件,但您的 mydestination 包含:

mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = test.com
myhostname = rabbits.test.com

如果没有虚拟域名,我看不到任何内容可以让您的服务器接收发往 @amamun.info 的电子邮件。根据您想要对电子邮件执行的操作,您需要将该域添加到 mydestination 列表、relay_domains 或作为虚拟域名。

答案3

感谢您的回复,我在这里再次详细描述了我的要求

我需要配置我的 postfix,以便它能捕获所有邮件,无论是否是垃圾邮件,并且所有传入邮件都应发送到本地系统用户帐户。Postfix 将没有任何虚拟域列表。为此,我在 centos 5.4 服务器上安装了 postfix (postfix-2.3.3-2.1.centos.mysql_pgsql)。以下是我的配置:

[root@rabbits postfix]# /usr/sbin/postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
home_mailbox = Maildir/
html_directory = no
inet_interfaces = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = test.com
myhostname = rabbits.test.com
mynetworks = 127.0.0.0/8
myorigin = $myhostname
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
relay_domains =
sample_directory = /usr/share/doc/postfix-2.3.3/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550
[root@rabbits postfix]#

假设我拥有一个域名 something.info,它的 MX 记录指向该服务器,但它的域名未在 postfix 配置文件中的任何地方列出,但我需要捕获所有发往“[电子邮件保护]“到像“catchtest”这样的本地系统帐户,同样,我想将所有其他未知域的电子邮件捕获到同一个本地帐户,无论它是否是垃圾邮件。所以为此我实际上需要在 postfix 配置文件中执行此操作。

谢谢。

编辑:嗨,感谢您的详细步骤,我尝试过但结果仍然是相同的,在发送邮件之前,它会拒绝并显示中继被拒绝消息。

Jul 28 20:17:18 rabbits postfix/smtpd[1369]: NOQUEUE: reject: RCPT from mail-wy0-f182.google.com[74.125.82.182]: 554 5.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<mail-wy0-f182.google.com>
Jul 28 20:17:19 rabbits postfix/smtpd[1369]: disconnect from mail-wy0-f182.google.com[74.125.82.182]

这是根据您的配置修改后的 main.cf 文件

[root@rabbits postfix]# /usr/sbin/postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix 
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
home_mailbox = Maildir/
html_directory = no
inet_interfaces = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = test.com
myhostname = rabbits.test.com
mynetworks = 127.0.0.0/8
myorigin = $myhostname
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
relay_domains = sample_directory = /usr/share/doc/postfix-2.3.3/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_transport = regex:/etc/postfix/virtual


#cat /etc/postfix/virtual
/*/  admin@localhost


#cat recipient_canonical
/./     admin

相关内容