我在邮件服务器中使用 Dovecot 和 Exim,并使用 MariaDB 对它们进行身份验证。该服务器保存多个邮件域的邮件,多年来一直如此。
现在我需要将一个邮件域迁移(重命名)为另一个名称(不要问,业务要求这样做),因此第一个(老的) 域名应该有相同的 local_part在第二(新的) 领域:
为了简化转换,我尝试实现以下逻辑:
- 无论用户使用什么域(旧的或新的)来验证自己以发送或接收邮件,都应该被接受(如果密码合适);
- 邮件应由服务器上的同一目录(以旧域名命名)提供
- 如果用户发送来自旧域中的邮箱的邮件,Exim 应该在邮件标题中将旧邮件重写为新邮件。
在此生效之后,我可以慢慢重新配置客户端,以便他们使用新的基于域的电子邮件地址而不是旧的基于域的电子邮件地址进行身份验证。
这将使我(和用户)顺利过渡到新领域,这听起来不错。
也就是说,听起来不错,但不知道如何以一种好的方式实现它。
如果新域名是唯一的,我可以将该逻辑放入 Dovecot 和 Exim 中的 SQL 请求中。但这次我需要处理几个这样的“重命名”域名,将这些域名硬编码到 SQL 查询中看起来太棘手了。
我创建了新表并在其中存储旧/新域对,如下所示:
- ‘旧域名1.com’,‘新域名1.com’
- ‘旧域名2.com’,‘新域名2.com’
- ETC
但这次我怀疑我是否可以在查询中使用此替换表进行身份验证。可以说,Dovecot 不允许使用几个不同的查询来获取iterate_query
或user_query
回复。
请建议您将如何实现该域名重命名案例!
先感谢您!