发送并通过 DNS 验证)
BillionMail 怎么配置专属 IPMulti-IP Domain发送并通过 DNS 验证【免费下载链接】BillionMailBillionMail gives you open-source MailServer, NewsLetter, Email Marketing — fully self-hosted, dev-friendly, and free from monthly fees. Join the discord: https://discord.gg/asfXzBUhZr项目地址: https://gitcode.com/GitHub_Trending/bi/BillionMail这篇文章解决一个具体任务在 BillionMail 里让某个域名通过专属公网 IPoutbound IP发信并通过系统内置的 DNS 校验A 记录 SPF。整个流程是在域名配置中填入专属出站 IP → 服务端做 DNS 记录校验 → 应用配置改写 Postfixmaster.cf、docker-compose.yml网络段、写入发件人路由→ 在宿主机执行bm.sh multi_ip完成收尾并重启服务 → 核对容器状态与数据库中的applied状态。本文依据仓库内的实现代码与脚本multi_ip_domain.go、config_manager.go、应用配置接口、测试配置接口 和 bm.sh。前置条件域名已加入 BillionMail新增或编辑域名时提供outbound_ip字段即可创建 Multi-IP Domain 配置见 domains_v1_add_domain.go、domains_v1_update_domain.go。你要使用的专属 IP 是 IPv4 地址格式为a.b.c.d否则直接报invalid IP address format。DNS 记录必须先配好并生效因为校验是在 BillionMail 服务端发起真实 DNS 查询net.LookupIP/net.LookupTXT不是本地配置比对。宿主机上有iptables可用应用配置时 core 服务会通过 Docker 以chroot /host_root /sbin/iptables的方式在宿主机维护 SNAT 规则ReapplyAllIptablesRules带billionmail-outbound注释。先配好 DNSA 记录是硬性要求SPF 是警告项ValidateDNSRecordsmulti_ip_domain.go的校验逻辑分两部分强度不同A 记录必须通过否则配置直接失败要求域名的解析结果中必须包含你填写的那个出站 IP。不满足时的报错原文A record validation failed: The resolution result of domain %s does not contain the specified outbound IP %s。查不到解析结果时报failed to query A record for domain %s... Please ensure the domain is correctly resolved.也就是说你的 DNS 里至少要有你的域名 A 你的专属IP这一条。SPF TXT 记录建议配置缺失时只给警告不阻断校验会找到以vspf1开头的 TXT 记录并依次检查记录必须以vspf1开头否则警告SPF record is malformed: does not start with vspf1必须以~all或-all结尾否则警告SPF record should end with ~all or -all for proper policy enforcement记录中必须包含三种授权机制之一ip4:你的出站IP或a机制或include:域名。都没有时会给出建议It is recommended to add a, ip4:%s, or include:%s in the SPF record to ensure proper authorization of this IP for sending emails.找不到 SPF 记录时的警告是SPF record not found for domain %s——注意这同样是警告不会让校验失败。测试配置POST /multi_ip_domain/test在真正应用之前可以先用测试接口前端域名管理页的 IP 设置交互即调用它见 domain.tscurl -X POST http://你的BillionMail地址/multi_ip_domain/test \ -H Authorization: 你的API令牌 \ -H Content-Type: application/json \ -d {domain: example.com, outbound_ip: 1.2.3.4}你的BillionMail地址和你的API令牌换成你自己环境的值example.com与1.2.3.4对应你要配置的域名和专属 IP。两个字段都是必填接口定义见 multi_ip_domain.go。返回结果分三种都能直接判断下一步全部通过Configuration test passed successfullyA 记录通过但 SPF 有问题Configuration test passed with warnings: 具体SPF警告——可以继续应用但建议先修 SPFA 记录不满足错误Test configuration failed: A记录报错原文——先修 DNS 再测。应用配置POST /multi_ip_domain/apply 与 bm.sh multi_ip测试通过后应用配置前端入口为 getDomainIpCommandcurl -X POST http://你的BillionMail地址/multi_ip_domain/apply \ -H Authorization: 你的API令牌这一步由服务端完成ApplyConfigs、ConfigManager把状态非applied的记录置为applying备份并改写conf/postfix/master.cf与main.cf多 IP 服务块写在# BEGIN BILLIONMAIL multi-ip services/# END BILLIONMAIL multi-ip services标记之间失败会自动回滚修改docker-compose.yml为每套配置新增网络billionmail-net-时间戳别名为aliases-域名.替换为-Postfix 内部 IP 分配在172.66.n.100在宿主机重放 iptables SNAT 规则源网段 → 对应出站 IP。接口成功后返回command与fix_command两个字段接口响应定义格式为cd 项目目录 bash bm.sh multi_ip项目目录由服务端按部署位置自动填好照抄返回内容执行即可。执行bm.sh multi_ip前必须了解它的副作用APPLY_MULTI_IP会备份并替换docker-compose.yml要求docker-compose_addnetwork.yml已存在否则直接报错退出会把bm_multi_ip_domain中所有active 1的domain → smtp_server_name写入bm_domain_smtp_transportatypededicated_ip发件人规则为域名先删旧规则再插入把bm_multi_ip_domain全部记录状态更新为applied执行docker compose down和docker compose up -d整套邮件服务会重启期间收发信中断出错时通过 ERR trap 自动回滚docker-compose.yml到备份。脚本要求在项目根目录执行且.env中DBUSER、DBNAME、DBPASS非空脚本连127.0.0.1:25432的 PostgreSQL。如果应用出问题用接口返回的fix_command执行cd 项目目录 bash bm.sh fix_multi_ip它用于恢复最近一份docker-compose.yml.bak.*备份FIX_MULTI_IP。结果验证按以下顺序确认这次配置真正生效容器状态bm.sh multi_ip结尾会打印docker compose ps并检查core-billionmail与postfix-billionmail两个容器。两者状态都是running即通过若提示Some critical services may not have started properly脚本明确建议你查看docker compose logs的详情。数据库状态脚本输出会显示Successfully reset N multi-IP domain statuses to appliedN 为待更新记录数。之后bm_multi_ip_domain中应为status applied若停在applying或failed说明应用环节报错需要看 core 服务日志。发件人路由bm_domain_smtp_transport中应出现atypededicated_ip、domain你的域名的映射记录脚本每插入一条会打印Successfully inserted: 域名 → smtp_server_name。再跑一次测试接口确认返回Configuration test passed successfully。限制与边界最多支持254 套Multi-IP Domain 配置子网从172.66.2.0/24起逐个分配用完时报No available subnet, maximum number of multi-IP domain configurations supported by the system has been reached (254)。SPF 校验失败不阻断配置只产生警告阻断项只有 A 记录与出站 IP 不匹配、以及域名/IP 格式非法。bm.sh multi_ip是全栈down up -d重启不是热更新选择在不影响发信的时间窗口执行。删除域名的专属 IP 时系统会同时删除bm_domain_smtp_transport中对应的dedicated_ip映射DeleteConfig。【免费下载链接】BillionMailBillionMail gives you open-source MailServer, NewsLetter, Email Marketing — fully self-hosted, dev-friendly, and free from monthly fees. Join the discord: https://discord.gg/asfXzBUhZr项目地址: https://gitcode.com/GitHub_Trending/bi/BillionMail创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考