
BillionMail 开源邮件服务器与邮件营销平台三步自托管部署与 bm 管理脚本实战指南【免费下载链接】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/BillionMailBillionMail 是一个将邮件服务器MailServer、新闻通讯NewsLetter与电子邮件营销Email Marketing能力合而为一的开源项目目标是让企业和个人完全掌控自己的发信基础设施。本文以 README-tr.md土耳其语文档为骨架结合仓库内的 install.sh、bm.sh、env_init 与 docker-compose.yml 源码完整讲解 BillionMail 的定位、三步上手流程、两种安装方式、环境变量配置、bm管理脚本全命令、域名 DNS 记录与 DKIM 生成原理以及容器化服务架构。读完本文你将能够独立完成 BillionMail 的自托管部署、域名接入和日常运维。BillionMail 是什么BillionMail 是一个开源邮件服务器与电子邮件营销平台面向需要自行管理邮件营销活动的企业和个人。无论是发送新闻通讯、促销邮件还是事务性消息它都通过 Web 控制台为邮件营销工作提供完全控制权并内置高级分析投递、打开率、点击率等与客户管理能力支持像专业人士一样创建、发送和跟踪邮件。项目的核心主张可以概括为文档中的一句话发送十亿封邮件只需 3 步——安装 → 绑定域名 → 创建营销活动。官方文档宣称从安装到成功发出第一封邮件仅需约 8 分钟这一时间目标主要得益于 install.sh 的一键自动化脚本会自动检测并安装 Docker 与 Docker Compose、开放防火墙端口、生成随机数据库/Redis 密码、初始化容器并展示登录信息详见下文安装章节。三步快速上手从安装到发送第一封邮件第一步安装 BillionMail在服务器上执行以下命令即可开始安装脚本会自动安装 Docker 等全部运行环境cd /opt git clone https://github.com/aaPanel/BillionMail cd BillionMail bash install.sh安装脚本 install.sh 在正式安装前会做一系列前置检查理解这些检查有助于你判断服务器是否满足部署条件架构与位数仅支持x86_64与aarch64两种架构且系统必须为 64 位getconf LONG_BIT返回 64不支持 32 位系统运行身份必须以 root 用户执行否则脚本会提示切换用户或使用sudo bash install.sh端口占用脚本会检测 25、465、587、110、143、993、995 等邮件端口是否被其他服务占用避免冲突LXC 容器提示若检测到在 LXC 容器内安装会提示需要开启Unprivileged container与nesting选项否则容器无法启动。脚本还支持通过命令行参数预置关键配置bash install.sh --domain example.com --TZ CST其中-d/--domain用于指定邮件服务器域名FQDN如example.com-t/--TZ用于指定时区参照 IANA 时区标识如Asia/Shanghai。若未传域名脚本默认使用example.com当域名只含一个点如example.com时脚本会自动生成mail.example.com作为 Postfix 的myhostname配置值。第二步绑定你的域名安装完成后进入管理后台完成以下三件事添加发信域名验证 DNS 记录A、MX、SPF、DMARC、DKIM详见下文域名与 DNS 记录章节自动启用免费 SSL通过 ACME/Lets Encrypt 自动申请需开放 80 端口用于验证。第三步创建你的营销活动在 Web 控制台中编写或粘贴邮件内容支持使用可复用营销模板选择收件人列表与标签结合联系人分组与标签功能进行精准投放设定发送时间或立即发送并通过内置分析追踪投递、打开与点击数据。安装方式详解除了一键脚本BillionMail 还提供两种部署路径。方式一aaPanel 一键安装在宝塔 aaPanel 面板中登录后进入Docker → 一键安装即可直接安装 BillionMail适合已有 aaPanel 环境的用户。方式二Docker Compose 手动安装cd /opt git clone https://github.com/aaPanel/BillionMail cd BillionMail cp env_init .env docker compose up -d || docker-compose up -d该方式要求手动安装 Docker 与 docker-compose-plugin并将 env_init 复制为.env后按需修改。首次启动会拉起 docker-compose.yml 中定义的 7 个服务容器包括 PostgreSQL、Redis、Rspamd、Dovecot、Postfix、RoundCubewebmail与核心管理服务 core详见容器化架构章节。登录信息与访问安装完成后执行bm default可查看默认登录信息。脚本会依次尝试获取服务器公网 IPv4/IPv6 地址并输出域名访问地址与内网访问地址https://IP或域名:HTTPS_PORT/SafePath默认管理员用户名与密码ADMIN_USERNAME/ADMIN_PASSWORD需要放行的端口清单SMTP_PORT | SMTPS_PORT | SUBMISSION_PORT | POP_PORT | IMAP_PORT | IMAPS_PORT | POPS_PORT | HTTP_PORT | HTTPS_PORT需在云安全组中放行否则无法访问。.env 核心配置项解析Docker 部署模式下env_init 是配置模板部署前建议逐项核对以下关键变量配置项默认值说明ADMIN_USERNAME/ADMIN_PASSWORDbillion/billion管理后台默认登录账号与密码生产环境务必修改SafePathbillion管理界面安全入口路径即访问 URL 的后缀BILLIONMAIL_HOSTNAMEmail.example.com邮件服务器主机名同时也是 Postfix 的 myhostname 配置DBNAME/DBUSER/DBPASSbillionmail等PostgreSQL 数据库名、用户与密码REDISPASS随机串Redis 访问密码SMTP_PORT/SMTPS_PORT/SUBMISSION_PORT25/465/587发送邮件端口SMTP / SMTPS / SubmissionIMAP_PORT/IMAPS_PORT/POP_PORT/POPS_PORT143/993/110/995收信协议端口IMAP/POP3 及加密版本REDIS_PORT/SQL_PORT127.0.0.1:26379/127.0.0.1:25432Redis 与 PostgreSQL 仅监听本机回环地址避免暴露公网HTTP_PORT/HTTPS_PORT80/443管理界面 Web 端口80 同时用于 ACME SSL 申请验证WEB_BASE_PATH空Web 部署基础路径嵌入 aaPanel 反向代理时可设为/billionmailAAPANEL_SSO_SECRET空与 aaPanel 的 SSO 共享密钥留空则禁用 SSOTZEtc/UTC容器时区IPV4_NETWORK172.66.1容器内网网段前缀默认172.66.1.0/24FAIL2BAN_INITy是否启用 fail2ban 访问限制针对超限 IP 自动封禁IP_WHITELIST_ENABLEfalse管理控制台 IP 访问白名单开关RETENTION_DAYS7日志备份保留天数其中SafePath、端口与管理员凭据都可通过 bm.sh 的交互式命令在线修改无需手工编辑.env。bm 管理脚本全命令速查bm.sh 是 BillionMail 的运维入口脚本README 中列出的四个基础命令分别是bm help—— 查看管理帮助与全部子命令bm default—— 查看默认登录信息域名/IP 地址、用户名、密码、需放行端口bm show-record—— 显示指定域名的 DNS 记录含 DKIMbm update—— 更新 BillionMail 至最新版本。结合 bm.sh 中的SHOW_HELP()函数bm.sh与主分支的 case 分发逻辑完整的命令集如下命令功能bm default/bm info查看登录默认信息bm update更新 BillionMail自动拉取 main 分支的 update.sh 并执行bm add-domain 域名/bm del-domain 域名新增 / 删除发信域名直接写入 PostgreSQL 的domain表bm add-email 邮箱/bm del-email 邮箱新增 / 删除邮箱账号写入mailbox表并自动生成密码与密码加密串bm show-domain/bm show-email查看已有域名 / 邮箱列表bm show-record 域名显示该域名的 A、MX、SPF、DMARC、DKIM 全部 DNS 记录bm change-port修改管理界面 HTTPS 访问端口bm change-apply-ssl-port修改 ACME 申请 SSL 使用的 HTTP 端口必须为 80bm change-tz修改系统与容器时区bm change-user/bm change-password修改管理员用户名 / 密码最少 5 位仅限字母数字及 # _ - . !bm change-safe-path修改管理界面安全入口路径仅限字母与数字bm start/bm stop/bm restart/bm rebuild/bm down启动 / 停止 / 重启 / 重建 / 停止并删除全部容器bm status逐个检查 7 个核心容器core、postfix、dovecot、rspamd、pgsql、redis、webmail的运行状态bm ps/bm top查看全部容器 / 全部进程bm s-t 服务查看指定服务postfix|core|dovecot|rspamd|redis|webmail|pgsql的进程bm l-c 容器查看指定容器日志支持-f跟随默认 25 行bm l-f 服务查看文件日志支持 core、core-access、core-error、postfix、dovecot、rspamd、fail2banbm r-s 服务重启指定服务及其容器bm clear清理 docker-compose 中定义的旧版本镜像只移除与 compose 镜像名匹配的历史 tagbm c-i-l关闭控制台 IP 访问白名单限制bm multi_ip/bm fix-multi-ip应用 / 修复多 IP 域名发信配置涉及bm_multi_ip_domain与bm_domain_smtp_transport表实现按域名绑定独立出口 IP此外直接执行bm不带参数会进入交互式菜单通过数字键即可完成重启、查看登录信息、改密码、改端口、更新等高频操作。域名与 DNS 记录从添加域名到 DKIM 生成添加域名bm add-domain example.com会向 PostgreSQL 的domain表插入记录初始化字段包括a_record自动设为mail.example.com、默认邮箱数上限500、邮箱与域名配额53687091205 GiB、rate_limit默认 12以及创建时间与激活状态。插入成功后立即调用Domain_record()输出所需 DNS 记录。DNS 记录清单bm show-record 域名会自动获取服务器公网 IPv4依次尝试ifconfig.me等公共接口失败则回退为占位文本随后输出以下五类记录类型主机记录记录值Amail.域名服务器公网 IPv4MXmail.域名优先级 10TXTvspf1 a mx ip4:服务器IP -allSPFTXT_dmarcvDMARC1;pquarantine;ruamailto:admin域名TXTdefault._domainkeyvDKIM1...由脚本自动生成的 DKIM 公钥DKIM 密钥生成原理DKIM 公钥不是手工填写的而是由bm.sh调用 Rspamd 容器内的rspamadm dkim_keygen生成bm.sh。其核心流程为在 rspamd 容器的/var/lib/rspamd/dkim/域名/目录下生成default.private私钥与default.pub公钥密钥选择器为default位数为 1024若/etc/rspamd/local.d/dkim_signing.conf不存在则创建并在#BT_DOMAIN_DKIM_BEGIN与#BT_DOMAIN_DKIM_END标记之间追加该域名的签名配置指向私钥路径读取default.pub公钥内容并去除引号与空白作为default._domainkey的 TXT 记录值输出。这也解释了bm show-record为什么必须等待 DKIM 生成完毕后才能输出完整记录——SPF 与 DKIM 共同构成主流收件方Gmail、Outlook 等验证发信域身份的两大依据。WebMail集成 RoundCubeBillionMail 集成了RoundCube作为网页邮箱客户端安装完成后通过/roundcube/路径访问如https://你的域名:443/roundcube/。从 docker-compose.yml 可以看到webmail-billionmail服务直接使用官方镜像roundcube/roundcubemail:1.6.11-fpm-alpine并通过环境变量完成了与邮件系统的接线ROUNDCUBEMAIL_DB_TYPEpgsql、ROUNDCUBEMAIL_DB_HOSTpgsqlWebMail 数据直接复用项目内的 PostgreSQLROUNDCUBEMAIL_DEFAULT_HOSTdovecot、ROUNDCUBEMAIL_DEFAULT_PORT143IMAP 收信指向 DovecotROUNDCUBEMAIL_SMTP_SERVERpostfix、ROUNDCUBEMAIL_SMTP_PORT25SMTP 发信指向 Postfix。因此登录 RoundCube 时使用的就是bm add-email创建的邮箱账号收发链路与主系统完全打通。容器化服务架构docker-compose.yml 以billionmail为项目名构建了完整的邮件生态各服务通过内部 bridge 网络billionmail-network网段默认172.66.1.0/24互相通信服务镜像职责pgsql-billionmailpostgres:17.4-alpine主数据库存储域名、邮箱、营销任务、联系人等全部业务数据redis-billionmailredis:7.4.2-alpine缓存与队列配合 Rspamd 使用rspamd-billionmailbillionmail/rspamd:1.2反垃圾邮件过滤与 DKIM 签名/验证dovecot-billionmailbillionmail/dovecot:1.6IMAP/POP3 收信与邮箱存储vmail-datapostfix-billionmailbillionmail/postfix:1.6SMTP 发信与邮件队列通过 PostgreSQL 查询虚拟域名/邮箱映射webmail-billionmailroundcube/roundcubemail:1.6.11-fpm-alpineRoundCube 网页邮箱core-billionmailbillionmail/core:4.9.3核心管理服务Web 控制台、API、SSL 管理、fail2ban 初始化等并挂载/var/run/docker.sock以管理容器生命周期值得注意的细节Postfix 与 Dovecot 通过postgresql-socket目录共享 Unix Socket 直连数据库密码校验走 SQL 查询而非本地账号体系三个发送/接收类服务postfix、dovecot、core都声明了NET_BIND_SERVICEcapability 以绑定 25/110 等低端口core-billionmail挂载了./conf/core/fail2ban目录并在FAIL2BAN_INITy时初始化 fail2ban 防护对应 conf/core/fail2ban 中的 filter 与 jail 配置邮件数据、数据库、日志均通过宿主机目录vmail-data、postgresql-data、logs/等持久化删除容器不会丢失邮件。为什么选择 BillionMail针对大多数邮件营销平台要么昂贵、要么闭源、要么缺少核心功能的痛点README 明确列出了以下差异化定位完全开源—— 无隐藏成本、无供应商锁定AGPLv3 许可高级分析—— 可追踪邮件投递、打开率、点击率等指标对应仓库中 internal/service/maillog_stat 等统计模块无限发送—— 对可发送的邮件数量不做人为限制发送能力取决于服务器资源与发信域信誉可定制模板—— 提供可复用的专业营销模板并内置拖拽式邮件编辑器前端 EmailEditor 模块隐私优先—— 数据完全保存在自有服务器无第三方跟踪自托管—— 在自己的服务器上运行获得完整控制权无月度订阅费用。许可证与参与方式BillionMail 采用AGPLv3许可详见 LICENSE允许免费使用、修改与分发代码也可无限制地私有使用。项目定位为社区驱动型项目官方在 README 中邀请使用者通过报告问题、参与讨论、贡献代码等方式参与建设若在使用中遇到问题或提出功能请求可在提交 issue 时附上清晰的复现步骤、截图或错误日志以便维护者快速定位。需要注意的是生产部署前请务必修改默认管理员密码与SafePath、在云安全组放行邮件与 Web 端口、为发信域正确配置 A/MX/SPF/DMARC/DKIM 记录并按需开启IP_WHITELIST_ENABLE白名单与FAIL2BAN_INIT防护以保障发信信誉与系统安全。【免费下载链接】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),仅供参考