• 首页
  • 归档
  • 关于
  • 搜索
  • 夜间模式
    ©2026  望时代 Theme by OneBlog

    望时代

    搜索
    标签
    # 教程 # Linux # 脚本 # AI # 影音 # 游戏 # 随笔 # 科技 # 认知
  • 首页>
  • >
  • 正文
  • poste.io自建邮局+对接Roundcube,经验分享

    2026年06月26日 2 阅读 0 评论 8570 字

    poste.io自建邮局+对接Roundcube,经验分享

    __2025年12月9日 __3条评论 __328次阅读 __0人点赞 __Tao_Qi

    为什么选择 poste.io

    poste.io我个人认为是相对来说较为简单且轻量(关掉反病毒的前提下)的邮局系统,也是我加入mjj后部署的首个邮局系统,想当年(其实好像也就是年初),我拿着RN的1h1g在互联网上检索自建邮局的教程,那时候我安装docker都装不明白,完全复刻教程都搞不好得傻鸟,依稀记得当时在网吧里通宵搞这个,一次次的重装系统哈哈。

    今天我故地重游,再次部署一下 post.io。做都做了,顺便给大家分享下一些经验。请多点温暖多点爱!

    大家也可以在此看本文 https://ninb.de/postio

    部署 poste.io

    使用docker命令部署 poste.io
    [code]

    docker run -d --restart=always \
      --net=postio(子网名,建议单独为邮件服务建个bridge子网) \
      -p 25:25 \
      -p 3016(修改为可用端口):80 \
      -p 110:110 \
      -p 143:143 \
      -p (3017)修改为可用端口:443 \
      -p 587:587 \
      -p 993:993 \
      -p 995:995 \
      -v 宿主机挂载目录:/data \
      -v /etc/localtime:/etc/localtime:ro \
      -e TZ=Asia/Shanghai \
      --name "容器名" \
      -h "mail.nimama.de(邮局域)" \
      -t analogic/poste.io
    

    [/code]

      • *

    配置反代

    一开始我是只反代了容器内部的80端口,然后发现poste.io会自己跳转443端口
    于是我又为容器内部的443端口反代

    反代配置示例:

    容器80端口
    [code]

    server {
        listen 80;
        server_name mail.nimama.de;#邮局域
        
        # 日志文件配置(以自己实际路径为准)
        access_log /www/sites/postio/log/access.log main;
        error_log /www/sites/postio/log/error.log;
    
        # 【核心部分】反向代理设置
        location / {
            # 将流量转发给宿主机的 3016 端口,对应容器的80端口(以自己实际设置端口为准)
            proxy_pass http://127.0.0.1:3016;
            
            # 必须携带的 Header,否则 Poste.io 无法识别来源
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            
            # 支持 Websocket (Poste.io 部分功能可能需要)
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    
        # 用于 Let's Encrypt 证书申请的验证目录
        location ^~ /.well-known/acme-challenge {
            allow all;
            root /usr/share/nginx/html;
        }
    }
    

    [/code]

    容器443端口

    注意:

    • 443端口反代一定要加上 proxy_ssl_verify off 忽略容器内的自签名证书验证

    [code]

    server {
        # 1. 开启 SSL 监听
        listen 443 ssl http2;
        server_name mail.nimama.de;#邮局域
    
        # 2. SSL 证书路径配置(以自己实际证书路径为准)
        ssl_certificate /www/sites/postio2/ssl/fullchain.pem; 
        ssl_certificate_key /www/sites/postio2/ssl/privkey.pem;
    
        # SSL 优化参数
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
        ssl_prefer_server_ciphers off;
    
        # 3. 日志 (以自己实际路径为准)
        access_log /www/sites/postio2/log/access.log main;
        error_log /www/sites/postio2/log/error.log;
    
        # 4. 允许上传大附件
        client_max_body_size 100m;
    
        # 5. 【核心】反向代理设置
        location / {
            # 将流量转发给宿主机的 3017 端口,对应容器的443端口(以自己实际设置端口为准)
            # 注意:这里用 https 协议转发,因为 Poste.io 内部强制 HTTPS
            proxy_pass https://127.0.0.1:3017;
    
            # 【关键】因为容器内是自签名证书,宿主机 Nginx 必须忽略验证,否则报 502
            proxy_ssl_verify off;
    
            # 传递真实头部信息
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            
            # Websocket 支持 (Poste.io 网页版可能需要)
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    }
    

    [/code]

      • *

    进入安装页面

    配置完毕后,打开 https://mail.nimama.de/admin/install/server 进入安装页面
    这里,我以为是 /admin 或 /install 重装了好多次,才知道是 /admin/install/server 是安装页面
    填管理员账户名,设置密码,进入后台

      • *

    添加ssl证书

    然后我们到下图所示的地方去添加ssl证书

    这里很多人都是选择使用内置的Let's Encrypt certificate 去申请
    但我觉得我使用的是bridge网络模式可能会失败
    于是我就去了1panel面板去申请了 mail.nimama.de 证书
    这个地方有两个需要注意的

    1. 1panel申请下来的证书是两个文件,分别是fullchain.pem和privkey.pem,但是这个页面要上传三个证书文件,分别是Private part of certificate,Intermediate certificate和Public part of certificate。我们需要把fullchain.pem拆开,其中Private part of certificate对应privkey.pem,Public part of certificate对应的是fullchain.pem的上半段内容,Intermediate certificate对应的是fullchain.pem和privkey.pem的后半段内容。将这些上传至对应块,点击 Save chanages生效。
    2. 我们现在申请的证书,很大一部分都是默认申请为 ECC (椭圆曲线) 算法的证书,而post.io和其他的很多邮局系统只支持标准的 RSA 证书,所以要擦亮眼睛,别搞错了。ECC算法证书 ❌ RSA 算法证书 ✅
      • *

    解析必要的DNS

    记录类型名称内容备注
    Amail1.2.3.4(自己邮局服务器的IP地址)名称可自定义
    MX@mail.nimama.de优先级10
    TXT@v=spf1 a mx -all
    TXTmailv=spf1 a -all
    TXT_dmarc"v=DMARC1; p=reject; rua=mailto:[[email protected]](</cdn-cgi/l/email-protection>); ruf=mailto:[[email protected]](</cdn-cgi/l/email-protection>)"后面替换邮局域
      • *

    反向域名解析rDNS

    这块的话,一般给开25端口的商家应该都会提供的。Netcup的话实在scp修改,RN的话需要发工单修改

      • *

    关闭反病毒

    poste.io默认是开启入站病毒检查的,好像是内置的ClamAV
    众所周知,这玩意非常消耗资源,如果是小小鸡的话还是尽可能的关掉较好,免得撑炸了。(我当年的rn就是部署好直接撑炸)
    依旧是打开System settings,上方栏目选中 Spam & virus checks 滑到最下面。

    将图中默认勾选的选项取消勾选

      • *

    发封邮件做测试

    我们可以打开这个网站为刚刚搭好的邮局来评分 https://www.mail-tester.com/
    他会生成一个邮件地址,你向这个地址发送邮件,然后会对整个邮件进行多方位的评分
    在这个过程中我们可以看到有哪些设置不足,或者有哪些问题,这个网站会给出解决方案

      • *

    连接其他Webmail程序Roundcube

    其实吧,如果是部署poste.io的话,这一步纯多余,因为poste.io自带Webmail。但是中间的经验还是可以学一学的,后面如果更换了其他邮局系统,也会方便很多。

      • *

    部署Roundcube

    这里的docker命令中的参数其实是重点,这里我用了8080端口,各位可以随意
    [code]

    docker run -d --restart=always \
      --name roundcube \
      --net=postio \
      --link mailserver:mail.nimama.de \
      -p 8080:80 \
      -e ROUNDCUBEMAIL_DEFAULT_HOST=tls://mail.nimama.de \
      -e ROUNDCUBEMAIL_DEFAULT_PORT=143 \
      -e ROUNDCUBEMAIL_SMTP_SERVER=tls://mail.nimama.de \
      -e ROUNDCUBEMAIL_SMTP_PORT=587 \
      -e ROUNDCUBEMAIL_UPLOAD_MAX_FILESIZE=100M \
      -v /opt/roundcube/db:/var/www/html/db \
      -v /opt/roundcube/config:/var/www/html/config \
      roundcube/roundcubemail
    

    [/code]

      • *

    Roundcube连接poste.io的坑

    连接Webmail程序Roundcube时环境变量直接使用公网域名mail.nimama.de导致NAT 回环,登录时一直在转圈报错

    将poste.io与Roundcube拉到同一个docker子网中,使用容器名连接,证书验证失败,无法建立连接

    解决方案:
    核心连接环境变量,使用tls连接邮局域

    • ROUNDCUBEMAIL_DEFAULT_HOST=tls://mail.nimama.de
    • ROUNDCUBEMAIL_DEFAULT_PORT=143
    • ROUNDCUBEMAIL_SMTP_SERVER=tls://mail.nimama.de
    • ROUNDCUBEMAIL_SMTP_PORT=587

    docker run命令中加上如下参数

    • --link mailserver:mail.nimama.de

    link参数相当于,修改了容器内的路由表,直接指向了 post.io,同时解决了NAT回环和证书验证失败的问题

      • *

    结束!感谢大家!!!

    本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可

    __点赞 __分享

    __ __ __ __ __ __ 打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

    __No Tag

    最后编辑:2025年12月9日

    < 上一篇

    下一篇 >

    1. Mint0315说道:

    2025年12月9日 下午7:24

    你这域名。。。

    回复

    1. xe说道:

    2025年12月10日 下午6:01

    建议lz修正一下标题和正文,这个叫 poste.io 并非 post.io
    要不然搜索 poste 都搜不到你这篇帖子

    回复

    1. MK说道:

    2025年12月10日 下午8:55

    poste.io docker设置HTTPS=OFF就不会自动跳443了,也就不用proxy_ssl_verify off ,直接nginx用自己的证书就行了

    回复

    发表回复 取消回复

    电子邮件地址不会被公开。必填项已用 * 标注

    __

    *

    __

    *

    __

    *

    __

    本文著作权归作者 [ doudoudoubao ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    取消回复

    发表留言
    回复

    Copyright©2026  All Rights Reserved.  Load:0.003 s
    Theme by OneBlog V3.7.1
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。