搭建专属邮件服务器
原理
学习参考:
原理主要是学计算机网络的时候学习的几个TCP协议:SMTP
、POP
、IMAP
SMTP(Simple Mail Transfer Protocol)
:传输&&发送邮件所使用的标准协议IMAP(Internet Message Access Protocol)
:接收邮件使用的标准协议之一POP3(Post Office Protocol 3)
:接收邮件使用的标准协议之一
POP3 和 IMAP 的区别就是:
- POP3 你把邮件删除后,他还在邮件服务器里,只是你的客户端没有了
- IMAP 会和邮件服务器做同步,删了就都没了
另外有几个术语:
-
MUA(Mail User Agent)
:接收邮件所使用的邮件客户端,使用IMAP或POP3协议与服务器通信; -
MTA(Mail Transfer Agent)
:通过SMTP协议发送、转发邮件 -
MDA(Mail Deliver Agent)
:将MTA接收到的邮件保存到磁盘或指定地方,通常会进行垃圾邮件及病毒扫描 -
MRA(Mail Receive Agent)
:负责实现IMAP与POP3协议,与MUA进行交互
关系如图:
常用的MUA有:outlook、thunderbird、Mac Mail、mutt;
常用的MTA服务有:sendmail、postfix;
常用的MDA有:procmail、dropmail;
常用的MRA有:dovecot
部分教学在上面提到的那个视频里有(也可以看出这部分内容教程比较少,坑比较多)
而我们用到的那个EwoMail,其实是把这几部分都整合一起了,不用你自己一个一个去整合
方案
由于这个EwoMail需要使用Centos系统(???),然后对系统的要求比较苛刻:
centos7/8系统 64位,服务器需要干净环境,要求全新干净系统,不能安装在已有的nginx,mysql的环境中。
然后在docker上一搜,发现有镜像,那就用docker-ewomail了
docker镜像部署
安装可以直接参考上面的流程,需要注意:
- 需要在阿里云等上面把相应的端口打开,另外端口也可以自行修改一下,这个是没有问题的
- 文档里最后一行代码是
bestwu/ewomailserver
,应该是作者打错了,修改一下就好 - 需要修改域名
docker run -d -h mail.example.cn --restart=always \
-p 25:25 \
-p 109:109 \
-p 110:110 \
-p 143:143 \
-p 465:465 \
-p 587:587 \
-p 993:993 \
-p 995:995 \
-p 80:80 \
-p 8080:8080 \
-v `pwd`/mysql/:/ewomail/mysql/data/ \
-v `pwd`/vmail/:/ewomail/mail/ \
-v `pwd`/ssl/certs/:/etc/ssl/certs/ \
-v `pwd`/ssl/private/:/etc/ssl/private/ \
-v `pwd`/rainloop:/ewomail/www/rainloop/data \
-v `pwd`/ssl/dkim/:/ewomail/dkim/ \
--name ewomail bestwu/ewomail
此时如果浏览器相应端口可以打开就好了
DNS
配置DNS,这个是固定的,可以参考官方文档的说明
值得一提的是那个DKIM,如果报错了,可能需要等一段时间再重试才能好
一个问题
你在安装的过程中,如果出现问题,那个邮件是发不出去的,会有一个回信,类似:
通过判断这个邮件的发送方,可以方便你排错
另外,如果你用Docker进行安装,极有可能遇到如下的错误:
把上面红色部分加上关键词ewomail、docker,并用搜索引擎进行搜索,很容易搜到相关的原因和解决方法:
-
错误原因: 10024端口跑的服务主要用于ewomail中反垃圾反病毒作用,然而docker镜像中没有集成,所以会无法接收到邮件
-
解决方法:
注释/etc/postfix/main.cf中的(基本属于此问题)content_filter = smtp-amavis:[127.0.0.1]:10024 # 下面这个可能没有,我这里就没有找到 receive_override_options = no_address_mappings
一定要重启一下镜像,不然不会生效(我就是躺在这里躺了很久)
SSL
一般情况下,做好上面的步骤就可以使用了,不会注意到SSL的问题,但是最近由于这个SSL反而翻车了,并且Debug好久才想明白问题的所在。
先说SSL怎么配置:
可以参考SSL证书更换,先在腾讯云申请一个SSL证书,然后按照文档里的要求,用 xxx.key
和 xxx.pem
分别替换私钥和公钥(名称保持不变即可),然后就好啦,最后再重启一下Docker
再说说我遇到的问题:
- 在Outlook等软件中会提示服务器不可信
- 部分场景无法使用,比如Halo后台,发送邮件会报错,而且不好Debug到,参考我在社区提的问题:SMTP 无法使用 - Halo 社区
另外
- 如果你有多个域名,那么多个域名都是可以使用的,直接在管理系统和DNS里设置就行,无需敲代码设置(域名单独备案即可)
- 这样也就是自己折腾玩一下,如果要自己使用的话,就要保证服务器随时在线了,不然漏过了什么重要的邮件就。。。。
而且域名也得一直持有着,不然一换域名绑定邮箱不能验证了就很狗。。。 - 想要私有域名其实还可以采用企业邮的方式,很便捷,不过自由度似乎有些低。
评论区