邮件

📘 BillionMail

BillionMail 是一个未来的开源邮件服务器和电子邮件营销平台,旨在帮助企业和个人轻松管理他们的电子邮件营销活动。无论您是发送新闻通讯、促销邮件还是交易消息,这个工具都将为您的电子邮件营销工作提供完全控制。通过高级分析和客户管理等功能,您将能够像专业人士一样创建、发送和跟踪电子邮件。

25 端口检查

terminal
# 检查出口 方向 25 端口是否开放
## outlook-com.olc.protection.outlook.com
apt install telnet -y && telnet smtp.google.com 25


# 查看端口占用,Exim, Postfix, Sendmail 等
ss -tulnp | grep :25

下载源码

terminal
git clone https://github.com/aaPanel/BillionMail.git

docker-compose 配置文件

官方位置:docker-compose.yml

docker-compose.yml
name: billionmail

services:
    pgsql-billionmail:
      image: postgres:17.4-alpine
      hostname: pgsql
      volumes:
        - ./postgresql-data:/var/lib/postgresql/data
        - ./postgresql-socket:/var/run/postgresql
      environment:
        - TZ=${TZ}
        - POSTGRES_DB=${DBNAME}
        - POSTGRES_USER=${DBUSER}
        - POSTGRES_PASSWORD=${DBPASS}
      restart: always
      ports:
        - "${SQL_PORT:-127.0.0.1:25432}:5432"
      networks:
        billionmail-network:
          aliases:
            - pgsql

    redis-billionmail:
      image: redis:7.4.2-alpine
      hostname: redis
      entrypoint: ["/bin/sh","/redis-conf.sh"]
      volumes:
        - ./redis-data:/data
        - ./conf/redis/redis-conf.sh:/redis-conf.sh
      restart: always
      ports:
        - "${REDIS_PORT:-127.0.0.1:26379}:6379"
      environment:
        - TZ=${TZ}
        - REDISPASS=${REDISPASS}
      sysctls:
        - net.core.somaxconn=4096
      networks:
        billionmail-network:
          aliases:
            - redis

    rspamd-billionmail:
      image: billionmail/rspamd:1.2
      hostname: rspamd
      depends_on:
        - redis-billionmail
      environment:
        - TZ=${TZ}
        - REDISPASS=${REDISPASS}
        - RETENTION_DAYS=${RETENTION_DAYS:-7}
      volumes:
        - ./conf/rspamd/local.d:/etc/rspamd/local.d
        - ./conf/rspamd/statistic.conf:/etc/rspamd/statistic.conf
        - ./conf/rspamd/rspamd.conf:/etc/rspamd/rspamd.conf 
        - ./rspamd-data:/var/lib/rspamd
        - ./logs/rspamd:/var/log/rspamd
      restart: always
      networks:
        billionmail-network:
          aliases:
            - rspamd

    dovecot-billionmail:
      image: billionmail/dovecot:1.6
      hostname: dovecot
      depends_on:
        - pgsql-billionmail
        - redis-billionmail
      cap_add:
        - NET_BIND_SERVICE
      volumes:
        - ./conf/dovecot/conf.d:/etc/dovecot/conf.d
        - ./conf/dovecot/dovecot.conf:/etc/dovecot/dovecot.conf
        - ./conf/dovecot/rsyslog.conf:/etc/rsyslog.conf
        - ./logs/dovecot:/var/log/mail
        - ./ssl:/etc/ssl/mail
        - ./ssl-self-signed:/etc/ssl/ssl-self-signed
        - ./vmail-data:/var/vmail
        - ./rspamd-data:/var/lib/rspamd
        - ./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}:143"
        - "${IMAPS_PORT:-993}:993"
        - "${POP_PORT:-110}:110"
        - "${POPS_PORT:-995}:995"
      restart: always
      ulimits:
        nproc: 65535
        nofile:
          soft: 20000
          hard: 40000
      networks:
        billionmail-network:
          aliases:
            - dovecot

    postfix-billionmail:
      image: billionmail/postfix:1.6
      hostname: postfix
      depends_on:
        pgsql-billionmail:
          condition: service_started
      volumes:
        - ./conf/postfix/main.cf:/etc/postfix/main.cf
        - ./conf/postfix/master.cf:/etc/postfix/master.cf
        - ./conf/postfix/conf:/etc/postfix/conf
        - ./conf/postfix/sql:/etc/postfix/sql
        - ./conf/postfix/rsyslog.conf:/etc/rsyslog.conf
        - ./logs/postfix:/var/log/mail
        - ./ssl:/etc/ssl/mail
        - ./postfix-data:/var/spool/postfix
        - ./rspamd-data:/var/lib/rspamd
        - ./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}:25"
        - "${SMTPS_PORT:-465}:465"
        - "${SUBMISSION_PORT:-587}:587"
      restart: always
      networks:
        billionmail-network:
          aliases:
            - postfix


    webmail-billionmail:
      image: roundcube/roundcubemail:1.6.10-fpm-alpine
      hostname: roundcube
      depends_on:
        - pgsql-billionmail
        - dovecot-billionmail
        - postfix-billionmail
      volumes:
        - ./webmail-data:/var/www/html
        - ./conf/webmail/mime.types:/var/roundcube/config/mime.types
        - ./conf/webmail:/var/roundcube/config
        - ./conf/php:/usr/local/etc
        - ./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:-143}
        - ROUNDCUBEMAIL_SMTP_SERVER=postfix
        - ROUNDCUBEMAIL_SMTP_PORT=${SMTP_PORT:-25}
        - ROUNDCUBEMAIL_REQUEST_PATH=/roundcube
      restart: always
      networks:
        billionmail-network:
          aliases:
            - webmail

    core-billionmail:
      image: billionmail/core:4.7.2
      hostname: core-manage
      depends_on:
        - pgsql-billionmail
      volumes:
        - ./ssl:/etc/ssl/mail
        - ./ssl-self-signed:/etc/ssl/ssl-self-signed
        - ./conf/core/fail2ban/filter.d:/etc/fail2ban/filter.d
        - ./conf/core/fail2ban/jail.d:/etc/fail2ban/jail.d
        - ./logs/fail2ban:/var/log/fail2ban
        - ./postgresql-socket:/opt/billionmail/postgresql-socket
        - ./php-sock:/opt/billionmail/php-sock
        - ./rspamd-data:/opt/billionmail/rspamd-data
        - ./webmail-data:/opt/billionmail/webmail-data
        - ./.env:/opt/billionmail/.env
        - ./conf:/opt/billionmail/conf
        - ./logs:/opt/billionmail/logs
        - ./logs/core:/opt/billionmail/core/logs
        - ./core-data:/opt/billionmail/core/data
        - /var/run/docker.sock:/var/run/docker.sock:ro
        - ./vmail-data:/opt/billionmail/vmail-data
      environment:
        - TZ=${TZ}
        - FAIL2BAN_INIT=${FAIL2BAN_INIT:-y}
      cap_add:
        - NET_BIND_SERVICE
        - NET_ADMIN
        - NET_RAW
      ports:
        - "${HTTP_PORT:-80}:${HTTP_PORT:-80}"
        - "${HTTPS_PORT:-443}:${HTTPS_PORT:-443}"
      restart: always
      networks:
        billionmail-network:
          aliases:
            - core

networks:
  billionmail-network:
    driver: bridge
    driver_opts:
      com.docker.network.bridge.name: br-billionmail
    ipam:
      driver: default
      config:
        - subnet: ${IPV4_NETWORK:-172.16.1}.0/24

环境配置文件

官方位置:.env

terminal
# 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=Asia/Shanghai

  # Default containers IPV4 intranet segment
IPV4_NETWORK=172.16.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

访问 BillionMail

terminal
## BillionMail
https://localhost/<SafePath>

##
https://localhost/roundcube

邮箱评分风险测试

Spam Test Result

📘 利用CloudFlare创建邮局(域名邮箱)收发邮件

查看视频:油管 B 站