因此我需要在我的 postfix 服务器上创建一个别名,将所有邮件重定向到多个电子邮件地址。
我已经启动并配置了 postfix + postfixadmin 和 dovecot,一切似乎都运行良好,服务器能够接收电子邮件和发送电子邮件,也可以创建新帐户,但不能创建别名。
当尝试向新创建的别名(通过 postfixadmin 创建)发送电子邮件时,在 /var/log/mail.log 中我看到以下内容
Mar 11 14:24:53 somedomain postfix/pipe[28581]: B1FEDBC0899: to=<[email protected]>, relay=dovecot, delay=0.68, delays=0.63/0/0/0.05, dsn=5.1.1, status=bounced (user unknown)
Mar 11 14:24:53 somedomain postfix/cleanup[26467]: 3B549BC0BE4: message-id=<[email protected]>
Mar 11 14:24:53 somedomain postfix/bounce[28583]: B1FEDBC0899: sender non-delivery notification: 3B549BC0BE4
电子邮件被退回,错误几乎相同。
问题是别名存在,我可以在 MySQL 数据库和 postfixadmin 界面中看到它。
root@someserver:~# postconf | grep alias
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
allow_mail_to_commands = alias, forward
allow_mail_to_files = alias, forward
expand_owner_alias = no
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
newaliases_path = /usr/bin/newaliases
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $sender_bcc_maps $recipient_bcc_maps $smtp_generic_maps $lmtp_generic_maps
unknown_virtual_alias_reject_code = 550
virtual_alias_domains = $virtual_alias_maps
virtual_alias_expansion_limit = 1000
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf, proxy:mysql:/etc/postfix/mysql_virtual_alias_domain_maps.cf, proxy:mysql:/etc/postfix/mysql_virtual_alias_domain_catchall_maps.cf
virtual_alias_recursion_limit = 1000
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf, proxy:mysql:/etc/postfix/mysql_virtual_alias_domain_mailbox_maps.cf
以及您可能感兴趣的其他信息
myhostname = somedomain.com
mydestination = localhost.$mydomain, localhost, mail.somedomain.com
relayhost =
/etc/aliases 文件
# /etc/aliases
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
clamav: root
testing: info
尽管如此,没有那条测试线,电子邮件甚至不会被退回
我可以保证虚拟别名映射文件配置正确,并且 mysql 详细信息正确指定,但如果需要,我可以根据要求提供它们。
在 /etc/postfix/master.cf 中添加以下行
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
在 /etc/dovecot/dovecot-sql.conf 中
driver = mysql
connect = host=localhost dbname=postfixadmin user=postfixadmin password=somepassword
default_pass_scheme = MD5
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 125 AS uid, 125 AS gid, CONCAT('maildir:storage=', FLOOR( quota / 1024 ) ) AS quota FROM mailbox WHERE username = '%u' AND active = '1'
在 /etc/postfix/mysql_virtual_alias_maps.cf 中
user = postfixadmin
password = somepassword
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
#expansion_limit = 100
我没有主意了,问题可能出在哪里,所以非常感谢您的帮助,谢谢!
答案1
问题在于,正如所指出的,dovecot 不知道别名是谁,因为它实际上不是一个电子邮件帐户。postfix 应该告诉它将其发送到哪个帐户。要么是您的 mysql_virtual_alias_maps(如果用户在虚拟域中)或 /etc/aliases 没有扩展,别名(而不是实际的邮箱)被传递给 dovecot。
编辑:事实上,Screatch 的 main.cf 中有一个选项集receive_override_options = no_address_mappings
,通常用于防止别名(和其他映射)在传递到内容过滤器之前被扩展。在他的例子中,没有内容过滤器,这阻止了他的别名在 postfix 将其传递给 dovecot 进行传递之前被扩展。
答案2
2015 年 11 月更新。
同样的问题,别名不起作用。
所以我去/etc/postfix/main.cf
改变了(默认):
local_recipient_maps = unix:passwd.byname
经过
local_recipient_maps = unix:passwd.byname $alias_maps
现在它起作用了