使用docker-mailserver搭建轻量邮件服务器

自建email服务器的一个好处是可以无限发邮件,而qq邮箱 163邮箱等一般都有每日发送上限。

docker-mailserver是一个轻量级的邮件服务器,一般只用来发送邮件,接收邮件的推荐做法是通过设置额外邮箱转发到指定的邮箱,比如你自己的qq邮箱。

目前最新版本是10.4.0,日常占用仅100M+,缺点是没有web管理界面,管理邮箱账户只能通过命令行

 

 

需要准备好一个域名,假设为mail.my.com,有步骤需要到dns设置mail._domainkey的txt记录,这样发送的邮件才不会被标记为垃圾邮件。

 

新建目录

新建目录dms,然后再dms下新建config  mail-data  mail-logs  mail-state目录

mkdir dms
cd dms
mkdir config  mail-data  mail-logs  mail-state
cd ..

 

添加邮箱账户

将刚刚新建的目录./dms/config映射到/tmp/docker-mailserver, 添加邮箱admin@mail.my.com 密码456asdqwe

docker run --rm -v $PWD/dms/config:/tmp/docker-mailserver/ mailserver/docker-mailserver setup email add admin@mail.my.com 456asdqwe

设置转发邮箱 xxx@qq.com, admin@my.com收到的邮件都会自动转发到xxx@qq.com

docker run --rm -v $PWD/dms/config:/tmp/docker-mailserver/ mailserver/docker-mailserver setup alias add admin@mail.my.com xxx@qq.com

创建dkim和设置txt记录

docker run --rm -v $PWD/dms/config:/tmp/docker-mailserver/ mailserver/docker-mailserver setup config dkim

此步骤会生成dms/config/opendkim/keys/mail.my.com/mail.my.com.txt文件,可以使用cat输出文件内容

cat dms/config/opendkim/keys/mail.my.com/mail.my.com.txt

输出内容大概如下

 

 

 

 然后到dns管理界面去添加一条txt记录 如图所示, 类型选择TXT, 名称输入mail._domainkey, 内容复制上一步文件中的部分内容,注意大体格式是v=DKIM1;h=sha256;k=rsa; p=xxxxxx 

每次只复制引号内的内容然后粘贴到dns管理界面就行。

 

 

 

 

 

 

 配置完毕可以通过dig mail.my.com TXT来测试dns配置是否已经生效

结果里有一行是mail.my.com 300 IN  TXT     "v=DKIM1; h=sha256; k=rsa; p=xxx"就说明配置正确,注意里边是否有\",这就表示多复制了引号进去

通过docker-compose启动

新建docker-compose.yml如下

version: '3.8'

services:
  mailserver:
    image: mailserver/docker-mailserver
    container_name: mailserver
    hostname: mail.my.com
    domainname: mail.my.com
    ports:
      - "25:25"
      - "587:587"
      - "465:465"
    volumes:
      - ./dms/mail-data/:/var/mail/
      - ./dms/mail-state/:/var/mail-state/
      - ./dms/mail-logs/:/var/log/mail/
      - ./dms/config/:/tmp/docker-mailserver/
      - /etc/ssl/caddy/certificates/acme-v02.api.letsencrypt.org-directory/mail.my.com/:/etc/letsencrypt/
      - /etc/localtime:/etc/localtime:ro
    environment:
      - ENABLE_FAIL2BAN=1
      - SSL_TYPE=manual
      - SSL_CERT_PATH=/etc/letsencrypt/mail.my.com.crt
      - SSL_KEY_PATH=/etc/letsencrypt/mail.my.com.key
      # Allow sending emails from other docker containers
      # Beware creating an Open Relay: https://docker-mailserver.github.io/docker-mailserver/edge/config/environment/#permit_docker
      - PERMIT_DOCKER=network
      # All env below are default settings:
      - DMS_DEBUG=0
      - ONE_DIR=1
      - ENABLE_POSTGREY=0
      - ENABLE_CLAMAV=0
      - ENABLE_SPAMASSASSIN=0
      # You may want to enable this: https://docker-mailserver.github.io/docker-mailserver/edge/config/environment/#spoof_protection
      # See step 8 below, which demonstrates setup with enabled/disabled SPOOF_PROTECTION:
      - SPOOF_PROTECTION=0
    cap_add:
      - NET_ADMIN # For Fail2Ban to work
      - SYS_PTRACE

注意我这里用的是自定义证书,通过caddy申请let's encrypt证书,修改了数据目录位置,将证书放到了/etc/ssl/caddy/certificates/acme-v02.api.letsencrypt.org-directory下。

所以这里把对应域名的目录映射进去,然后通过SSL_CERT_PATH和SSL_KEY_PATH指定证书位置。官方文档有更多关于ssl证书申请和配置的相关信息。如果是通过云服务商提供的ssl证书直接放到配置的目录下指定路径即可

映射了25(SMTP)  587(ESMTP ) 465(ESMTP ) 端口,记得安全组里要开放这几个端口

 

最后执行docker-compose up -d就成功启动邮件服务器了,通过smtp就能正常发送邮件了

在grafana、kibana之类的应用就可以配置smtp邮件通知了。

posted @ 2022-01-14 16:36  turingguo  阅读(9748)  评论(0编辑  收藏  举报