我有自己的服务器,使用 postfix 作为邮件服务器。我的客户也必须能够使用这个邮件服务器。他们使用用 c# 编写的软件发送电子邮件,但自从我上次升级以来,smtp 身份验证无法正常工作,因此我必须使用 main.cf 中的 myNetwork 设置对于动态分配的 IP 地址,或者我客户的员工在家工作,这带来了一个问题,每次邮件被邮件服务器拒绝时,我都必须手动调整 main.cf。
我已经使用 MySQL 来管理用户和域,因此配置应该没问题:
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf,mysql:/etc/postfix
/mysql-email2email.cf
但如果我使用:
mynetworks = mysql:/etc/postfix/mysql-mynetworks.cf
其中包含:
user = MailUserName
password = MailUserPassWord
hosts = 127.0.0.1
dbname = MailDatabase
query = Select IPNummer from MyNetworks where IPNummer = '%s'
expansion_limit = 100
我在发送电子邮件时收到以下错误: 暂时查找失败
当然,我已经在 Google 上进行了广泛的搜索,但是像编码这样的常见问题都已经尝试过了,却没有结果。
如果有人能给出解决方案我将不胜感激。
答案1
但自从我上次升级后,SMTP 身份验证就无法正常工作了
你需要修复这个问题。
mynetworks 并不意味着允许外部人员自由控制您的邮件服务器系统;您应该将 99% 的时间限制在本地主机上。
答案2
我认为这是一个坏主意。但是,如果您要尝试,您需要某种方式将 IP 和网络掩码存储在表中并针对范围进行查询。这会因正则表达式等而变得有点复杂,所以我会采取捷径并创建一个如下所示的表,方法是将每个范围中的第一个和最后一个 IP 转换为整数。在此示例中为 10.188.17.0/24
|first_ip |last_ip |action|
|180097280|180097535|OK |
然后我会创建一个查询来确定 IP 是否位于第一个和最后一个之间,并返回操作或 Postfix 想要的任何内容。我不确定这是否真的有效,但似乎可行。
也就是说,它看起来更简单,更可靠,并且不需要不断更新数据库来修复 smtp 身份验证出现的问题。