我有一台运行 Postfix/Dovecot 的服务器,后端配置为使用域名“olddomain.com”。我正在迁移所有内容以使用另一个域名“newdomain.com”,并且 Postfix/Dovecot/Postfixadmin 也都需要迁移。但是我需要在一段时间内支持这两个域名,这对用户来说应该是透明的。发送到 ' 的电子邮件[电子邮件保护]'需要到达'[电子邮件保护]',用户需要能够使用'登录(Postfixadmin / Dovecot)[电子邮件保护]' 和 '[电子邮件保护]', ETC。
我不知道如何做到这一点来支持命名的用例,因此任何帮助都将不胜感激。
相关配置内容:
后配置-n
命令目录 = /usr/sbin 配置目录 = /etc/postfix daemon_directory = /usr/libexec/postfix 数据目录 = /var/lib/postfix debug_peer_level = 2 debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5 dovecot_destination_recipient_limit = 1 html_directory = 否 mail_owner = postfix mail_spool_directory = /var/spool/mail mailq_path = /usr/bin/mailq manpage_directory = /usr/share/man mynetworks_style = 主机 newaliases_path = /usr/bin/newaliases 队列目录 = /var/spool/postfix readme_directory = 否 Relay_domains = mysql:/etc/postfix/mysql_relay_domain_maps.cf 中继主机 = ******* 样本目录 = /etc/postfix sendmail_path = /usr/sbin/sendmail setgid_group = postdrop smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination smtpd_sasl_auth_enable = 是 smtpd_sasl_path = private/auth smtpd_sasl_type=dovecot 未知本地收件人拒绝代码 = 550 virtual_alias_maps = mysql:/etc/postfix/sql_virtual_alias_maps.cf 虚拟邮箱域 = mysql:/etc/postfix/sql_virtual_domain_maps.cf 虚拟邮箱映射 = mysql:/etc/postfix/sql_virtual_mailbox_maps.cf virtual_transport=dovecot(鸽舍)
sql_virtual_mailbox_maps.cf:
密码 = **** 主机 = 本地主机 数据库名称 = pf_adm 查询 = SELECT CONCAT(maildir, 'Maildir/') AS maildir FROM mailbox WHERE username='%s' AND active = '1'
sql_virtual_domain_maps.cf:
用户 = **** 密码 = **** 主机 = 本地主机 数据库名称 = pf_adm 查询 = 从域中选择域,其中域 ='%s' AND backupmx ='0' AND active ='1'
sql_virtual_alias_maps.cf:
用户 = **** 密码 = **** 主机 = 本地主机 数据库名称 = pf_adm 查询 = SELECT goto FROM alias WHERE address='%s' AND active = '1'
doveconf-n
# 2.1.9:/etc/dovecot/dovecot.conf # 操作系统:Linux 3.4.5 强化 i686 Gentoo 基础系统版本 2.1 ext4 auth_verbose = 是 first_valid_gid = 12 first_valid_uid = 8 last_valid_gid = 12 last_valid_uid = 8 mail_gid = 12 mail_location = maildir:/var/mail/%d/%n/Maildir/:INDEX=/var/mail/%d/%n/indexes mail_uid = 8 命名空间收件箱{ 收件箱 = 是 位置 = 邮箱草稿 { 特殊用途 = \草稿 } 邮箱垃圾邮件{ 特殊用途 = \Junk } 邮箱已发送{ special_use = \已发送 } 邮箱“已发送消息”{ special_use = \已发送 } 邮箱 垃圾箱 { 特殊用途 = \垃圾 } 前缀 = } 密码数据库 { 参数 = /etc/dovecot/dovecot-sql.conf.ext 驱动程序 = sql } 邮政局长地址 =[电子邮件保护] 协议 = imap 服务授权 { unix_listener /var/spool/postfix/private/auth { 组 = 后缀 模式 = 0660 用户 = 后缀 } unix_listener auth-userdb { 群组 = 邮件 模式 = 0600 用户=邮件 } } ssl_cert =奖励信息(如果需要),用户存储如下:
+------------------------+-------------------------+------------+-----------++ | 用户名 | maildir | 本地部分 | 域 | +------------------------+-------------------------+------------+-----------++ |[电子邮件保护]| olddomain.com/username/ | 用户名 | olddomain.com | +------------------------+-------------------------+------------+-----------++
答案1
坚持要求每个地址都提供完整的域名会给你带来麻烦。
这实际上没有必要,因为您只有一个域,所以一个简单的解决方案就是改变 SQL 查找以仅对本地部分进行操作。
将新域添加到 virtual_mailbox_domains 并仅对 virtual_mailbox_maps 执行本地部分查找。
两个域以及其中的所有用户都将被接受和交付。
对 virtual_mailbox_domains 使用复杂的查询也不太可能有帮助。
只需列出 virtual_mailbox-domains 中的域即可:
virtual_mailbox_domains = olddomain, newdomain