静看光阴荏苒
不管不顾不问不说也不念

使用docker-mailserver自建邮件服务器

我终于可以把邮件发进QQ邮箱的收件箱了,没错就是用的这个docker-mailserver。。。

这个docker-mailserver看名字就知道也是用Docker部署的,但是这个玩意和之前介绍过的Mailcow/Mailu/Poste.io有非常大的不同之处。

docker-mailserver没有内置webmail,也就是说它是一个纯邮件服务器,不占用80/443端口,这样有一个非常大的好处就是我们一台服务器装了这个还能跑跑网站,做点别的事情。

我之所以一直推荐这种直接用Docker就可以部署的邮件服务器有三个原因:

1.简单/方便。你要知道自己去手动配一台这样功能完全的邮件服务器,也许一个晚上的时间都不够,稍微一个地方出错还可能用不了。

2.安全,你要知道邮件服务器,自用问题不大,如果是公共服务,各种SPAM/病毒邮件,你就会发现原来邮件服务器是真的难伺候。

3.也就是我个人觉得最重要的原因。我自建一个邮件服务器,是出于自用的目的,我拿一台VPS出来就只装一个邮件服务,我真的觉得太浪费。所以像这样用Docker,在部署完了后,我还可以装点别的程序跑一跑。而我之前介绍的Mailcow/Mailu/Poste.io这些,虽然它们都是用Docker部署的,但是都把80/443占用了,我们最多也就只能再跑个酸酸乳之类的程序,如果我们还想建站呢?那这些方案就不适合我们。

在开始之前还是应该先配置DNS解析:

1.Type:A/NAME:mail/Value:VPSIP

2.Type:MX/NAME:@/Value:mail.example.com

3.Type:TXT/NAME:@/Value:v=spf1 mx ~all

4.Type:TXT/NAME:_dmarc/Value:v=DMARC1; p=reject; rua=mailto:mailauth-reports@example.com

其中“mailauth-reports@example.com”修改成一个你可以正常接收邮件的地址。

docker-mailserver拥有和Mailcow/Mailu/Poste.io差不多的功能,但是不会占用你的80/443端口,下面我将在一台安装了BT面板的生产机器上部署docker-mailserver。

首先你应该查找目前机器上有哪些程序占用了25端口:

netstat -nltp

如果有可以用下面的命令查找更详细的信息:

ps PID

一般安装了宝塔面板的机器,宝塔会默认启动postfix,我们要把25端口留出来给docker-mailserver用:

systemctl stop postfix
systemctl disable postfix

然后我们还是老样子安装Docker:

cd
yum -y install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.06.1.ce-3.el7.x86_64.rpm
systemctl start docker
systemctl enable docker.service

接着安装docker-compose:

curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

然后pull镜像:

docker pull tvial/docker-mailserver:latest

下载配置文件(这几个文件国内机器可能打不开,打不开就先下到本地然后用SFTP传上去吧):

curl -o setup.sh https://raw.githubusercontent.com/tomav/docker-mailserver/master/setup.sh; chmod a+x ./setup.sh
curl -o docker-compose.yml https://raw.githubusercontent.com/tomav/docker-mailserver/master/docker-compose.yml.dist
curl -o .env https://raw.githubusercontent.com/tomav/docker-mailserver/master/.env.dist

接着我们需要编辑docker-compose.yml:

vi docker-compose.yml

在这个配置文件定义一个DNS服务器地址,这里要选择用cloudflare最近新出的:

dns: 1.1.1.1

如图所示:

如果你的本机是用的GoogleDNS,或是其他一些公共DNS,务必要做这一步修改,否则待会你的邮件服务器会出现无法发信的情况,原因我也懒得说了。

接着编辑env配置文件:

vi .env

在这个配置文件内,你必须要改动的地方有如下几点:

HOSTNAME=mail.example.com
DOMAINNAME=example.com
CONTAINER_NAME=mail

# Set different options for mynetworks option (can be overwrite in postfix-main.cf)
# empty => localhost only
# host => Add docker host (ipv4 only)
# network => Add all docker containers (ipv4 only)
PERMIT_DOCKER=network

其他的选项,自己按需求改吧,这里就不介绍了。

接着执行如下命令创建一个邮箱账号:

./setup.sh email add admin@example.com password

执行如下命令生成一个DKIM密匙:

./setup.sh config dkim

DKIM的解析记录保存在:

config/opendkim/keys/example.com/mail.txt

你可以用SFTP把这个文件下载到本地,然后把里面的内容按照要求填写到DNS解析界面:

现在就可以运行docker-mailserver了:

docker-compose up -d mail

如果你需要重启docker-mailserver,正确重启docker-mailserver的步骤是:

docker-compose stop
systemctl restart docker.service
docker-compose up -d mail

现在你应该在宝塔面板内放行如下端口:

25/993/587/143

如果嫌麻烦一条命令把防火墙关了:

systemctl stop firewalld.service

之前说了,docker-mailserver没有webmail,所以这里我们就要下载客户端了,客户端这里我使用的是:https://www.foxmail.com

安装好foxmail后,登录设置应该按照如下图来设置:

注:

1.服务器类型选择IMAP。
2.IMAP服务器一定要勾选SSL,也就是用993端口去通信。
3.SMTP服务器的端口一定要是25。

如果不出意外,现在你应该可以成功登录到自己的邮箱内了,然后我们试着发一封邮件:

竟然TM的进QQ收件箱了,真是喜出望外啊!!!

测试下收信,也是没问题的:

写在最后:

折腾了这么多邮件服务器,最后用这个docker-mailserver终于把邮件发进了QQ邮箱的收件箱,终于不会被550拒绝了。但是我总觉得这次能进收件箱和docker-mailserver没什么关系,我现在仔细想想觉得之前发邮件被550拒绝的原因应该是:

1.用了webmail,腾讯对这种用webmail发出来的邮件有特殊照顾。
2.没用foxmail这个腾讯的亲儿子客户端。

这个事情告诉我们:有个干爹真吃香啊~

2018.9.24 update

这里更新一下这个邮件服务器配置SSL/TLS的方法。

先新建一个存放ssl证书的目录

mkdir -p /tmp/ssl

然后把你准备好的证书文件传到这个目录内。

接着编辑docker-mailserver配置文件

vi .env

修改如下参数:

SSL_TYPE=manual

然后编辑docker-compose.yml:

vi docker-compose.yml

在volumes:下面加一条:

- /tmp/ssl/:/tmp/ssl:ro

这个意思是把宿主机的tmp/ssl目录映射到docker的tmp/ssl。

在environment:下面加上如下设置,用来指定证书文件:

- SSL_CERT_PATH=/tmp/ssl/example.pem
- SSL_KEY_PATH=/tmp/ssl/example.key

最后重启docker-mailserver即可:

docker-compose stop
systemctl restart docker.service
docker-compose up -d mail
赞(3)
未经允许不得转载:荒岛 » 使用docker-mailserver自建邮件服务器
分享到: 更多 (0)

评论 26

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    革命成功 :mrgreen:

    XEON7个月前 (09-24) Google Chrome 67.0.3396.87 Google Chrome 67.0.3396.87 Android 8.1.0 Android 8.1.0回复
    • 最痛苦的! :neutral:

      LALA7个月前 (09-24) Google Chrome 67.0.3396.99 Google Chrome 67.0.3396.99 Windows 10 x64 Edition Windows 10 x64 Edition回复
  2. #2

    ./setup.sh email add admin@example.com password
    这句提示参数不对啊?
    “docker inspect” requires at least 1 argument.
    See ‘docker inspect –help’.

    Usage: docker inspect [OPTIONS] NAME|ID [NAME|ID…]

    Return low-level information on Docker objects

    小爷7个月前 (09-24) Google Chrome 69.0.3497.100 Google Chrome 69.0.3497.100 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 对的,回显就是这样。

      LALA7个月前 (09-25) Google Chrome 67.0.3396.99 Google Chrome 67.0.3396.99 Windows 10 x64 Edition Windows 10 x64 Edition回复
      • 我总觉得跟博主沟通很累…… :grin:

        小爷7个月前 (09-25) Google Chrome 69.0.3497.100 Google Chrome 69.0.3497.100 Windows 10 x64 Edition Windows 10 x64 Edition回复
  3. #3

    终于还是优秀啊 博主

    ohoh7个月前 (09-25) Google Chrome 69.0.3497.100 Google Chrome 69.0.3497.100 Mac OS X  10.13.6 Mac OS X 10.13.6回复
    • 自从写了这个博客,我很久没有勃过了。。。

      LALA7个月前 (09-26) Google Chrome 69.0.3497.81 Google Chrome 69.0.3497.81 Windows 10 x64 Edition Windows 10 x64 Edition回复
  4. #4

    配置好证书后smtp可以在587端口开TLS :smile:

    rzjc7个月前 (09-29) Google Chrome 69.0.3497.100 Google Chrome 69.0.3497.100 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 是的,我本来是在阿里云上这样试看能不能发信,结果用587还是不行。

      LALA7个月前 (09-30) Google Chrome 67.0.3396.99 Google Chrome 67.0.3396.99 Windows 10 x64 Edition Windows 10 x64 Edition回复
  5. #5

    这个docker-mailserver对vps的内存、cpu、硬盘有什么要求吗?

    春风7个月前 (10-02) Chromium 69.0.3497.81 Chromium 69.0.3497.81 Ubuntu x64 Ubuntu x64回复
    • 没什么特别的要求,内存大一点就行。如果是VPS,注意Docker不能在OpenVZ架构上安装。

      LALA7个月前 (10-03) Google Chrome 67.0.3396.99 Google Chrome 67.0.3396.99 Windows 10 x64 Edition Windows 10 x64 Edition回复
  6. #6

    不知道这个能不能用再sspanel的smtp发信上去?

    yangyzp6个月前 (10-24) Google Chrome 63.0.3239.132 Google Chrome 63.0.3239.132 Windows 7 x64 Edition Windows 7 x64 Edition回复
    • 这个搭建好了就是一个SMTP服务器,只要程序支持SMTP发信相关的配置就可以用。

      LALA6个月前 (10-24) Google Chrome 67.0.3396.99 Google Chrome 67.0.3396.99 Windows 10 x64 Edition Windows 10 x64 Edition回复
  7. #7

    到了运行docker-mailserver会提示ERROR: yaml.scanner.ScannerError: while scanning a simple key
    in “./docker-compose.yml”, line 8, column 5

    locyoo6个月前 (11-01) Google Chrome 70.0.3538.77 Google Chrome 70.0.3538.77 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 知道了,是符号写错了。。。

      locyoo6个月前 (11-01) Google Chrome 70.0.3538.77 Google Chrome 70.0.3538.77 Windows 10 x64 Edition Windows 10 x64 Edition回复
  8. #8

    安装好foxmail后,登陆邮箱密码不对是怎么回事呀

    136个月前 (11-02) Google Chrome 69.0.3497.100 Google Chrome 69.0.3497.100 Windows 10 x64 Edition Windows 10 x64 Edition回复
  9. #9

    全部都按照配置设置好了,foxmail还是登不上去:ssl连接错误, errorCode: 5

    locyoo6个月前 (11-02) Google Chrome 70.0.3538.77 Google Chrome 70.0.3538.77 Windows 10 x64 Edition Windows 10 x64 Edition回复
  10. #10

    第三方DNS限制TXT字符255 有法解决吗,生成的dkim 字符窜超过255限制了 没法填写进去 求救

    木风6个月前 (11-06) Google Chrome 69.0.3497.100 Google Chrome 69.0.3497.100 Windows 7 x64 Edition Windows 7 x64 Edition回复
    • 换一个国外的第三方DNS服务商可以解决这个问题,但是完全安装设置好后 发现客户端没法连接,提示信息里面:由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

      木风6个月前 (11-06) Google Chrome 69.0.3497.100 Google Chrome 69.0.3497.100 Windows 7 x64 Edition Windows 7 x64 Edition回复
    • DKIM有1024和2048位,一般1024是没什么问题的吧,DNS商那边要是1024的都不让输,那就换DNS解析服务呗。。。

      LALA6个月前 (11-07) Google Chrome 69.0.3497.100 Google Chrome 69.0.3497.100 Windows 10 x64 Edition Windows 10 x64 Edition回复
  11. #11

    重新安装了一下
    [root@xs18517021072 ~]# docker-compose up -d mail
    WARNING: The POSTGREY_AUTO_WHITELIST_CLIENTS variable is not set. Defaulting to a blank string.
    Creating network “root_default” with the default driver
    Creating volume “root_maildata” with local driver
    Creating volume “root_mailstate” with local driver
    Creating mail … error

    ERROR: for mail Cannot start service mail: b’driver failed programming external connectivity on endpoint mail (43fbbbd4017ed736090fe604fdbbaaad0b6b710d9815c6fa617b47b658fa5610): Error starting userland proxy: listen tcp 0.0.0.0:25: bind: address already in use’

    ERROR: for mail Cannot start service mail: b’driver failed programming external connectivity on endpoint mail (43fbbbd4017ed736090fe604fdbbaaad0b6b710d9815c6fa617b47b658fa5610): Error starting userland proxy: listen tcp 0.0.0.0:25: bind: address already in use’
    ERROR: Encountered errors while bringing up the project.

    出现这样的错误提示,应该怎么解决呢?

    木风6个月前 (11-06) Google Chrome 69.0.3497.100 Google Chrome 69.0.3497.100 Windows 7 x64 Edition Windows 7 x64 Edition回复
    • systemctl restart docker.service
      或者重启机器再启动。

      LALA6个月前 (11-07) Google Chrome 69.0.3497.100 Google Chrome 69.0.3497.100 Windows 10 x64 Edition Windows 10 x64 Edition回复
      • cc用不了,不能返回到原始服务器

        lala5个月前 (12-08) Google Chrome 70.0.3538.110 Google Chrome 70.0.3538.110 Windows 10 x64 Edition Windows 10 x64 Edition回复
  12. #12

    lala大神,提供下TG联系方式,这个邮件搭建后ssl总是开启失败,有偿解决。

    lalada2个月前 (03-08) Google Chrome 72.0.3626.121 Google Chrome 72.0.3626.121 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • ID:lvchabiao

      LALA2个月前 (03-09) Google Chrome 71.0.3578.98 Google Chrome 71.0.3578.98 Windows 10 x64 Edition Windows 10 x64 Edition回复
      • 谢谢大佬,找到一个新的邮局系统,用到现在感觉最好的。poste.io 很好用,傻瓜式安装,完全不用配置。

        lalada2个月前 (03-09) Google Chrome 72.0.3626.121 Google Chrome 72.0.3626.121 Windows 10 x64 Edition Windows 10 x64 Edition回复

分享创造快乐

广告合作资源投稿