1. 邮件被拒收了

之前使用 mailcow 搭建了邮箱服务给我们公司使用,使用了一段时间没什么问题,直到有人发送邮件给外国客户的时候,发现在给如 outlook 邮箱发送邮件时会被拒收。

这里摘录一段拒收的回复:

<xxxxxx@outlook.com>: host
outlook-com.olc.protection.outlook.com[104.47.58.161] said: 550 5.7.1
Service unavailable, Client host [49.76.32.200] blocked using Spamhaus. To
request removal from this list see
https://www.spamhaus.org/query/ip/49.76.32.200 (AS3130).
[BN8NAM11FT006.eop-nam11.prod.protection.outlook.com
2023-09-15T06:18:18.252Z 08DBB54CBCB5BA7B] (in reply to MAIL FROM command)

大概意思就是邮件被拒收了,拒收的原因是反垃圾邮件联盟 (Spamhaus) 把公司公网 IP 封了。回复中有个网站,访问就能看到其中一条说明:宽带或者拨号上网的 IP 在黑名单中,看来只要是家庭宽带都被封了。

我立马用 mailcow 邮箱发了一封邮件给自己的 outlook 邮箱,果然也被拒收了,和上面一样的提示。

既然家庭宽带的IP不行,那就把发到 outlook 邮箱的邮件从云服务器转发一下。

如果你的云服务器也被 Spamhaus 拉到黑名单了,那就需要去申请将云服务器的IP从禁用列表中移除,把 x.x.x.x 改为云服务器的IP并访问:https://www.spamhaus.org/query/ip/x.x.x.x

2. 安装 posteio

公司有一台4G内存的云服务器,用来穿透到公司内网提供服务的,posteio 占用的内存很少,就选它了(之前试过4G内存安装 mailcow 过段时间会宕机)。

使用 docker compose 运行 posteio

version: '3.3'

services:
  posteio:
    image: analogic/poste.io:2.3.14
    container_name: posteio
    hostname: relay.example.com
    ports:
      - "26:25"
      - "466:465"
      - "588:587"
      - "6443:443"
    environment:
      - TZ=Asia/Shanghai
      - DISABLE_CLAMAV=TRUE
      - DISABLE_RSPAMD=TRUE
      - DISABLE_ROUNDCUBE=TRUE
    volumes:
      - "./data:/data"
    restart: always
networks:
  default:
    name: posteio

通过 https://IP:6443访问 posteio 创建管理员账号,账号后缀不能和邮件域名一样,否则就无法转发回 mailcow 了,最好创建一个不存在的邮件域名的账号,比如 admin@xyz.com

主机名 上面的 hostname 不能和 mailcow 的一样,如果一样在转发的时候会报如下错误。

<xxx@outlook.com>: mail for xxx:25 loops back to myself

转发IP白名单System settings - Relay networks - IP/subnet,添加一条记录 0.0.0.0/0,表示允许所有IP通过posteio转发。上面端口映射 26 到容器 25,因为我们使用动态公网IP,在中继的IP白名单中无法使用固定的IP,这里只能不考虑安全性了,其他人也能转发,但是我们改为26端口之后,几乎没有人会使用到我们的主机进行转发了。

到此posteio就设置好了。

内存占用 posteio占用的内存较少,可以看到内存占用不到1G。 posteio内存占用

3. 设置 mailcow 转发(邮件中继)

进入 mailcow 后台,点击 System - 配置 - 路由

找到 传输规则 85503928dbde6bd7c62edf7a5d4d1a03.png

在上面的目标地址中添加.*\.outlook\.com,下一跳填写 posteio 的服务器地址,用户名和密码不用填。

添加完成后可以点击 Test 进行测试,如果你的 outlook 邮箱能够收到测试邮件,则代表配置正确

最后编辑刚才创建的规则,勾选正则和启用,保存后邮件就能正常发送给 outlook 了。

配置了 outlook 的转发之后,如果对方的企业邮箱也是用的 outlook 服务,设置的 MX 记录也是 outlook 的,所以也是能够转发的。