Flutter邮件发送插件dart_mailgun的使用

Flutter邮件发送插件dart_mailgun的使用

dart-mailgun 是一个用Dart编写的用于与Mailgun API交互的客户端。本文将介绍如何在Flutter项目中使用此插件来发送邮件。

功能

  • 支持发送带任何参数的消息

开始使用

Pubspec

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

dependencies:
  dart_mailgun: ^1.0.3

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

初始化客户端

你可以选择默认主机 (api.mailgun.net) 或者欧盟主机 (api.eu.mailgun.net)。

默认主机
import 'package:dart_mailgun/client.dart';

var client = MailgunClient(domain: "my-mailgun-domain", apiKey: "my-mailgun-api-key");
欧盟主机
import 'package:dart_mailgun/client.dart';

var client = MailgunClient.eu(domain: "my-mailgun-domain", apiKey: "my-mailgun-api-key");

发送消息

消息通过 [MessageClient] 发送,该类预先配置在 [MailgunClient.message] 下。

要发送消息,你需要通过 [MessageParams] 配置参数。它接受所有在Mailgun API文档中列出的参数,并且还会处理传递参数到 [http.MultipartRequest] 对象。

实际的邮件内容存储在 [MessageParams.content] 中,是一个 [MessageContent] 实例,可以通过以下构造函数进行配置:

  • [MessageContent.text] - 将内容添加到 request.fields['text']
  • [MessageContent.html] - 将内容添加到 request.fields['html']
  • [MessageContent.template] - 使用配置的模板发送邮件,有两个参数:模板名称和变量映射表
示例
文本格式
var messageClient = client.message;
var params = MessageParams(
  from: 'from@example.com',
  to: ['to@example.com'],
  subject: '邮件标题',
  content: MessageContent.text('你好,这是一封测试邮件。'),
);
var response = await messageClient.send(params);
HTML格式
var messageClient = client.message;
var params = MessageParams(
  from: 'from@example.com',
  to: ['to@example.com'],
  subject: '邮件标题',
  content: MessageContent.html('<h1>你好</h1>'),
);
var response = await messageClient.send(params);
模板格式
var messageClient = client.message;
var params = MessageParams(
  from: 'from@example.com',
  to: ['to@example.com'],
  subject: '邮件标题',
  content: MessageContent.template('mytemplate', {'var1': 'val1'}),
);
var response = await messageClient.send(params);

[MessageParams] 还可以接受附件列表,类型为 [io.File] 对象:

var messageClient = client.message;
var params = MessageParams(
  from: 'from@example.com',
  to: ['to@example.com'],
  subject: '邮件标题',
  content: MessageContent.text('你好,这是一封测试邮件。'),
  attachments: [File('$path/myfile.txt')],
);
var response = await messageClient.send(params);

如果找不到所需的参数,可能可以在 [MessageParams.options] 下找到,类型为 [MessageOptions]

var params = MessageParams(
  from: 'from@example.com',
  to: ['to@example.com'],
  subject: '邮件标题',
  content: MessageContent.text('你好,这是一封测试邮件。'),
  options: MessageOptions(
    tracking: true,
    requireTLS: false,
    customHeaders: {
      'My-Header': 'myheadervalue'
    },
    dkim: false,
    testMode: true
  ),
);

[MessageOptions] 会自动解析 [MessageOptions.customHeaders] 的键到 h:X-$key,并且 [MessageOptions.customVars]v:$key,所以除非你想手动添加前缀,否则不需要包含前缀。

响应

来自任何客户端的响应都是 [Response] 类的实例。

响应包含两个方法:

  • [Response.ok] 返回一个布尔值,指示响应是否成功
  • [Response.status] 返回一个 [ResponseStatus] 实例,其中包含状态码 [ResponseStatus.code] 和原因短语 [ResponseStatus.reason]

你也可以直接从 [Response.statusCode][Response.reasonPhrase] 分别访问这些属性。

正文位于 [Response.body] 中。它将文本响应和JSON响应解析为 [Map<String, String>],并支持 [http.Response][http.StreamedResponse][Response.body] 返回一个 [Future<Map<String, dynamic>>] 以便能够读取 [http.StreamedResponse] 的正文中的字节。

文本正文添加在 Response.body['message'] 下。

var response = await client.send(params);
if (!response.ok()) {
  // 处理错误
  print(response.reasonPhrase);
} else {
  var body = await response.body;
  print(body['message']);
  // 处理结果
}

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

1 回复

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


当然,下面是一个关于如何在Flutter应用中使用dart_mailgun插件来发送邮件的示例代码。dart_mailgun是一个用于与Mailgun API进行交互的Flutter插件,可以用来发送电子邮件。

首先,确保你已经在pubspec.yaml文件中添加了dart_mailgun依赖:

dependencies:
  flutter:
    sdk: flutter
  dart_mailgun: ^x.y.z  # 请替换为最新版本号

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

接下来,你需要设置Mailgun API密钥和域名。这些敏感信息通常存储在环境变量或安全的配置文件中,但为了简化示例,这里将直接在代码中硬编码(请注意,在生产环境中应避免这种做法)。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Mailgun Email Sender'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: _sendEmail,
            child: Text('Send Email'),
          ),
        ),
      ),
    );
  }

  Future<void> _sendEmail() async {
    // Mailgun API key and domain
    final String apiKey = 'your_api_key_here'; // 请替换为你的Mailgun API密钥
    final String domain = 'your_domain_here.com'; // 请替换为你的Mailgun域名

    // Email details
    final String from = 'Excited User <mailgun@your_domain_here.com>';
    final String to = 'test@example.com';
    final String subject = 'Hello';
    final String text = 'Testing some Mailgun awesomeness!';
    final String html = '<html>Inline image here: <img src="cid:unique_id"></html>';

    // Create Mailgun client
    final mailgunClient = MailgunClient(apiKey: apiKey, domain: domain);

    // Prepare email message
    final message = Message(
      from: from,
      to: [to],
      subject: subject,
      text: text,
      html: html,
    );

    try {
      // Send email
      final response = await mailgunClient.send(message);
      print('Email sent successfully: ${response.body}');
    } catch (e) {
      print('Failed to send email: $e');
    }
  }
}

在这个示例中,我们定义了一个简单的Flutter应用,其中包含一个按钮。当用户点击按钮时,会调用_sendEmail函数来发送电子邮件。

注意:

  1. 你需要将your_api_key_here替换为你的Mailgun API密钥,将your_domain_here.com替换为你的Mailgun域名。
  2. 邮件的from字段需要是你在Mailgun上验证过的邮箱地址。
  3. html字段中的<img src="cid:unique_id">是一个占位符,用于内联图像。如果你需要发送带附件或内联图像的邮件,需要进一步配置Message对象,包括添加附件和设置MIME类型等。

这个示例展示了如何使用dart_mailgun插件在Flutter应用中发送简单的文本和HTML邮件。根据你的需求,你可以进一步扩展和定制邮件内容。

回到顶部