You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mutt通过msmtp发送邮件失败,遇TLS连接超时及远程协议错误

Mutt通过msmtp发送邮件失败,遇TLS连接超时及远程协议错误

我最近碰到了和你完全一样的问题,折腾了好一阵才摸清楚几个可行的排查和解决方向,分享给你试试:

先对齐下你的问题现状(方便确认排查方向)

你一直用这条命令发邮件:

mutt -s "Subject" email@gmail.com <<< "Text"

几天前突然失效,现在遇到TLS连接超时错误;切换到465端口后又出现远程协议错误,但swaks测试两个端口都能正常发件,也已经给开启2FA的Google账号配置了应用专用密码,网络连通性也没问题。

针对性解决方案

1. 修正msmtp的TLS配置细节

这是最可能解决问题的核心点,因为587和465端口的TLS工作模式完全不同:

  • 对于587端口(STARTTLS模式):在~/.msmtprc的gmail账号配置里,添加tls_starttls on,同时删掉重复的auth on行,修改后配置如下:
defaults
logfile ~/msmtp.log

account gmail
auth on
host smtp.gmail.com
from my.email@gmail.com
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
user my.email@gmail.com
password "你的应用专用密码"
port 587

account default : gmail
  • 对于465端口(SSL直连模式):需要把tls_starttls off,确保端口设为465,配置示例:
account gmail
auth on
host smtp.gmail.com
from my.email@gmail.com
tls on
tls_starttls off
tls_trust_file /etc/ssl/certs/ca-certificates.crt
user my.email@gmail.com
password "你的应用专用密码"
port 465

2. 查看msmtp日志定位具体问题

你的配置里已经开启了日志logfile ~/msmtp.log,执行发邮件命令后立刻查看日志详情:

tail -n 20 ~/msmtp.log

日志会显示TLS握手的每一步细节,比如是否是证书验证失败、握手阶段哪一步卡住,能帮你精准定位问题根源。

3. 调整Mutt调用msmtp的参数

有时候Mutt传递的参数会导致msmtp工作异常,在~/.muttrc里添加sendmail_flags配置:

set sendmail="/usr/bin/msmtp"
set sendmail_flags="-t"
set use_from=yes
set from=my.email@gmail.com

-t参数让msmtp从邮件内容里读取收件人信息,和Mutt的发送逻辑更匹配。

4. 更新系统CA证书

虽然swaks能用,但msmtp可能依赖的CA证书存在过期或路径问题,执行命令更新系统证书:

sudo update-ca-certificates

快速验证方法

修改配置后,先跳过Mutt直接用msmtp测试发送,排除Mutt的问题:

echo -e "Subject: Test Mail\n\nThis is a test from msmtp" | msmtp email@gmail.com

如果msmtp能正常发送,再测试Mutt的命令,这样能快速定位是msmtp还是Mutt的问题。

备注:内容来源于stack exchange,提问作者s3idani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 10:17:51