Flutter邮件发送功能插件enough_mail_flutter的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter邮件发送功能插件enough_mail_flutter的使用

整体介绍

enough_mail_flutter 是一个基于 enough_mail 的的 Flutter 插件,用于创建基于电子邮件的应用程序。 它包含两个主要的 widget:MimeMessageViewerMimeMessageDownloader. 这些 widget 可以用来显示和下载电子邮件内容。

使用说明

MimeMessageViewer 使用

使用 MimeMessageViewer 非常简单:

import 'package:enough_mail/enough_mail.dart';
import 'package:enough_mail_flutter/enough_mail_flutter.dart';

Widget build(MimeMessage mimeMessage) {
  return MimeMessageViewer(
      mimeMessage: mimeMessage,
      blockExternalImages: false,
      mailtoDelegate: handleMailto,
    );
}

Future handleMailto(Uri mailto, MimeMessage mimeMessage) {
    final messageBuilder = 
        MessageBuilder.prepareMailtoBasedMessage(mailto, MyAccount.instance.fromAddress);
    return locator<NavigationService>()
        .push(Routes.mailCompose, arguments: messageBuilder);
}
MimeMessageDownloader 使用

MimeMessageDownloader 在需要时会先下载消息内容,然后使用 MimeMessageViewer 来显示内容。你可以指定大多数 MimeMessageViewer 的选项也可以在 MimeMessageDownloader 上设置。更多特定配置选项请参考 API 文档。

Widget buildViewerForMessage(MimeMessage mimeMessage, MailClient mailClient) =>
    MimeMessageDownloader(
      mimeMessage: mimeMessage,
      mailClient: mailClient,
      onDownloaded: onMessageDownloaded,
      blockExternalImages: false,
      markAsSeen: true,
      mailtoDelegate: handleMailto,
    );

void onMessageDownloaded(MimeMessage mimeMessage) {
  // 更新其他显示内容,例如:
  // setState(() {});
}

安装

将以下依赖添加到你的 pubspec.yaml 文件中:

dependencies:
  enough_mail_flutter: ^2.0.0

最新的版本或 enough_mail_flutter 版本是 点击这里查看

注意:你可能需要为 xml 包设置依赖覆盖:

dependency_overrides:
  xml: ^6.0.1

特性与bug

特性请求和 bug 请提交到 issue tracker

许可证

该插件受 Mozilla Public License 2.0 许可。


示例代码

示例代码如下:

import 'package:enough_mail/enough_mail.dart';
import 'package:enough_mail_flutter/enough_mail_flutter.dart';
import 'package:flutter/widgets.dart';

/// Example implementation for displaying the message contents.
///
/// When required, the message contents are downloaded first.
///
/// The implementation assumes that the `size` and `envelope` information
/// have been previously downloaded,
///
/// e.g. using
/// `MailClient.fetchMessages(fetchPreference: FetchPreference.envelope)`.
Widget buildViewerForMessage(MimeMessage mimeMessage, MailClient mailClient) =>
    MimeMessageDownloader(
      mimeMessage: mimeMessage,
      mailClient: mailClient,
      onDownloaded: onMessageDownloaded,
      mailtoDelegate: handleMailto,
    );

// Example implementation of an optional onDownloaded delegate
void onMessageDownloaded(MimeMessage mimeMessage) {
  // update other things to show eg attachment view, e.g.:
  //setState(() {});
}

/// Example implementation for displaying a message for which the contents
/// already have been downloaded:
Widget buildViewerForDownloadedMessage(MimeMessage mimeMessage) =>
    MimeMessageViewer(
      mimeMessage: mimeMessage,
      mailtoDelegate: handleMailto,
    );

/// Example implementation for a mailto delegate
Future handleMailto(Uri mailto, MimeMessage mimeMessage) {
  // in reality you would get this from your account data
  const fromAddress = MailAddress('My Name', 'email@domain.com');
  final messageBuilder =
      MessageBuilder.prepareMailtoBasedMessage(mailto, fromAddress);
  // in reality navigate to compose screen, e.g.
  // return GoRouter.of(context)
  //     .pushNamed(Routes.mailCompose, extra: messageBuilder);
  // ignore: avoid_print
  print('generated message: ${messageBuilder.buildMimeMessage()}');

  return Future.value();
}

更多关于Flutter邮件发送功能插件enough_mail_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter邮件发送功能插件enough_mail_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用enough_mail_flutter插件来实现邮件发送功能的示例代码。请确保您已经正确设置了Flutter开发环境,并且已经在pubspec.yaml文件中添加了enough_mail_flutter依赖。

1. 添加依赖

首先,在您的pubspec.yaml文件中添加enough_mail_flutter依赖:

dependencies:
  flutter:
    sdk: flutter
  enough_mail_flutter: ^最新版本号  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

2. 导入插件

在您的Dart文件中导入enough_mail_flutter插件:

import 'package:enough_mail_flutter/enough_mail_flutter.dart';

3. 配置和使用邮件发送功能

下面是一个完整的示例,展示了如何使用enough_mail_flutter插件来发送邮件:

import 'package:flutter/material.dart';
import 'package:enough_mail_flutter/enough_mail_flutter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Email Sender',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: EmailSenderPage(),
    );
  }
}

class EmailSenderPage extends StatefulWidget {
  @override
  _EmailSenderPageState createState() => _EmailSenderPageState();
}

class _EmailSenderPageState extends State<EmailSenderPage> {
  final TextEditingController _recipientController = TextEditingController();
  final TextEditingController _subjectController = TextEditingController();
  final TextEditingController _bodyController = TextEditingController();

  void _sendEmail() async {
    String recipient = _recipientController.text;
    String subject = _subjectController.text;
    String body = _bodyController.text;

    if (recipient.isEmpty || subject.isEmpty || body.isEmpty) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Please fill in all fields')),
      );
      return;
    }

    try {
      bool result = await EnoughMailFlutter.sendEmail(
        smtpServer: 'smtp.example.com', // 替换为您的SMTP服务器地址
        smtpPort: 587, // 替换为您的SMTP服务器端口
        username: 'your-email@example.com', // 替换为您的SMTP用户名
        password: 'your-email-password', // 替换为您的SMTP密码
        from: 'your-email@example.com', // 发件人邮箱
        to: [recipient],
        subject: subject,
        body: body,
        isHTML: false, // 根据需要设置为true或false
      );

      if (result) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Email sent successfully')),
        );
      } else {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Failed to send email')),
        );
      }
    } catch (e) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Error: ${e.message}')),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Send Email'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            TextField(
              controller: _recipientController,
              decoration: InputDecoration(labelText: 'Recipient'),
            ),
            SizedBox(height: 16),
            TextField(
              controller: _subjectController,
              decoration: InputDecoration(labelText: 'Subject'),
            ),
            SizedBox(height: 16),
            TextField(
              controller: _bodyController,
              maxLines: 10,
              decoration: InputDecoration(labelText: 'Body'),
            ),
            SizedBox(height: 24),
            ElevatedButton(
              onPressed: _sendEmail,
              child: Text('Send Email'),
            ),
          ],
        ),
      ),
    );
  }
}

注意事项

  1. SMTP配置:请确保SMTP服务器地址、端口、用户名和密码等信息是正确的。这些信息通常是您电子邮件服务提供商提供的。
  2. 安全性:不要在代码中硬编码敏感信息,如电子邮件密码。考虑使用环境变量或安全存储服务来管理这些信息。
  3. 权限:某些平台(如Android和iOS)可能需要额外的权限来发送电子邮件。确保您已正确配置这些权限。

这个示例代码提供了一个基本的邮件发送界面,用户可以在其中输入收件人、主题和邮件正文,然后点击发送按钮来发送邮件。希望这对您有所帮助!

回到顶部