1
0
Fork 0

feat(billion-mail): add billion mail application with docker compose s…

…etup

- add environment configuration file (.env.simple) with default settings
- implement data.yml with comprehensive form fields for service configuration
- add docker-compose.yml with multi-service architecture (core, rspamd, dovecot, postfix, roundcube)
- include chinese and english readme documentation
- add application metadata and logo files
- configure network settings and service dependencies
- set up data persistence paths for all services
- configure mail service ports (SMTP, IMAP, POP3) and management ports
This commit is contained in:
pooneyy 2025-10-12 00:31:00 +08:00
parent a27b6b8788
commit 472b8812c5
No known key found for this signature in database
7 changed files with 652 additions and 0 deletions

View File

@ -0,0 +1,52 @@
# Default Billion Mail Username password
ADMIN_USERNAME=billion
ADMIN_PASSWORD=billion
# Manage Safe entrance
SafePath=billion
# BILLIONMAIL_HOSTNAME configuration, Postfix myhostname configuration
BILLIONMAIL_HOSTNAME=mail.example.com
# pgsql NAME and USER and PASSWORD configuration
DBNAME=billionmail
DBUSER=billionmail
DBPASS=NauF7ysRYyt9HTOiOn4JjIAL3QcRZnzj
# REDIS PASSWORD configuration
REDISPASS=zKLnZQr3riFpcS2lEy3MOtfncztaCGKp
## MAIL Ports
SMTP_PORT=25
SMTPS_PORT=465
SUBMISSION_PORT=587
IMAP_PORT=143
IMAPS_PORT=993
POP_PORT=110
POPS_PORT=995
REDIS_PORT=127.0.0.1:26379
SQL_PORT=127.0.0.1:25432
## Manage Ports
HTTP_PORT=80
HTTPS_PORT=443
# You can use this script to set the time zone for your container.
# See https://en.wikipedia.org/wiki/List_of_tz_database_time_zones for a list of timezones"
# echo -e "Use a column named "TZ identifier" + note the column named "Notes""
TZ=Etc/UTC
# Default containers IPV4 intranet segment
IPV4_NETWORK=172.66.1
# Enable fail2ban Access restrictions, specify that the IP exceeds the access limit
FAIL2BAN_INIT=y
# Console ip whitelist Disabled:false Enabled:true
IP_WHITELIST_ENABLE=false
# Number of days to keep log backup
RETENTION_DAYS=7

View File

@ -0,0 +1,254 @@
additionalProperties:
formFields:
- default: ./data/billionmail
envKey: CORE_DATA_PATH
label:
en: Core service data path
zh: Core 数据持久化
required: true
type: text
edit: true
rule: paramCommon
- default: ./data/rspamd
envKey: RSPAMD_DATA_PATH
label:
en: Rspamd service data path
zh: Rspamd 数据持久化
required: true
type: text
edit: true
rule: paramCommon
- default: ./data/dovecot
envKey: DOCECOT_DATA_PATH
label:
en: Dovecot (IMAP/POP3) service data path
zh: Dovecot (IMAP/POP3) 数据持久化
required: true
type: text
edit: true
rule: paramCommon
- default: ./data/postfix
envKey: POSTFIX_DATA_PATH
label:
en: Postfix (SMTP) service data path
zh: Postfix (SMTP) 数据持久化
required: true
type: text
edit: true
rule: paramCommon
- default: ./data/roundcube
envKey: ROUNDCUBE_DATA_PATH
label:
en: Roundcube service data path
zh: Roundcube 数据持久化
required: true
type: text
edit: true
rule: paramCommon
- default: "80"
envKey: HTTP_PORT
label:
en: HTTP PORT
zh: HTTP 端口
required: true
type: number
edit: true
rule: paramPort
- default: "443"
envKey: HTTPS_PORT
label:
en: HTTPS PORT
zh: HTTPS 端口
required: true
type: number
edit: true
rule: paramPort
- default: "143"
envKey: IMAP_PORT
label:
en: IMAP PORT
zh: IMAP 端口
required: true
type: number
edit: true
rule: paramPort
- default: "993"
envKey: IMAPS_PORT
label:
en: IMAPS PORT
zh: IMAPS 端口
required: true
type: number
edit: true
rule: paramPort
- default: "110"
envKey: POP_PORT
label:
en: POP PORT
zh: POP 端口
required: true
type: number
edit: true
rule: paramPort
- default: "995"
envKey: POPS_PORT
label:
en: POPS PORT
zh: POPS 端口
required: true
type: number
edit: true
rule: paramPort
- default: "25"
envKey: SMTP_PORT
label:
en: SMTP PORT
zh: SMTP 端口
required: true
type: number
edit: true
rule: paramPort
- default: "465"
envKey: SMTPS_PORT
label:
en: SMTPS PORT
zh: SMTPS 端口
required: true
type: number
edit: true
rule: paramPort
- default: "587"
envKey: SUBMISSION_PORT
label:
en: SUBMISSION PORT
zh: SUBMISSION 端口
required: true
type: number
edit: true
rule: paramPort
- default: 127.0.0.1:5432
envKey: SQL_PORT
label:
en: Postgres DB Address Port
zh: Postgres DB 地址端口
required: true
type: text
edit: true
- default: DB_BILLIONMAIL
envKey: DBNAME
label:
en: Postgres DB Name
zh: Postgres 数据库名
required: true
type: text
edit: true
- default: BILLIONMAIL
envKey: DBUSER
label:
en: Postgres DB User Name
zh: Postgres 数据库用户名
required: true
type: text
edit: true
- default: BILLIONMAIL_
envKey: DBPASS
label:
en: Postgres DB Password
zh: Postgres 数据库密码
required: true
type: password
edit: true
rule: paramComplexity
random: true
- default: 127.0.0.1:6379
envKey: REDIS_PORT
label:
en: REDIS Address Port
zh: REDIS 地址端口
required: true
type: text
edit: true
- default: REDISPASS_
envKey: REDISPASS
label:
en: Redis Password
zh: Redis 密码
required: true
type: password
edit: true
rule: paramComplexity
random: true
- default: mail.example.com
envKey: BILLIONMAIL_HOSTNAME
label:
en: Billionmail myhostname
zh: Billionmail 邮箱域
required: true
type: text
edit: true
- default: "False"
envKey: IP_WHITELIST_ENABLE
label:
en: Console ip whitelist
zh: 控制台 ip 白名单
required: false
type: select
edit: true
values:
- label: "True"
value: "true"
- label: "False"
value: "false"
- default: "7"
envKey: RETENTION_DAYS
label:
en: Number of days to keep log backup
zh: 保留日志备份的天数
required: false
type: text
edit: true
- default: y
envKey: FAIL2BAN_INIT
label:
en: Enable fail2ban Access restrictions
zh: 启用fail2ban访问限制
required: false
type: select
edit: true
values:
- label: "Yes"
value: "y"
- label: "No"
value: "n"
- default: Etc/UTC
envKey: TZ
label:
en: Time Zone (TZ identifier)
zh: 时区 (时区标识符)
required: false
type: text
edit: true

View File

@ -0,0 +1,158 @@
name: billionmail
services:
core-billionmail:
image: billionmail/core:4.6.1
container_name: ${CONTAINER_NAME}
hostname: billionmail-core-manage
volumes:
- ${CORE_DATA_PATH}/ssl:/etc/ssl/mail
- ${CORE_DATA_PATH}/ssl-self-signed:/etc/ssl/ssl-self-signed
- ${CORE_DATA_PATH}/conf/core/fail2ban/filter.d:/etc/fail2ban/filter.d
- ${CORE_DATA_PATH}/conf/core/fail2ban/jail.d:/etc/fail2ban/jail.d
- ${CORE_DATA_PATH}/logs/fail2ban:/var/log/fail2ban
- ${CORE_DATA_PATH}/postgresql-socket:/opt/billionmail/postgresql-socket
- ${CORE_DATA_PATH}/php-sock:/opt/billionmail/php-sock
- ${CORE_DATA_PATH}/rspamd-data:/opt/billionmail/rspamd-data
- ${CORE_DATA_PATH}/webmail-data:/opt/billionmail/webmail-data
- ${CORE_DATA_PATH}/.env:/opt/billionmail/.env
- ${CORE_DATA_PATH}/conf:/opt/billionmail/conf
- ${CORE_DATA_PATH}/logs:/opt/billionmail/logs
- ${CORE_DATA_PATH}/logs/core:/opt/billionmail/core/logs
- ${CORE_DATA_PATH}/core-data:/opt/billionmail/core/data
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- TZ=${TZ}
- FAIL2BAN_INIT=${FAIL2BAN_INIT:-y}
cap_add:
- NET_BIND_SERVICE
- NET_ADMIN
- NET_RAW
ports:
- ${HTTP_PORT}:80
- ${HTTPS_PORT}:443
restart: always
networks:
- 1panel-network
rspamd-billionmail:
image: billionmail/rspamd:1.2
container_name: ${CONTAINER_NAME}-rspamd
hostname: billionmail-rspamd
environment:
- TZ=${TZ}
- REDISPASS=${REDISPASS}
- RETENTION_DAYS=${RETENTION_DAYS:-7}
volumes:
- ${RSPAMD_DATA_PATH}/conf/rspamd/local.d:/etc/rspamd/local.d
- ${RSPAMD_DATA_PATH}/conf/rspamd/statistic.conf:/etc/rspamd/statistic.conf
- ${RSPAMD_DATA_PATH}/conf/rspamd/rspamd.conf:/etc/rspamd/rspamd.conf
- ${RSPAMD_DATA_PATH}/rspamd-data:/var/lib/rspamd
- ${RSPAMD_DATA_PATH}/logs/rspamd:/var/log/rspamd
restart: always
networks:
- 1panel-network
dovecot-billionmail:
image: billionmail/dovecot:1.5
container_name: ${CONTAINER_NAME}-dovecot
hostname: billionmail-dovecot
cap_add:
- NET_BIND_SERVICE
volumes:
- ${DOCECOT_DATA_PATH}/conf/dovecot/conf.d:/etc/dovecot/conf.d
- ${DOCECOT_DATA_PATH}/conf/dovecot/dovecot.conf:/etc/dovecot/dovecot.conf
- ${DOCECOT_DATA_PATH}/conf/dovecot/rsyslog.conf:/etc/rsyslog.conf
- ${DOCECOT_DATA_PATH}/logs/dovecot:/var/log/mail
- ${DOCECOT_DATA_PATH}/ssl:/etc/ssl/mail
- ${DOCECOT_DATA_PATH}/ssl-self-signed:/etc/ssl/ssl-self-signed
- ${DOCECOT_DATA_PATH}/vmail-data:/var/vmail
- ${DOCECOT_DATA_PATH}/rspamd-data:/var/lib/rspamd
- ${DOCECOT_DATA_PATH}/postgresql-socket:/var/run/postgresql
environment:
- DBNAME=${DBNAME}
- DBUSER=${DBUSER}
- DBPASS=${DBPASS}
- TZ=${TZ}
- BILLIONMAIL_HOSTNAME=${BILLIONMAIL_HOSTNAME}
- REDISPASS=${REDISPASS}
- RETENTION_DAYS=${RETENTION_DAYS:-7}
ports:
- "${IMAP_PORT}:143"
- "${IMAPS_PORT:-993}:993"
- "${POP_PORT:-110}:110"
- "${POPS_PORT:-995}:995"
restart: always
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
networks:
- 1panel-network
postfix-billionmail:
image: billionmail/postfix:1.6
container_name: ${CONTAINER_NAME}-postfix
hostname: billionmail-postfix
volumes:
- ${POSTFIX_DATA_PATH}/conf/postfix/main.cf:/etc/postfix/main.cf
- ${POSTFIX_DATA_PATH}/conf/postfix/master.cf:/etc/postfix/master.cf
- ${POSTFIX_DATA_PATH}/conf/postfix/conf:/etc/postfix/conf
- ${POSTFIX_DATA_PATH}/conf/postfix/sql:/etc/postfix/sql
- ${POSTFIX_DATA_PATH}/conf/postfix/rsyslog.conf:/etc/rsyslog.conf
- ${POSTFIX_DATA_PATH}/logs/postfix:/var/log/mail
- ${POSTFIX_DATA_PATH}/ssl:/etc/ssl/mail
- ${POSTFIX_DATA_PATH}/postfix-data:/var/spool/postfix
- ${POSTFIX_DATA_PATH}/rspamd-data:/var/lib/rspamd
- ${POSTFIX_DATA_PATH}/postgresql-socket:/var/run/postgresql
environment:
- TZ=${TZ}
- DBNAME=${DBNAME}
- DBUSER=${DBUSER}
- DBPASS=${DBPASS}
- REDISPASS=${REDISPASS}
- BILLIONMAIL_HOSTNAME=${BILLIONMAIL_HOSTNAME}
- RETENTION_DAYS=${RETENTION_DAYS:-7}
cap_add:
- NET_BIND_SERVICE
ports:
- "${SMTP_PORT}:25"
- "${SMTPS_PORT}:465"
- "${SUBMISSION_PORT}:587"
restart: always
networks:
- 1panel-network
webmail-billionmail:
image: roundcube/roundcubemail:1.6.10-fpm-alpine
container_name: ${CONTAINER_NAME}-roundcube
hostname: billionmail-roundcube
depends_on:
- dovecot-billionmail
- postfix-billionmail
volumes:
- ${ROUNDCUBE_DATA_PATH}/webmail-data:/var/www/html
- ${ROUNDCUBE_DATA_PATH}/conf/webmail/mime.types:/var/roundcube/config/mime.types
- ${ROUNDCUBE_DATA_PATH}/conf/webmail:/var/roundcube/config
- ${ROUNDCUBE_DATA_PATH}/conf/php:/usr/local/etc
- ${ROUNDCUBE_DATA_PATH}/php-sock/:/var/run/
environment:
- TZ=${TZ}
- ROUNDCUBEMAIL_DB_TYPE=pgsql
- ROUNDCUBEMAIL_DB_HOST=pgsql
- ROUNDCUBEMAIL_DB_NAME=${DBNAME}
- ROUNDCUBEMAIL_DB_USER=${DBUSER}
- ROUNDCUBEMAIL_DB_PASSWORD=${DBPASS}
- ROUNDCUBEMAIL_DEFAULT_HOST=dovecot
- ROUNDCUBEMAIL_DEFAULT_PORT=${IMAP_PORT}
- ROUNDCUBEMAIL_SMTP_SERVER=postfix
- ROUNDCUBEMAIL_SMTP_PORT=${SMTP_PORT}
- ROUNDCUBEMAIL_REQUEST_PATH=/roundcube
restart: always
networks:
- 1panel-network
networks:
1panel-network:
external: true

View File

@ -0,0 +1,83 @@
<div align="center">
<a name="readme-top"></a>
<h1><a href="https://www.billionmail.com/" target="_blank">BillionMail 📧</a></h1>
</div>
一个开源的邮件服务器,为智能营销提供电子邮件解决方案
## 在线演示
BillionMail 演示: [https://demo.billionmail.com/billionmail](https://demo.billionmail.com/billionmail)
用户名: `billionmail`
密码: `billionmail`
## 什么是 BillionMail
BillionMail 是一个**未来的开源邮件服务器和电子邮件营销平台**,旨在帮助企业和个人轻松管理他们的电子邮件营销活动。无论您是发送新闻通讯、促销邮件还是交易消息,这个工具都将为您的电子邮件营销工作提供**完全控制**。通过**高级分析**和**客户管理**等功能,您将能够像专业人士一样创建、发送和跟踪电子邮件。
![BillionMail Banner](https://www.billionmail.com/home.png?v1)
## 管理脚本
- 管理帮助
`bm help`
- 查看默认登录信息
`bm default`
- 显示域名DNS记录
`bm show-record`
- 更新BillionMail
`bm update`
## 网页邮箱
BillionMail已集成**RoundCube**,您可以通过`/roundcube/`访问网页邮箱。
## 为什么选择BillionMail
### 大多数电子邮件营销平台要么**昂贵**,要么**闭源**,或者**缺乏基本功能**。BillionMail的目标是与众不同
**完全开源** 没有隐藏成本,没有供应商锁定。
📊 **高级分析** 跟踪电子邮件投递、打开率、点击率等。
📧 **无限发送** 对您可以发送的电子邮件数量没有限制。
🎨 **可定制模板** 可重复使用的专业营销模板。
🔒 **隐私优先** 您的数据保留在您这里,没有第三方跟踪。
🚀 **自托管** 在您自己的服务器上运行,完全控制。
## 您如何提供帮助 🌟
BillionMail是一个**社区驱动的项目**,我们需要您的支持才能开始!以下是您可以提供帮助的方式:
1. **为此仓库加星标**:通过为此仓库加星表示您的兴趣。
2. **传播消息**与您的网络分享BillionMail—开发者、营销人员和开源爱好者。
3. **分享反馈**通过提出问题或加入讨论让我们知道您希望在BillionMail中看到哪些功能。
4. **贡献**:一旦开发开始,我们将欢迎社区的贡献。敬请关注更新!
---
📧 **BillionMail 开源电子邮件营销的未来。**
## 问题
如果您遇到任何问题或有功能请求,请[提交issue](https://github.com/aaPanel/BillionMail/issues)。请确保包括:
- 问题或请求的清晰描述。
- 重现问题的步骤(如适用)。
- 截图或错误日志(如适用)。
## 许可证
BillionMail根据**AGPLv3许可证**授权。这意味着您可以:
✅ 免费使用该软件。
✅ 修改和分发代码。
✅ 私下使用,没有限制。

View File

@ -0,0 +1,81 @@
<div align="center">
<a name="readme-top"></a>
<h1><a href="https://www.billionmail.com/" target="_blank">BillionMail 📧</a></h1>
</div>
An Open-Source MailServer, NewsLetter, Email Marketing Solution for Smarter Campaigns
## What is BillionMail?
BillionMail is a **future open-source Mail server, Email marketing platform** designed to help businesses and individuals manage their email campaigns with ease. Whether you're sending newsletters, promotional emails, or transactional messages, this tool will provide **full control** over your email marketing efforts. With features like **advanced analytics**, and **customer management**, you'll be able to create, send, and track emails like a pro.
![BillionMail Banner](https://www.billionmail.com/home.png?v1)
## Management script
- Management help
`bm help`
- View Login default info
`bm default`
- Show domain DNS record
`bm show-record`
- Update BillionMail
`bm update`
## Live Demo
BillionMail Demo: [https://demo.billionmail.com/billionmail](https://demo.billionmail.com/billionmail)
Username: `billionmail`
Password: `billionmail`
## WebMail
BillionMail has integrated **RoundCube**, you can access WebMail via `/roundcube/`.
## Why BillionMail?
Most email marketing platforms are either **expensive**, **closed-source**, or **lack essential features**. BillionMail aims to be different:
**Fully Open-Source** No hidden costs, no vendor lock-in.
📊 **Advanced Analytics** Track email delivery, open rates, click-through rates, and more.
📧 **Unlimited Sending** No restrictions on the number of emails you can send.
🎨 **Customizable Templates** Custom professional marketing templates for reuse.
🔒 **Privacy-First** Your data stays with you, no third-party tracking.
🚀 **Self-Hosted** Run it on your own server for complete control.
## How You Can Help 🌟
BillionMail is a **community-driven project**, and we need your support to get started! Here's how you can help:
1. **Star This Repository**: Show your interest by starring this repo.
2. **Spread the Word**: Share BillionMail with your network—developers, marketers, and open-source enthusiasts.
3. **Share Feedback**: Let us know what features you'd like to see in BillionMail by opening an issue or joining the discussion.
4. **Contribute**: Once development begins, we'll welcome contributions from the community. Stay tuned for updates!
---
📧 **BillionMail The Future of Open-Source Email Marketing.**
## Issues
If you encounter any issues or have feature requests, please [open an issue](https://github.com/aaPanel/BillionMail/issues). Be sure to include:
- A clear description of the problem or request.
- Steps to reproduce the issue (if applicable).
- Screenshots or error logs (if applicable).
## License
BillionMail is licensed under the **AGPLv3 License**. This means you can:
✅ Use the software for free.
✅ Modify and distribute the code.
✅ Use it privately without restrictions.

View File

@ -0,0 +1,24 @@
name: BillionMail
tags:
- 实用工具
- 邮件服务
title: 一个开源的邮件服务器,为智能营销提供电子邮件解决方案
description:
en: An Open-Source MailServer, NewsLetter, Email Marketing Solution for Smarter
Campaigns
zh: 一个开源的邮件服务器,为智能营销提供电子邮件解决方案
additionalProperties:
key: billion-mail
name: BillionMail
tags:
- Tool
- Email
shortDescZh: 一个开源的邮件服务器,为智能营销提供电子邮件解决方案
shortDescEn: An Open-Source MailServer, NewsLetter, Email Marketing Solution for
Smarter Campaigns
type: website
crossVersionUpdate: true
limit: 0
website: https://www.billionmail.com
github: https://github.com/aaPanel/BillionMail
document: https://www.billionmail.com/start/what.html

BIN
apps/billion-mail/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB