SMTP – 永夜 https://www.shuijingwanwq.com 没有不值得去解决的问题,也没有不值得去学习的技术! Sun, 07 Jun 2026 04:29:51 +0000 zh-Hans hourly 1 https://wordpress.org/?v=7.0 自建 VPN 后 Thunderbird 无法发送 Gmail 邮件:原因与解决方法 https://www.shuijingwanwq.com/2026/06/05/15789/ https://www.shuijingwanwq.com/2026/06/05/15789/#respond Fri, 05 Jun 2026 03:33:02 +0000 https://www.shuijingwanwq.com/?p=15789 浏览量: 65

一、问题现象

在使用自建的 VPN 方案(Wstunnel + WireGuard + Clash Verge Rev)时,我发现 Thunderbird 无法通过 Gmail 发送邮件,报错如下:

  • “无法连接到发件服务器(SMTP)smtp.gmail.com,该服务器可能暂时不可用,或者拒绝 SMTP 连接。”
  • 或者:“消息未发送,因为与发件服务器(SMTP)smtp.gmail.com 的连接超时。”

与此同时,通过浏览器访问 https://mail.google.com 却完全正常。这说明 VPN 本身能够连通 Google,问题出在 Thunderbird 的流量没有被正确代理。

[截图 1:Thunderbird 发送失败的错误弹窗]

[截图 1:Thunderbird 发送失败的错误弹窗]

二、原因分析

核心原因在于 Clash 分流规则未覆盖邮件协议端口

  • 我的 VPN 方案使用 Clash 进行流量分流,默认规则通常只覆盖 HTTP/HTTPS 的常用端口(80、443)。
  • Thunderbird 发送邮件使用 SMTP 协议,端口为 587465。由于规则中没有明确匹配这些端口,流量被 Clash 路由到了 DIRECT(直连)。
  • 而我的网络环境必须通过 VPN 才能访问外网,直连时无法连接到 Google 的 SMTP 服务器,导致超时或拒绝连接。

浏览器能访问 Gmail,是因为网页流量走的是 443 端口,被 Clash 规则中的 MATCH,Proxy 兜底处理了。因此出现了“网页正常,邮件客户端失败”的现象。

三、解决方案

3.1 确认 Thunderbird 的 SMTP 设置

首先确保 Thunderbird 本身的发件服务器配置符合 Gmail 的要求,尤其是 OAuth2 认证(Google 已逐步淘汰普通密码认证)。

进入 Thunderbird 的 账户设置发送服务器 (SMTP),编辑对应的 Gmail 发件服务器。

[截图 2:编辑发件服务器窗口,显示端口 465 + SSL/TLS + OAuth2]

[截图 2:编辑发件服务器窗口,显示端口 465 + SSL/TLS + OAuth2]

[截图 3:编辑发件服务器窗口,显示端口 587 + STARTTLS + OAuth2] (最终推荐配置)


[截图 3:编辑发件服务器窗口,显示端口 587 + STARTTLS + OAuth2] (最终推荐配置)

推荐使用以下参数:

项目
服务器地址smtp.gmail.com
端口587
连接安全STARTTLS
身份验证方法OAuth2
用户名完整的 Gmail 地址

保存后重启 Thunderbird,尝试发送一封测试邮件。仍然失败,继续下一步。

[截图 4:Thunderbird 发送失败的错误弹窗]

[截图 4:Thunderbird 发送失败的错误弹窗]

3.2 修改 Clash 配置,添加邮件端口代理规则

打开 Clash 配置文件(我使用的是 Clash Verge Rev 订阅文件中的自定义规则),找到 rules: 字段,在 本地局域网直连规则之后国内流量直连规则之前 插入以下两行:

rules:
  # ... 前面的规则 ...

  # 本地局域网直连
  - IP-CIDR,127.0.0.1/8,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT
  - IP-CIDR,172.16.0.0/12,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT

  # ===== 新增:邮件端口走代理 =====
  - DST-PORT,587,Proxy
  - DST-PORT,465,Proxy

  # 国内流量直连
  - DOMAIN-SUFFIX,cn,DIRECT
  - GEOIP,CN,DIRECT

  # 其他全部走代理
  - MATCH,Proxy

注意:Proxy 应替换为你配置中实际使用的代理策略组名称(例如 PROXYZgoCloud-WG 等)。

[截图 5:Clash 规则片段,突出显示新增的两行 DST-PORT 规则]

[截图 5:Clash 规则片段,突出显示新增的两行 DST-PORT 规则]

保存配置文件,然后在 Clash Verge Rev 中重新加载配置(点击 Profiles 页面的刷新图标,或重启 Clash)。

3.3 验证结果

重启 Thunderbird 后再次尝试发送邮件。按照上述步骤操作后,邮件应该能够正常发送。

四、备用排查方法

如果修改后仍然超时,可以尝试以下两种方式:

4.1 在 Thunderbird 中直接设置 SOCKS5 代理

绕过 Clash 的规则分流,强制 Thunderbird 所有流量走代理。

  • 打开 Thunderbird 设置 → General → 底部 Network Settings → Settings…
  • 选择 Manual proxy configuration
  • SOCKS Host: 127.0.0.1,端口:Clash 的 SOCKS5 端口(通常为 7897
  • 勾选 Proxy DNS when using SOCKS v5
  • 确定并重启 Thunderbird。

如果此方法能发送成功,说明 Wstunnel 和 WireGuard 本身没有问题,问题仅在于 Clash 规则。此时应检查规则顺序或策略组名称是否正确。我之前有过一次配置,手动配置代理,参考:Ubuntu 26.04 邮件客户端折腾记:从网易邮箱大师到 Thunderbird,一口气添加 8 个邮箱

4.2 检查 Wstunnel 的端口转发范围

某些 Wstunnel 启动命令中只指定了 WireGuard 端口(如 51820)的转发,导致其他端口(如 587465)无法到达远程服务器。

请确认你的 Wstunnel 启动参数是否限制了端口转发。通常情况下,默认配置会转发所有 TCP 端口。如有必要,请修改 Wstunnel 的启动命令,移除端口限制。

五、总结

本问题的根本原因在于 Clash 分流规则未包含邮件端口,导致 Thunderbird 的 SMTP 流量走了直连。解决方法也很直接:在 Clash 规则的 rules 部分添加:

- DST-PORT,587,Proxy
- DST-PORT,465,Proxy

这一思路同样适用于其他非 HTTP 协议(如 SSH、游戏、应用商店更新等)的代理问题——只需找到对应的端口,将其加入代理规则即可。


环境参考:Ubuntu 26.04 + Thunderbird 151.0.1 + Clash Verge Rev + 自建 Wstunnel/WireGuard 方案

]]>
https://www.shuijingwanwq.com/2026/06/05/15789/feed/ 0
在 Windows 10 宿主机中运行 MailHog ,方便我们开发 Laravel 时对邮件发送的监控 https://www.shuijingwanwq.com/2022/01/17/5715/ https://www.shuijingwanwq.com/2022/01/17/5715/#respond Mon, 17 Jan 2022 01:30:31 +0000 https://www.shuijingwanwq.com/?p=5715 浏览量: 333 1、在 Windows 10 中安装 MailHog ,方便我们开发 Laravel 时对邮件发送的监控。原因在于开发环境是本地主机环境,并非 Homestead 或者 Docker 。打开网址:https://github.com/mailhog/MailHog 。 2、选择 MailHog_windows_amd64.exe ,如图1
选择 MailHog_windows_amd64.exe

图1

3、运行下载的文件后,界面,如图2
运行下载的文件后,界面

图2



[APIv1] BROADCAST /api/v1/events
2021/12/31 11:20:12 [SMTP 127.0.0.1:64569] Session ended
[APIv2] GET /api/v2/jim
[APIv2] GET /api/v2/messages
[APIv2] GET /api/v2/websocket
[APIv1] KEEPALIVE /api/v1/events
[APIv1] GET /api/v1/messages/9u2mG73gOYyJTHv5yUKHcTGqLrdsdsvzl88MrKPxBlw=@mailhog.example

[APIv1] KEEPALIVE /api/v1/events
[APIv1] KEEPALIVE /api/v1/events
[APIv1] KEEPALIVE /api/v1/events
[APIv1] KEEPALIVE /api/v1/events
[APIv1] KEEPALIVE /api/v1/events
[APIv1] KEEPALIVE /api/v1/events
[APIv1] KEEPALIVE /api/v1/events
[APIv1] KEEPALIVE /api/v1/events
[APIv1] KEEPALIVE /api/v1/events


4、在浏览器中打开网址:http://larabbs.local:8025/ 。如图3
在浏览器中打开网址:http://larabbs.local:8025/

图3

5、Laravel 的 .env 文件中修改 Email 相关设置如下来开启 MailHog


MAIL_MAILER=smtp
MAIL_HOST=127.0.0.1
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=admin@larabbs.local
MAIL_FROM_NAME="${APP_NAME}"


6、接下来浏览器访问 larabbs.local/register ,填写表单并注册一个测试用户。注册成功后,访问 larabbs.local:8025/ 查看 MailHog 。可见邮件成功发送。如图4
访问 larabbs.local:8025/ 查看 MailHog 。可见邮件成功发送。

图4

]]>
https://www.shuijingwanwq.com/2022/01/17/5715/feed/ 0