Mail app for iOS, Android and hopefully more platforms in the future. Based on Flutter.

Overview

Codename: Maily

Mail app for iOS, Android and hopefully more platforms in the future. Developed in Flutter.

Test Maily

You can test an early access version of Maily today:

Screenshots Android

Features

  • POP and IMAP service providers are supported, though POP accounts are not tested at this moment
  • Multiple account support
  • Unified account - when you have at least 2 accounts, a unified account will show up automatically - with unified inbox, sent, trash, etc
  • Mail management: delete, mark as read/unread
  • Unsubscribe from newslettters easily
  • View attachments in app - photos, PDFs, video and audio files
  • Compose messages: compose new messages and reply to/forward mails with WYSIWG editor
  • Save and continue draft messages
  • Attach photo-, audio-, video- or generic files. Attach your current location.
  • Swipe right to left to delete and swipe left to right to mark as read/unread
  • Personalizae swipe actions
  • Optionally you can block external images when viewing mails
  • You can specify aliases and check for + alias support by your mail provider
  • Swipe left or right in the message details to view the next/previous message
  • Experimental 'stack' display of messages
  • Share received attachments to other apps and forward attachments to a new message
  • Share files to Maily
  • Search for messages, including universal search
  • Delete all messages in trash and junk folders or in a search result
  • Archive messages
  • Mark messages as junk / not junk
  • Forward messages as attachments - or forward only the attachments of the selected messages
  • Select several messages at once with a long press
  • Localized in English and German
  • Supports dark and light theme and you can also change the color scheme.
  • Shows thread information and allows to access the full thread when the mail service supports the THREAD IMAP extension.
  • Add animated GIFs and stickers (powered by Giphy)
  • Display attached messages
  • Request and send read receipts
  • Extensible by email service providers, companies and developers

Miss a feature or found a bug?

Please file feature requests and bugs at the issue tracker.

Contributions and Setup

Every contribution is welcome. Since the project is licensed under the GPL, signing the Contributor License Agreement is required.

This is how you contribute:

  • Fork the enough_mail_app project by pressing the fork button.
  • Clone your fork to your computer: git clone github.com/$your_username/enough_mail_app
  • Do your changes. When you are done, commit changes with git add -A and git commit.
  • Push changes to your personal repository: git push origin
  • Go to enough_mail_app and create a pull request.

When you have compile problems this is usually due to not getting the latest version from git. Call flutter pub upgrade to ensure that you are on the latest version of all referenced projects. Since translations are generated you can ignore all translation problems, just start the build, afterwards the localization compilation problems will be gone.

For some features you will need to add the relevant keys to assets/keys.txt, currently the following key is required:

License

enough_mail_app is licensed under the GNU Public License 3.0 "GPL". In a nutshell this means that you can play around as much as possible for private reasons, but that you need to publish your changes under the GPL, as soon as you the code commercially.

Related Projects

Check out these related projects:

Maily Logo

Comments
  • socket type plain seems to not working

    socket type plain seems to not working

    Hello, I am trying to add my own imap service to your app by adding a provider in lib/services/providers.dart

    all work good if i call my provider with a socketType: ssl in production But if i try to use it with a socketType plain for my local test, the code seems to force the ssl connection (upradeToSslSocket() from enoug_mail dependency) and i dont want to buy a certificate just for testing ^^ Can you help me on how to authorize a socketType: plain without a ssl certificate ? Here my providers :

    class NewTestProvider extends Provider {
      NewTestProvider ()
          : super(
                'newTest',
                'ipOfImapService',
                ClientConfig()
                  ..emailProviders = [
                    ConfigEmailProvider(
                      displayName: ' NewTestMail',
                      displayShortName: ' NewTest',
                      incomingServers: [
                        ServerConfig(
                          type: ServerType.imap,
                          hostname: 'ipOfImapService',
                          port: 143,
                          socketType: SocketType.plain,
                          authentication: Authentication.passwordCleartext,
                          usernameType: UsernameType.emailAddress,
                        )
                      ],
                      outgoingServers: [
                        ServerConfig(
                          type: ServerType.smtp,
                          hostname: 'ipOfImapService',
                          port: 25,
                          socketType: SocketType.plain,
                          authentication: Authentication.passwordCleartext,
                          usernameType: UsernameType.emailAddress,
                        )
                      ],
                    )
                  ],
                domains: ['test.local', 'easycrypt.io']);
    }
    
    bug 
    opened by Tzanou123 11
  • multi language translate to traditional chinese

    multi language translate to traditional chinese

    Hi all, I want to help add one more language to Maily. I had test and make some change of character in chinese, which it is work and can run in the android simulator. But after few hours of work, it can not compile again and run in the simulator. I get the following error message :

    Generating synthetic localizations package failed with 1 error:
    

    Exception: The following .arb file's locale could not be determined: D:\GitHub\enough_mail_app\enough_mail_app\lib/l10n\app_ct.arb Make sure that the locale is specified in the file's '@@locale' property or as part of the filename (e.g. file_en.arb)

    Does it mean I did not use the same standard code for chinese language? In my environment I use 'ct' for traditional chinese, 
    

    I had add app.ct.arb file in the "lib/l10n" directory and also add app_localizations_ct.dart file in the "flutter_gen/gen_l10n" directory. Also I has add and change some code in "app_localizations.dart" to support this language.

     If I'm working on a work way, please add the relate language in the project, Then I will translate the language file to chinese. If possible, I can help to translate it simplifies chinese and Traditonal chinese or some degree extend to Hong Kong and Taiwan style for Traditional Chinese
    
     Regards
    

    Terry Ho

    enhancement 
    opened by terryhcw 4
  • Bugfix/configuration of other email service fails

    Bugfix/configuration of other email service fails

    Currently setup of an "other email" account fails due to various bugs in the setup code. Furthermore autocorrection is enabled (at least on iOS) in fields like e-mail address or server name.

    I fixed the bugs preventing the successful registration of an "other email" service and disabled autocorrection for the input fields that do not need it.

    opened by tallinn1960 3
  • can't add an email account using the detailed configuration

    can't add an email account using the detailed configuration

    Hi,

    I was able to connect my gmail account without problems. But I can't add an account, where manual server configuration is necessary. When pressing the save button, nothing happens (also no error message).

    Thanks for all your work! Greetings, Sebastian

    bug 
    opened by sebastianfastert 3
  • conflicting deps on enough_platform_widgets package

    conflicting deps on enough_platform_widgets package

    Hi I grabbed current main branch but this initia pub get fails as it seems there is a version conflict between the direct dep on enough_platform_widgets and the transitive dep from enough_html_editor:

    [enough_mail_app] flutter pub get
    Running "flutter pub get" in enough_mail_app...                 
    Because enough_mail_app depends on enough_html_editor from git which depends on enough_platform_widgets ^0.3.0, enough_platform_widgets from hosted is required.
    So, because enough_mail_app depends on enough_platform_widgets from git, version solving failed.
    pub get failed (1; So, because enough_mail_app depends on enough_platform_widgets from git, version solving failed.)
    
    bug 
    opened by maks 2
  • Dependencies errors

    Dependencies errors

    Hello,

    When i try to install this repo on local then runing flutter pub upgrade i get this following error :

    Because enough_mail_app depends on enough_giphy_flutter from git which depends on enough_platform_widgets ^0.2.1, enough_platform_widgets from hosted is required.
    So, because enough_mail_app depends on enough_platform_widgets from git, version solving failed.
    pub get failed (1; So, because enough_mail_app depends on enough_platform_widgets from git, version solving failed.)
    exit code 1
    

    Any idea ?

    bug 
    opened by Tzanou123 2
  • Messages that contain a specific word

    Messages that contain a specific word

    Hi, I'm using the high level API, and I want to only retrieve messages that contain a particular word(TEST), but nothing seems to be working. It shows me all the messages that exist in the email.

    code: final mailboxes = await mailClient.listMailboxesAsTree(createIntermediate: false); print(mailboxes); await mailClient.selectInbox(); await mailClient.searchMessages(MailSearch("TEST",SearchQueryType.allTextHeaders)); final messages = await mailClient.fetchMessages(count: 20); for (final msg in messages) { printMessage(msg); }

    Thank you!

    opened by barilki 2
  • Pub getting failed for latest commit

    Pub getting failed for latest commit

    Because enough_mail_app depends on enough_mail_flutter from git which depends on enough_media ^0.2.0, enough_media from hosted is required. So, because enough_mail_app depends on enough_media from git, version solving failed. pub upgrade failed (1; So, because enough_mail_app depends on enough_media from git, version solving failed.)

    bug 
    opened by RaviGaruda 2
  • Mail not moved to sent MailBox after mail sent if using SmtpClient.

    Mail not moved to sent MailBox after mail sent if using SmtpClient.

    Bellow formet I have userd:

    Future<void> smtpExample() async {
      final client = SmtpClient('enough.de', isLogEnabled: true);
      try {
        await client.connectToServer(smtpServerHost, smtpServerPort,
            isSecure: isSmtpServerSecure);
        await client.ehlo();
        await client.login('user.name', 'password');
        final builder = MessageBuilder.prepareMultipartAlternativeMessage();
        builder.from = [MailAddress('My name', '[email protected]')];
        builder.to = [MailAddress('Your name', '[email protected]')];
        builder.subject = 'My first message';
        builder.addTextPlain('hello world.');
        builder.addTextHtml('<p>hello <b>world</b></p>');
        final mimeMessage = builder.buildMimeMessage();
        final sendResponse = await client.sendMessage(mimeMessage);
        print('message sent: ${sendResponse.isOkStatus}');
      } on SmtpException catch (e) {
        print('SMTP failed with $e');
      }
    }
    
    invalid 
    opened by ShimantoKabir 1
  • Removing Email Accounts

    Removing Email Accounts

    When you remove an account, the removed account still shows within the account list. The account should be popped from the column ListView, and then the ListView should be reloaded.

    bug 
    opened by python4lyfe 1
  • Secure app with lockscreen

    Secure app with lockscreen

    Let the user decide in settings to secure the app with a lockscreen

    https://pub.dev/packages/secure_application seems to be a viable solution for this.

    Take into account that the app can be left when retrieving external content, e.g. when attaching a camera photo.

    enhancement 
    opened by robert-virkus 1
  • Error when run code

    Error when run code

    I got this error when i try to download and run code, Please tell me how to fix

    ../flutter/.pub-cache/hosted/pub.dartlang.org/introduction_screen-3.0.2/lib/src/introduction_screen.dart:434:35: Error: The method 'elementAtOrNull' is defined in multiple extensions for 'List<ScrollController?>' and neither is more specific.

    • 'List' is from 'dart:core'.
    • 'ScrollController' is from 'package:flutter/src/widgets/scroll_controller.dart' ('../flutter/packages/flutter/lib/src/widgets/scroll_controller.dart'). Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope. ?.elementAtOrNull(index), ^^^^^^^^^^^^^^^ ../flutter/.pub-cache/hosted/pub.dartlang.org/collection-1.17.0/lib/src/list_extensions.dart:271:6: Context: This is one of the extension members. E? elementAtOrNull(int index) => (index < length) ? this[index] : null; ^^^^^^^^^^^^^^^ ../flutter/.pub-cache/hosted/pub.dartlang.org/introduction_screen-3.0.2/lib/src/helper.dart:6:6: Context: This is one of the extension members. T? elementAtOrNull(int index) { ^^^^^^^^^^^^^^^
    opened by nvThanh 1
  • App Background Notifications Not Working

    App Background Notifications Not Working

    Hello,

    If the application screen is open, all notifications work fine, but notifications do not work when the application is closed or the device is locked.

    I have accessed the following issues but haven't found a solution yet:

    https://github.com/MaikuB/flutter_local_notifications/issues/1712 https://github.com/transistorsoft/flutter_background_fetch/issues/288 https://github.com/transistorsoft/flutter_background_fetch/issues/285 https://github.com/transistorsoft/flutter_background_fetch/issues/282

    The same issue exists in your current production application.

    Many thanks in advance for your help.

    opened by muhyal 3
  • How can I change the translation strings included in the iOS system?

    How can I change the translation strings included in the iOS system?

    I want to make changes to an application (Translation) but I'm only having trouble with these three areas. There is no file containing these strings throughout the project. I couldn't find any documentation about my problem.

    I couldn't find fields that contain:

    • Cancel
    • Continue
    • accounts

    Screenshots:

    2022-09-06_09-51-20 2022-09-06_09-52-08 2022-09-06_09-57-22

    I've looked at these resources, but this is invalid for Xcode 13.

    I configured the Turkish language without any problems, only these 3 fields remained without translation.

    Thanks.

    opened by muhyal 0
  • widget lifecycle error on Linux

    widget lifecycle error on Linux

    Sorry this is not a great bug report.

    The error happens "a little while" after opening an email with some simple html content (a Github issue comment notification email) and it being displayed (successfully) displayed, after I hacked mime_messasge_viewer.dart to use HtmlWidget(htmlData); (from flutter_widget_from_html pkg) instead of a Webview (at line 300).

    Given the nature of this error, I suspect that this maybe an issue with a Flutter SDK class on Linux but I thought I'd file it here as it does seem a bit strange. First off I can't really tell how Tooltip("Show menu") is related to MailAddressChip and I can't actually find where the code for that Tooltip widget is - I'm guessing it comes from another dependent pkg?

    flutter: manichord.com S: + idling
    
    ════════ Exception caught by widgets library ═══════════════════════════════════
    The following assertion was thrown building Tooltip("Show menu", dependencies: [_LocalizationsScope-[GlobalKey#f5b23], _InheritedTheme, _EffectiveTickerMode], state: _TooltipState#469dd(ticker inactive)):
    A RenderObject was still attached when attempting to deactivate its RenderObjectElement: RenderMouseRegion#b8734 relayoutBoundary=up7
    'package:flutter/src/widgets/framework.dart':
    package:flutter/…/widgets/framework.dart:1
    Failed assertion: line 5730 pos 7: '!renderObject.attached'
    
    Either the assertion indicates an error in the framework itself, or we should provide substantially more information in this error message to help you determine and fix the underlying cause.
    In either case, please report this assertion by filing a bug on GitHub:
      https://github.com/flutter/flutter/issues/new?template=2_bug.md
    
    The relevant error-causing widget was
    PlatformPopupMenuButton<_AddressAction>
    lib/widgets/mail_address_chip.dart:29
    When the exception was thrown, this was the stack
    #2      RenderObjectElement.deactivate
    package:flutter/…/widgets/framework.dart:5730
    #3      _InactiveElements._deactivateRecursively
    package:flutter/…/widgets/framework.dart:1901
    #4      ComponentElement.visitChildren
    package:flutter/…/widgets/framework.dart:4642
    #5      _InactiveElements._deactivateRecursively
    package:flutter/…/widgets/framework.dart:1903
    #6      _InactiveElements.add
    package:flutter/…/widgets/framework.dart:1915
    #7      Element.deactivateChild
    package:flutter/…/widgets/framework.dart:3667
    #8      Element.updateChild
    package:flutter/…/widgets/framework.dart:3378
    #9      ComponentElement.performRebuild
    package:flutter/…/widgets/framework.dart:4613
    #10     StatefulElement.performRebuild
    package:flutter/…/widgets/framework.dart:4763
    #11     Element.rebuild
    package:flutter/…/widgets/framework.dart:4311
    #12     BuildOwner.buildScope
    package:flutter/…/widgets/framework.dart:2578
    #13     WidgetsBinding.drawFrame
    package:flutter/…/widgets/binding.dart:882
    #14     RendererBinding._handlePersistentFrameCallback
    package:flutter/…/rendering/binding.dart:363
    #15     SchedulerBinding._invokeFrameCallback
    package:flutter/…/scheduler/binding.dart:1145
    #16     SchedulerBinding.handleDrawFrame
    package:flutter/…/scheduler/binding.dart:1082
    #17     SchedulerBinding._handleDrawFrame
    package:flutter/…/scheduler/binding.dart:996
    #21     _invoke (dart:ui/hooks.dart:150:10)
    #22     PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:270:5)
    #23     _drawFrame (dart:ui/hooks.dart:114:31)
    (elided 5 frames from class _AssertionError and dart:async)
    ════════════════════════════════════════════════════════════════════════════════
    
    ════════ Exception caught by widgets library ═══════════════════════════════════
    A RenderObject was still attached when attempting to deactivate its RenderObjectElement: RenderMouseRegion#2cd7f relayoutBoundary=up7
    'package:flutter/src/widgets/framework.dart':
    package:flutter/…/widgets/framework.dart:1
    Failed assertion: line 5730 pos 7: '!renderObject.attached'
    
    The relevant error-causing widget was
    PlatformPopupMenuButton<_AddressAction>
    lib/widgets/mail_address_chip.dart:29
    ════════════════════════════════════════════════════════════════════════════════
    
    bug desktop 
    opened by maks 2
Owner
Enough Software GmbH & Co. KG
Enough Software GmbH & Co. KG
A future based dart package for the NLT (New Living Translation) API.

NLT API Bible for Dart A future based dart package for the NLT API from Tyndale which can be used to fetch NLT and KJV bible passages. This package re

Ariel Magbanua 3 Nov 17, 2022
Flutterbodydetection - A flutter plugin that uses MLKit on iOS/Android platforms to enable body pose and mask detection using Pose Detection and Selfie Segmentation APIs for both static images and live camera stream.

body_detection A flutter plugin that uses MLKit on iOS/Android platforms to enable body pose and mask detection using Pose Detection and Selfie Segmen

null 16 Oct 27, 2022
This is the code for the POAPin app, which is written in Flutter and currently supports iOS, Android, and Web platforms.

POAPin This is the code for the POAPin app, which is written in Flutter and currently supports iOS, Android, and Web platforms. ?? Get the app Platfor

Glory Lab 17 Nov 7, 2022
A Video Player For Vimeo Videos in Flutter. This plugin allows us to play video from Vimeo and it supports Android and iOS platforms.

vimeo_video_player A Video Player For Vimeo Videos in Flutter. This plugin allow us to play video from vimeo and it's supports Android and iOS platfor

MindInventory 25 Nov 22, 2022
Album Image is based in photo_manager package and has the same concept as image_picker but with a more attractive interface to choose an image or video from the device gallery, whether it is Android or iOS

Album Image is based in photo_manager package and has the same concept as image_picker but with a more attractive interface to choose an image or vide

Phuong Vu 2 Oct 13, 2022
This is an application that uses the Flutter framework, SQFLite as a database to record blood pressure, blood sugar, BMI, or create medication reminders in multi mobile platforms You can run this project on iOS, Android

This is an application that uses the Flutter framework, SQFLite as a database to record blood pressure, blood sugar, BMI, or create medication reminders in multi mobile platforms You can run this project on iOS, Android

null 13 Nov 14, 2022
Makes it possible to safely execute and retry a Future inside a StatelessWidget

futuristic Makes it possible to safely execute and retry a Future inside a StatelessWidget. See the Mainstream package for a similar API for working w

Martin Rybak 28 Sep 15, 2022
A basic login/register screen that can be used as a template for future Flutter projects.

A Flutter / Firebase login screen A simple flutter/dart based login-screen that connects with Firebase Auth to enable users to sign-in/up with Email o

Kim Andre Langholz 143 Sep 23, 2022
A Simple Password Manager based on Flutter for all platforms

JADLOC. A beautiful, encrypted password manager, built using Flutter and Dart. Features Fully encrypted using XSalsa20-Poly1305 (including the databas

Japan Gor 4 Jul 12, 2022
WooCommerce App template that uses Flutter. Integrated to work with WooCommerce stores, connect and create an IOS and Android app from Flutter for IOS and Android

WooCommerce App: Label StoreMax Label StoreMax - v5.3.1 Official WooSignal WooCommerce App About Label StoreMax Label StoreMax is an App Template for

WooSignal 307 Nov 22, 2022
Weather app using Bloc architecture pattern & generic HTTP client with interface implementation and much more for more detail read Readme

weather Weather application for current weather, hourly forecast for 48 hours, Daily forecast for 7 days and national weather alerts. How to Run Insta

Jibran Ahmed SiddiQui 9 Oct 29, 2022
More than 130+ pages in this beautiful app and more than 45 developers has contributed to it.

flutter-ui-nice ❤️ Star ❤️ the repo to support the project or ?? Follow Me.Thanks! Facebook Page Twitter Medium QQ Group Flutter Open NieBin Flutter O

Flutter开源社区 3.3k Nov 20, 2022
More than 130+ pages in this beautiful app and more than 45 developers has contributed to it.

flutter-ui-nice ❤️ Star ❤️ the repo to support the project or ?? Follow Me.Thanks! Facebook Page Twitter Medium QQ Group Flutter Open NieBin Flutter O

Flutter开源社区 3.3k Nov 23, 2022
An extended version of Flutter Colors with more swatches and more flexibility to generate your own custom swatch.

Colours An extended version of Flutter Colors with more swatches and more flexibility to generate your own custom swatch. Getting Started In your flut

Salman S 4 Nov 23, 2021
An easy-to-use flutter http network requests handler with more functionality than http but more simpler than dio.

network_requests An easy-to-use flutter http network requests handler with more functionality than http but more simpler than dio. Platform Supported

Coder_Manuel 2 Oct 25, 2022
News App developed with Flutter featuring beautiful UI, category-based news, story for faster news reading, inbuilt article viewer, share feature, and more.

Ariel News App developed with Flutter featuring beautiful UI, category-based news, story for faster news reading, inbuilt article viewer, share featur

Hash Studios 30 Nov 9, 2022
A dart library to get and set backgrounds on multiple GUI linux platforms

A Dart library for linux platforms to get and set backgrounds, which supports multiple desktop environments and window managers Features Can automatic

Hemish 4 Mar 26, 2022
Flutter Multi-platform allows developers to unleash their app to run on the wide variety of different platforms with little or no change.

Flutter Multi-platform sample Flutter Multi-platform allows developers to unleash their app to run on the wide variety of different platforms with lit

MindInventory 21 Apr 26, 2022