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

Flutter使用mailer插件发送Gmail邮件报凭据错误如何解决

报错核心原因

Gmail 自2022年起正式下线了「低安全性应用访问」功能,直接使用账号日常登录密码通过第三方客户端/插件走SMTP发信的请求会被官方直接拦截,无论你输入的登录密码是否正确,都会返回「用户名/密码/凭证错误」的提示,和你代码里的邮件构造逻辑没有关系。

修复步骤
  • 开启Gmail账号的两步验证
    进入对应Gmail账号的Google安全设置页,找到「两步验证」选项,按照指引完成身份校验、开启两步验证功能,未开启两步验证的账号无法生成后续需要的应用专用密码。
  • 生成应用专用密码
    两步验证开启成功后,回到Google安全设置页,找到「应用专用密码」入口:应用类型选择「邮件」,设备类型可自定义选择(比如选「其他」填Flutter测试应用),点击生成后会得到一串16位长度的随机密码,这串密码才是mailer插件配置时需要填写的密码值,不要填写你日常登录Gmail用的账号密码。
  • 替换代码中的凭证配置
    将代码里password字段的值替换为刚才生成的16位应用专用密码,username字段保留完整的Gmail邮箱地址即可,其余邮件构造、发送逻辑不需要改动,修正后的核心配置参考如下:
sendEmail() async {
  String username = '你的Gmail全地址@gmail.com';
  // 注意:此处填写16位应用专用密码,而非日常登录密码
  String password ='生成的16位应用专用密码'; 

  final smtpServer = gmail(username, password); 

  // 原有邮件构造逻辑无需修改
  final message = Message()
    ..from = Address(username)
    ..recipients.add('收件人邮箱@gmail.com')
    ..subject = 'Test Dart Mailer library :: 😀 :: ${DateTime.now()}'
    ..text = 'This is the plain text.\nThis is line 2 of the text part.';

  try {
    final sendReport = await send(message, smtpServer);
    print('Message sent: ' + sendReport.toString());
  } on MailerException catch (e) {
    print('Message not sent. \n'+ e.toString());
  }
} 
  • 额外排查项
    如果替换凭证后仍然报错,先确认运行代码的设备可以正常连通Gmail服务,网络限制导致无法连接SMTP服务器时,也可能偶发凭证错误类的误报。

内容的提问来源于stack exchange,提问作者Abeer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:27:26