Flutter mailer包连接自定义SMTP服务器发信失败如何解决
问题原因
两个异常均由SMTP加密模式与端口不匹配导致:
- 587端口触发
WRONG_VERSION_NUMBER握手错误:587端口对应STARTTLS加密模式,连接建立初期为明文交互,后续才升级TLS加密,你当前代码给587端口设置ssl: true,要求连接初始就直接TLS握手,协议不匹配直接报错。 - 465端口提示发送成功但收不到邮件:465为隐式SSL/TLS端口,
ssl: true配置本身符合端口要求,收不到信属于发信链路后续的拦截、配置类问题,和握手错误无关。
修复步骤
修正587端口配置
587端口必须关闭初始SSL连接参数,mailer包会自动完成STARTTLS加密升级,替换原SmtpServer初始化代码如下:
final smtpServer = SmtpServer( 'mail.yourcloudweb.com', port: 587, ignoreBadCertificate: false, ssl: false, // 587端口必填false,走STARTTLS流程 username: username, password: password );
修改后重新运行,587端口的TLS握手错误会直接消失,正常返回sendReport即代表发信请求已成功提交到邮件服务器。
排查465端口发信丢件问题
如果使用465端口(保持ssl: true配置)仍出现提示成功但收不到信的情况,按以下顺序排查:
- 登录邮箱网页端,检查发件箱是否存在对应邮件,确认邮件是否真的从服务商系统发出
- 核对收件人邮箱地址是否存在拼写错误
- 联系邮件服务商确认账号是否存在发信权限限制、域名SPF/DKIM解析是否配置正确,这类问题会导致邮件被服务器静默拦截,或被收件方网关直接丢弃(不会进入垃圾邮件文件夹)
- 先将收件人更换为同域名下的其他邮箱测试,排除外域发信的拦截规则影响
内容的提问来源于stack exchange,提问作者Sheets
相关产品推荐
相关产品推荐

