zoukankan      html  css  js  c++  java
  • 使用dockermailserver搭建轻量邮件服务器

    自建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邮件通知了。

  • 相关阅读:
    maven-仓库
    maven-坐标与依赖
    maven-认识
    mysql-介绍
    redis-主从复制
    UVA
    UVA
    UVA
    UVA
    [ Java学习 ] 查阅资料整理 004
  • 原文地址:https://www.cnblogs.com/turingguo/p/15802479.html
Copyright © 2011-2022 走看看