使用docker搭建自己的邮箱服务器收发邮件

使用docker搭建自己的邮箱服务器收发邮件

隔壁王叔叔
2021-03-26 / 0 评论 / 212 阅读 / 正在检测是否收录...

背景介绍

在网络上我们经常看到一些网站使用自己的域名邮箱,就是很多站长就用 admin@xxx.xxx 这样的邮箱,那么我们该如何使用这样的邮箱呢,最简单的方法是使用其他商家提供的企业邮箱(比如腾讯企业邮箱设置自己的域名邮箱),但是这些要么付费要么就是有限制的,另外的方法就是自己搭建邮局。今天就介绍下 使用Docker在Linux搭建邮件服务器

前期准备

服务器一台:国内国外都行,1核心内存1G以上硬盘大于20G,本文使用的是腾讯轻量云服务器,很便宜啊。200左右就能搞1年,对于开发人员做实验是非常友好的。

域名一个:无要求,随便一个域名就行,无所谓。

安装部署操作

网上有很多教程和项目都是直接安装到本地的。本人不太喜欢这种方式。由于经常使用docker 可以方便的删除和卸载重装,迁移等操作。这里就介绍docker的部署方式。

在全球最大的同姓交友平台搜了一波发现了一个比较适合我的项目 docker-mailserver 由于网上没有中文的教程,这边记录一下方便互联网上其它人学习。英语水平好的可以直接跳转到项目主页查看部署教程。

首先要在服务器防火墙开放这些端口:110 995 143 993 25 587 81

ServiceAddress
POP3 (starttls needed)127.0.0.1:110
POP3S127.0.0.1:995
IMAP (starttls needed)127.0.0.1:143
IMAPS127.0.0.1:993
SMTP127.0.0.1:25
Mail Submission (starttls needed)127.0.0.1:587
Management Interfacehttp://127.0.0.1:81/manager/
Webmailhttp://127.0.0.1:81/webmail/
Rspamd Webinterfacehttp://127.0.0.1:81/rspamd/

操作命令

[root@VM-8-17-centos ~]# mkdir /data
[root@VM-8-17-centos ~]# cd /data
[root@VM-8-17-centos data]# git clone https://github.com/jeboehm/docker-mailserver.git
[root@VM-8-17-centos data]# cd ./docker-mailserver
[root@VM-8-17-centos docker-mailserver]# cp .env.dist .env
[root@VM-8-17-centos docker-mailserver]# vim .env
-- 此处往下有两种方式,一种是您用这个项目提供的数据库 一种是您本身有个数据库不需要用这个项目提供的数据库 修改changeme部分
-- 以下是用已存在的数据库 自己创建库mailserver
[root@VM-8-17-centos docker-mailserver]# cat .env
MYSQL_DATABASE=mailserver
MYSQL_HOST=119.28.71.xx # 注意这里是外网地址不然docker里访问不到
MYSQL_USER=changeme
MYSQL_PASSWORD=changeme
MAILNAME=mail.ziyuzile.cn
POSTMASTER=postmaster@ziyuzile.cn
RELAYHOST=false
FILTER_MIME=false
FILTER_VIRUS=true
ENABLE_IMAP=true
ENABLE_POP3=true
CONTROLLER_PASSWORD=changeme
WAITSTART_TIMEOUT=2m
-- 用自己的数据库创建好后导入这个目录下的sql 有个文件内的表上下有依赖需要颠倒一下,先创建依赖表
[root@VM-8-17-centos docker-mailserver]# ll ./db/rootfs/docker-entrypoint-initdb.d/
-rw-r--r-- 1 root root 3040 Mar 26 12:06 001_mailserver.sql
-rw-r--r-- 1 root root 8495 Mar 26 12:06 002_webmail.sql
-- 以下是用项目数据库
[root@VM-8-17-centos docker-mailserver]# cat .env
MYSQL_DATABASE=mailserver
MYSQL_USER=mailserver
MYSQL_PASSWORD=changeme
MYSQL_ROOT_PASSWORD=changeme
MAILNAME=mail.example.com
POSTMASTER=postmaster@example.com
RELAYHOST=false
FILTER_MIME=false
FILTER_VIRUS=true
ENABLE_IMAP=true
ENABLE_POP3=true
CONTROLLER_PASSWORD=changeme
WAITSTART_TIMEOUT=2m
-- 如果您是用的第一种已存在的数据库 则需要删掉 docker-compose.yml 中 db部分
[root@VM-8-17-centos docker-mailserver]# cat docker-compose.yml
version: '3.5'

services:
  # Creates self signed tls certificates. Remove if you
  # use your own.
  ssl:
    image: jeboehm/mailserver-ssl:latest
    build: ./ssl
    env_file: .env
    volumes:
      - data-tls:/media/tls:rw

  # The Mail Transfer Agent (Postfix) receives incoming mail
  # on TCP port 25.
  mta:
    image: jeboehm/mailserver-mta:latest
    build: ./mta
    restart: on-failure:5
    env_file: .env
    volumes:
      - data-tls:/media/tls:ro
      # For using external certificates uncomment the following lines
      # and change the path on the left side of the colon.
      # - /home/user/certs/mail.example.com.crt:/media/tls/mailserver.crt:ro
      # - /home/user/certs/mail.example.com.key:/media/tls/mailserver.key:ro

  # The Mail Delivery Agent (Dovecot) is responsible for storing
  # incoming mail into a users mailbox and also delivers them
  # via POP3 or IMAP4.
  mda:
    image: jeboehm/mailserver-mda:latest
    build: ./mda
    restart: on-failure:5
    env_file: .env
    volumes:
      - data-mail:/var/vmail
      - data-tls:/media/tls:ro
      # For using external certificates uncomment the following lines
      # and change the path on the left side of the colon.
      # - /home/user/certs/mail.example.com.crt:/media/tls/mailserver.crt:ro
      # - /home/user/certs/mail.example.com.key:/media/tls/mailserver.key:ro

  # The admin (mailserver-admin) and webmail (roundcube) interfaces
  # live here. Can be removed if not needed.
  web:
    image: jeboehm/mailserver-web:latest
    build: ./web
    restart: on-failure:5
    env_file: .env
    volumes:
      - data-dkim:/media/dkim
    # For use with jwilder/nginx-proxy.
    # environment:
    #   - VIRTUAL_HOST=mail.example.com

  # Incoming spam is (hopefully) filtered by rspamd which runs
  # in this service.
  filter:
    image: jeboehm/mailserver-filter:latest
    build: ./filter
    restart: on-failure:5
    env_file: .env
    volumes:
      - data-filter:/var/lib/rspamd
      - data-dkim:/media/dkim
    links:
      - virus:virus.local

  # Incoming viruses or malware is detected and rejected by
  # this service. Can be removed if FILTER_VIRUS is set to false.
  virus:
    image: jeboehm/mailserver-virus:latest
    build: ./virus
    restart: on-failure:5
    env_file: .env
    volumes:
      - data-virusdb:/var/lib/clamav

  redis:
    image: redis:alpine
    restart: on-failure:5
    command: ["redis-server", "--appendonly", "yes"]
    volumes:
      - data-redis:/data

  # If you want unhealthy containers to be restarted automatically
  # just uncomment the following lines.
  # autoheal:
  #   image: willfarrell/autoheal:latest
  #   restart: always
  #   networks: []
  #   volumes:
  #     - /var/run/docker.sock:/var/run/docker.sock:ro
  #   environment:
  #     - AUTOHEAL_CONTAINER_LABEL=de.ressourcenkonflikt.docker-mailserver.autoheal

  # Optional service: extend ClamAV (used in the virus service)
  # by downloading additional databases provided by different
  # companys. Run it regulary.
  # virus_unof_sig_updater:
  #   build: ./virus/contrib/unofficial-sigs
  #   env_file: .env
  #   volumes:
  #     - data-virusdb:/var/lib/clamav

volumes:
  data-dkim:
  data-mail:
  data-tls:
  data-filter:
  data-virusdb:
  data-redis:
[root@VM-8-17-centos docker-mailserver]# ./bin/production.sh pull
[root@VM-8-17-centos docker-mailserver]# ./bin/production.sh up -d
[root@VM-8-17-centos docker-mailserver]# ./bin/production.sh run --rm web setup.sh   此处一点要等待交互完成会提示您创建一个管理员账号和输入密码 比如我的配置 我输入账号 admin@ziyuzile.cn 密码输两边 通过以后命令行会退出。
后面就可以在浏览器访问了 地址是服务器外网地址记得在防火墙开放对应端口哦。 http://192.144.226.xx:81/login 用户名就是刚刚输入的admin@ziyuzile.cn 密码就是刚刚输入的密码

打开登录界面如图:
docker-mailserver-1

进入后界面如图:
mailserver-admin

用户管理:
mailserver-user-1

编辑用户:
mailserver-user-2
DKIM界面:
dkim-1
DKIM编辑:这一块在下面的域名配置里也要用到
dkim-2

很多教程都不讲域名配置我这边把涉及到的内容都贴出来了,重点 txt记录的名称是上面Domain的值,内容是 Expected value的值

domain-dns

到此,邮箱服务器就已经配置完成了。使用foxmail就可以登录了。
foxmail-settings

0

评论 (0)

取消