【问题标题】:Flutter - Emulator sends email using SMTP, phone does notFlutter - 模拟器使用 SMTP 发送电子邮件,电话不发送
【发布时间】:2020-08-20 00:42:13
【问题描述】:

我正在创建一个通过 SMTP 发送电子邮件的 Flutter 应用。

电子邮件使用模拟器可以正常工作。

当我构建一个 APK 并将其安装在我的手机上时,电子邮件不会发送。

我尝试了不同的端口,allowInsecure (true/false)、ignoreBadCertificate (true/false)。 我什至尝试过使用不同的 SMTP 服务器(不是 gmail 服务器),结果相同。

我正在使用以下内容: 邮件:^3.0.4

sendEmail(String emailFrom, String emailTo, String emailSubject, String emailBody) async {
    String smtpServerName = 'smtp.gmail.com';
    int smtpPort = 465;
    String smtpUserName = 'mygmail@gmail.com';
    String smtpPassword = '**********';

    final smtpServer = SmtpServer(
      smtpServerName,
      port: smtpPort,
      ssl: true,
      ignoreBadCertificate: false,
      allowInsecure: false,
      username: smtpUserName,
      password: smtpPassword,
    );

    final message = Message()
      ..from = Address(emailFrom, emailFrom)
      ..recipients.add(emailTo)
      ..subject = emailSubject
      ..html = emailBody;

    try {
      final sendReport = await send(message, smtpServer);
      print('Message sent: ' + sendReport.toString());
    } on MailerException catch (e) {
      print('Message not sent.');
      for (var p in e.problems) {
        print('Problem: ${p.code}: ${p.msg}');
      }
    }
  }

更新:当手机连接到 WiFi 时,电子邮件会发送。 现在在我看来,运营商正在阻止电子邮件。 我的运营商是 AT&T。注意:我尝试过端口 25,465 和 587。

另一个更新:我开始在数据库中记录错误。 当连接到 Wifi 时,一切都很好。 断开 Wifi 时,记录的错误消息是“用户名/密码/凭据不正确”。

那么,为什么 Wifi 的凭据很好,但与 Wifi 断开连接时却无效? 注意:无论有没有 Wifi,我所做的所有 Web 服务调用都可以正常工作。

【问题讨论】:

  • 你添加了 吗?
  • 是的,该权限已经存在于所有三个 AndroidManifest.xml 文件中。 src/debug/AndroidManifest.xml src/main/AndroidManifest.xml 和 src/profile/AndroidManifest.xml。
  • 我还调用了在模拟器和手机中都能正常工作的网络服务。

标签: flutter email smtp credentials


【解决方案1】:

这很可能是由于您没有在 android\app\src\main\AndroidManifest.xml 的主 AndroidManifest.xml 文件中添加 Internet 权限。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.new_app">
    <!-- Add the following line
    -->
    <uses-permission android:name="android.permission.INTERNET"/>
</manifest>

电子邮件在您的模拟器上正常工作的原因是因为在您的模拟器上运行应用程序时默认使用的调试和配置文件清单中的颤振添加了互联网权限

【讨论】:

  • 这是我的第一个想法,我已经在他下面的每个 src/debug/AndroidManifest.xml src 中拥有了这个权限 /main/AndroidManifest.xml 和 src/profile/AndroidManifest.xml.
  • 我还调用了在模拟器和手机中都可以正常工作的网络服务。
猜你喜欢
  • 2023-03-09
  • 2011-07-30
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多