Sending emails directly from a Flutter app seems simple… until you realize there’s no official API to reliably open the user’s mail app across both Android and iOS. That’s why I built open_mail_launcher — a cross-platform Flutter plugin to handle this task with elegance and reliability.
Whether you’re building a feedback feature, account verification flow, or a simple “contact us” button, this package takes care of launching the right mail app — or gracefully falling back when none are installed.
✨ What Can It Do?
With open_mail_launcher, you can:
- 📱 Query installed email apps on both Android & iOS
- 💌 Compose emails with pre-filled
To,CC,BCC,Subject, andBody - 🧭 Launch the default email app or let the user choose from multiple
- 📎 Attach files (Android only)
- 🧩 Use a built-in picker UI when multiple options are available
🛠️ Quick Example
final emailContent = EmailContent(
to: ['contact@myapp.com'],
subject: 'Hello from Flutter!',
body: 'This is a message from your app user.',
);// Launch any installed email app
await OpenMailLauncher.openMailApp(emailContent: emailContent);If multiple mail apps are installed, you can use the built-in picker to let users choose:
MailApp? selectedApp = await OpenMailLauncher.showMailAppPicker(
context: context,
mailApps: result.options,
);🖼️ Built for Real Apps
Here’s what makes it production-ready:
- Fully async APIs for smooth integration
- Clean error handling (
OpenMailAppResult) - Optional fallback to native composer when no mail apps are found
- Works with all major clients: Gmail, Outlook, Yahoo, Spark, Superhuman, and more
📦 Try it Now
You can install the package from pub.dev → open_mail_launcher:
dependencies:
open_mail_launcher: ^0.1.0🤝 Contributions Welcome
This is an open-source effort. If you have suggestions, find bugs, or want to contribute — feel free to open an issue or PR on the GitHub repo. Let’s make this the go-to solution for mail launching in Flutter.
💬 Let Me Know What You Think
I’d love to hear your feedback! Are there specific features you’d like added? Or interesting use cases you’re solving with this?
Drop a comment or reach out on LinkedIn, and let’s connect 🚀