Flutter邮件发送器

8

我在Flutter表单中发送电子邮件时遇到了这个错误。

Unhandled Exception: PlatformException(UNAVAILABLE, defualt mail app not available, null)

class _MyAppState extends State<MyApp> {
  List<String> attachment = <String>[];
  TextEditingController _subjectController =
      TextEditingController(text: 'ct');
  TextEditingController _bodyController = TextEditingController(
      text: '''  a
  ''');
  final GlobalKey<ScaffoldState> _scafoldKey = GlobalKey<ScaffoldState>();
  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> send() async {
    // Platform messages may fail, so we use a try/catch PlatformException.
    final MailOptions mailOptions = MailOptions(
      body: 'Ro',
      subject: 'the Email Subject',
      recipients: ['rodrigo@houlak.com'],
      isHTML: true,

      attachments: [ 'path/to/image.png', ],
    );

    await FlutterMailer.send(mailOptions);

    String platformResponse;

    try {
      await FlutterMailer.send(mailOptions);
      platformResponse = 'success';
    } catch (error) {
      platformResponse = error.toString();
    }

    if (!mounted) return;
    _scafoldKey.currentState.showSnackBar(SnackBar(
      content: Text(platformResponse),
    ));
  }

如果你正在模拟器上尝试,它无论如何都不会起作用。 - Murat Aslan
3个回答

6
在AndroidManifest.xml中添加以下内容可以解决我的Android问题:
<application .... />
// add queries tag for mailto intent out side of application tag
<queries>
  <intent>
    <action android:name="android.intent.action.SENDTO" />
    <data android:scheme="mailto" />
  </intent>
</queries>

5
我在 iPhone 上遇到了同样的问题,原因是我没有设置 iOS 默认邮件应用程序。

0
  1. 确保 Android Gradle 插件高于 4.1.0,你可以在 android\build.gradle 文件中找到类似以下的内容:

    dependencies { classpath 'com.android.tools.build:gradle:4.1.1' "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.4' }

  2. 在你的 android/app/src/main/AndroidManifest.xml 文件中,在添加了 <uses-permission> 后面加入以下内容:

<queries> <intent> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> </intent> </queries>
  1. 运行 flutter clean
  2. 执行 flutter pub get,或者你可以直接运行你的代码,Flutter邮件发送包会在此之后为您工作,这个解决方案对我有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接