我终于可以把邮件发进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
革命成功
最痛苦的!
./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
对的,回显就是这样。
我总觉得跟博主沟通很累……
终于还是优秀啊 博主
自从写了这个博客,我很久没有勃过了。。。
配置好证书后smtp可以在587端口开TLS
是的,我本来是在阿里云上这样试看能不能发信,结果用587还是不行。
这个docker-mailserver对vps的内存、cpu、硬盘有什么要求吗?
没什么特别的要求,内存大一点就行。如果是VPS,注意Docker不能在OpenVZ架构上安装。
不知道这个能不能用再sspanel的smtp发信上去?
这个搭建好了就是一个SMTP服务器,只要程序支持SMTP发信相关的配置就可以用。
到了运行docker-mailserver会提示ERROR: yaml.scanner.ScannerError: while scanning a simple key
in “./docker-compose.yml”, line 8, column 5
知道了,是符号写错了。。。
安装好foxmail后,登陆邮箱密码不对是怎么回事呀
全部都按照配置设置好了,foxmail还是登不上去:ssl连接错误, errorCode: 5
第三方DNS限制TXT字符255 有法解决吗,生成的dkim 字符窜超过255限制了 没法填写进去 求救
换一个国外的第三方DNS服务商可以解决这个问题,但是完全安装设置好后 发现客户端没法连接,提示信息里面:由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
DKIM有1024和2048位,一般1024是没什么问题的吧,DNS商那边要是1024的都不让输,那就换DNS解析服务呗。。。
重新安装了一下
[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.
出现这样的错误提示,应该怎么解决呢?
systemctl restart docker.service
或者重启机器再启动。
cc用不了,不能返回到原始服务器
lala大神,提供下TG联系方式,这个邮件搭建后ssl总是开启失败,有偿解决。
ID:lvchabiao
谢谢大佬,找到一个新的邮局系统,用到现在感觉最好的。poste.io 很好用,傻瓜式安装,完全不用配置。
大佬,能接收邮件但是不能发不出去,客户端提示的是远程主机强迫关闭了一个现有的连接。可能是什么问题啊?
这个提示太笼统了,我也不能通过这个提示判断具体是哪里出问题了,你的VPS或者服务器对端口有限制么。
博主有试过配置 IPv6 吗?这个系统我用了很久都不错,就是最近想添加 IPv6 支持,根据官方文档一直不通,会造成宿主机的 IPv6 也崩了,什么时候有空尝试配置下 IPv6 更新下教程呗,谢谢