搜尋套件、儲存庫與 APP 分類

套件詳情v2.0.0

mailto

用於在您的 Flutter 應用中建立 mailto 鏈結的簡單 Dart 套件

AndroidiOSWebmacOSWindowsLinux
近 30 天下載
2.9萬
喜歡數
139
Pub 分數
160

安裝套件

flutter pub add mailto

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

mailto 套件是一個簡單的 Dart 庫,可讓 Flutter 開發者產生 mailto 鏈結,直接從應用程式中傳送電子郵件。它支援所有主要平台,包括 Android、iOS、Web、macOS、Windows 和 Linux。該套件提供一個易於使用的 API,可用來建構帶有預設收件人、主旨、內文及其他參數的電子郵件鏈結。非常適合用於聯絡表單、支援按鈕或任何需要郵件整合而無需外部相依性的功能。透過自動處理 URL 編碼與格式化,確保跨平台行為一致。

適用情境

  • 建立聯絡表單
  • 添加支援按鈕
  • 產生電子郵件邀請
  • 與使用者反饋系統整合
  • 簡化電子郵件分享

主要特色

  • 輕鬆產生 mailto 連結
  • 跨平台相容性
  • 支援 subject 和 body 參數
  • 自動URL編碼
  • 最小依賴開銷

適合對象

  • 簡單的電子郵件操作
  • 行動與網頁應用程式
  • 輕量級郵件整合
  • 尋求最小化設定的開發者

使用建議

  • 在某些平台上不處理電子郵件客戶端選擇
  • 僅限基本電子郵件功能
  • 電子郵件客戶端沒有內建的錯誤處理
  • 需要使用者設定電子郵件應用程式

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

mailto

Simple Dart package for creating mailto links in your Flutter and Dart apps

The mailto package helps you build mailto links and provides you with an idiomatic Dart interface that:

  • supports one or many to, cc, and bcc fields
  • supports custom body and subject for the emails
  • encodes every value for your correctly
  • is blazingly fast ⚡️😜

smaho-engineering/mailto

Build Status Code coverage

mailto GitHub Stars Count

Important links

Usage

You may want to launch the email client on your user's phone with certain fields pre-filled. For Flutter apps, it's recommended to use the url_launcher package for launching the links you create with the mailto package.

import 'package:mailto/mailto.dart';
// For Flutter applications, you'll most likely want to use
// the url_launcher package.
import 'package:url_launcher/url_launcher.dart';

// ...somewhere in your Flutter app...
launchMailto() async {
  final mailtoLink = Mailto(
    to: ['to@example.com'],
    cc: ['cc1@example.com', 'cc2@example.com'],
    subject: 'mailto example subject',
    body: 'mailto example body',
  );
  // Convert the Mailto instance into a string.
  // Use either Dart's string interpolation
  // or the toString() method.
  await launch('$mailtoLink');
}
Validation

The package provides a simple validation function. You could use this function in an assert to catch issues in development mode.

The package doesn't validate automatically, so either use the validation function or make sure that the parameters you use are correct.

Mailto.validateParameters(
  // New lines are NOT supported in subject lines
  subject: 'new lines in subject \n FTW',
  // What does this even mean?
  cc: ['\n\n\n', ''],
);

Known limitations of mailto URIs

I tested the package manually in Flutter apps on iOS and Android (Gmail, FastMail, Yahoo email client), and in the browser on macOS, and the package has an extensive test suite that incorporates many examples from the RFC 6068 - The 'mailto' URI Scheme document.

Unfortunately, each client handle mailto links differently: Gmail does not add line-breaks in the message body, FastMail skips the bcc, Yahoo is not able to handle encoded values in subject and body, and these are only the three clients I tested. The iOS email client seems to handle everything well, so 🎸🤘🎉.

The package might also not work if the resulting mailto links are extremely long. I don't know the exact character count where the links fail, but I'd try to keep things under 1000 characters.

Important: Make sure you understand these limitations before you decide to incorporate mailto links in your app: letting users open their email clients with pre-filled values is a quick and easy way to let your users get in touch with you with extremely little development effort. At the same time, you need to keep in mind that it's very unlikely that these links are going to work consistently for all of your users.

If you need something bullet-proof, this package is not the right tool for solving your problem, so please consider alternative solutions (e.g. Flutter forms and a working backend).

In case you find potential improvements to the package, please create a pull request or let's discuss it in an issue. I might not merge all pull requests, especially changes that improve things for one client, but makes it worse for others. We consider the iOS mail app and Gmail on Android the two most important mail clients.

Examples

You'll find runnable, great examples on the project's GitHub repository in the /example folder.

Flutter example app
  1. Clone the repository
  2. Change directory to cd example/flutter
  3. flutter run and wait for the app to start
  4. You can fill out the forms with your own input or click the "Surprise me" button to see how your mail client handles tricky input
HTTP server serving an HTML web page with a mailto link

The mailto package works in any Dart program: be it Flutter, AngularDart, or on the server.

import 'dart:io';

import 'package:mailto/mailto.dart';

Future<void> main() async { 
  final mailto = Mailto(
    to: [
      'example@example.com',
      'ejemplo@ejemplo.com',
    ],
    cc: [
      'percentage%100@example.com',
      'QuestionMark?address@example.com',
    ],
    bcc: [
      'Mike&family@example.org',
    ],
    subject: 'Let\'s drink a "café"! ☕️ 2+2=4 #coffeeAndMath',
    body:
        'Hello this if the first line!\n\nNew line with some special characters őúóüűáéèßáñ\nEmoji: 🤪💙👍',
  );

  final server = await HttpServer.bind(InternetAddress.loopbackIPv4, 3000);
  String renderHtml(Mailto mailto) => '''<html><head><title>mailto example</title></head><body><a href="$mailto">Open mail client</a></body></html>''';
  await for (HttpRequest request in server) {
    request.response
      ..statusCode = HttpStatus.ok
      ..headers.contentType = ContentType.html
      ..write(renderHtml(mailto));
    await request.response.close();
  }
}
  1. Clone the repository
  2. Change directory to cd example/http_server
  3. Start HTTP server dart main.dart
  4. Open your browser and visit localhost:3000
  5. Click on the link
  6. If you have an email client installed on your computer, this client will be opened when you click the link on the HTML page.
Screenshots
mailto demo: Dart server HTML mailto demo: MacOS email client

所屬分類

原始碼儲存庫

使用此套件的專案