Giter VIP home page Giter VIP logo

imap_client's Introduction

imap_client

An interface to get emails via the imap protocol (version 4rev1)

This interface implements the IMAP protocol (version 4 rev 1) as described in rfc 3501. This package gives easy access to all commands and automatically analyzes responses.

Supported extensions:

  • RFC 2177: IMAP4 IDLE command

This package is made available under the GNU General Public License v3.0.

Usage

This example connects the client to an imap server:

import 'package:imap_client/imap_client.dart';

main() async {
  ImapClient client = new ImapClient();
  
  await client.connect("imap.gmail.com", 993, true);
}

All commands are async methods that can be awaited for. On completion, most return an enum ImapTaggedResponse, which can be either:

  • OK: success
  • NO: command was unsuccessful
  • BAD: command not accepted by the server

Sometimes, there are commands which have other return data, like fetch or list.

To select a folder, a simple call to getFolder() is sufficient:

import 'package:imap_client/imap_client.dart';

main() async {
  ImapClient client = new ImapClient();
  
  await client.connect("imap.gmail.com", 993, true);
  
  ImapFolder inbox = client.getFolder("inbox");
}

This ImapFolder instance allows for actions in this specific folder. Folders can only exist once per name, so another call to ImapClient.getFolder() with the same name will return the same ImapFolder instance! If an instance is no longer needed, it can be marked for garbage collection via ImapFolder.destroy(). This will free up some ram and should especially be considered when working with many folders.

There are two types of handlers that are highly suggested to be implemented:

ALERT handler:
void Function(String message)

The messages passed to this function are directly from the server and must be shown to the user (as defined in the protocol).

EXPUNGE handler:
void Function(int number)

This function receives message numbers of messages that have been deleted.

Both can be set directly via the client instance, either via client.expungeHandler = ... or client.alertHandler = ...

ImapFolder.store(), ImapFolder.fetch() and ImapFolder.copy() need messages to work with. Those messages can either be provided via the optional messageId parameter, or if ranges are needed, via the optional messageIdRanges. One of the two must always be given.

Ranges have the following format: start:end, whereas end can also be *, which matches the highest possible number as determined by the server. This means that 1:* would match every mail in this folder.

To use message uids instead of relative numbers, the optional parameter uid can be set to true. Please note that responses from the server will also use uids instead of relative numbers.

Example:

await inbox.fetch(["BODY"], messageIds: [1]);

Authentication

The last important thing would be logging in. There are three possible ways:

Preauth

Preauth means that the client is already registered, this might be because credentials were already submitted via the url on connect.

Login

The login command takes a username and password as parameters.

await client.login("username", "password");
Authenticate

The authenticate command is used for any other authentication mechanisms. It takes an ImapSaslMechanism object and logs in via the mechanism defined there. "login" and "plain" are both already implemented, a short walk through on how to create a custom mechanism can be found in the wiki.

await client.authenticate(new ImapPlainAuth("username", "password"));

Closing the connection

To close the connection, logout can either be called in a folder or the client itself.

Features and bugs

Feel free to contribute to this project.

If you find a bug or think of a new feature, but don't know how to fix/implement it, please open an issue.

If you fixed a bug or implemented a new feature, please send a pull request.

imap_client's People

Contributors

mathisgerdes avatar michaelspiss avatar t0mmar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

imap_client's Issues

Missing imap 4 rev 1 commands

Three commands are missing: subscribe, unsubscribe and lsub. Those need to be implemented for imap 4 rev 1 compatibility.

Error parsing mail with inline attachment

If i have a mail with inline image right in message body i received parsing error.

request:
await currentFolder.fetch(['BODYSTRUCTURE'], messageIds: [3218], uid: true);

Expected */+/TAG, but got [Word ImapWordType.parenOpen] (
#0      ImapCommand.run (package:imap_client/src/imap_command.dart:102:9)
<asynchronous suspension>
#1      ImapEngine.executeCommand (package:imap_client/src/imap_engine.dart:105:46)
<asynchronous suspension>
#2      _ImapCommandable.sendCommand (package:imap_client/src/imap_commandable.dart:39:20)
#3      ImapFolder.fetch (package:imap_client/src/imap_folder.dart:137:11)
<asynchronous suspension>
#4      _MyHomePageState.reassemble (package:flutter_app0/main.dart:80:35)
<asynchronous suspension>
#5      StatefulElement.reassemble (package:flutter/src/widgets/framework.dart:3933:11)
#6      Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:2650:13)
#7      SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4960:14)
#8      Element.reassemble (package:flutter/src/widgets/framework.dart:2649:5)
#9      Element.reasse<…>
flutter: [INFO] imap_client: S: * 139 FETCH (UID 3218 BODYSTRUCTURE ((("TEXT" "HTML" ("CHARSET" "utf-8") NIL NIL "8BIT" 292 6 NIL NIL NIL)("IMAGE" "PNG" ("NAME" "Screenshot 2019-06-25 at 8.35.12 AM.png") "<[email protected]>" NIL "BASE64" 4973752 NIL ("INLINE" ("FILENAME" "Screenshot 2019-06-25 at 8.35.12 AM.png")) NIL)("IMAGE" "PNG" ("NAME" "Screenshot 2019-06-24 at 5.05.55 PM.png") "<[email protected]>" NIL "BASE64" 478480 NIL ("INLINE" ("FILENAME" "Screenshot 2019-06
flutter: [INFO] imap_client: S: * 139 FETCH (UID 3218 BODYSTRUCTURE ((("TEXT" "HTML" ("CHARSET" "utf-8") NIL NIL "8BIT" 292 6 NIL NIL NIL)("IMAGE" "PNG" ("NAME" "Screenshot 2019-06-25 at 8.35.12 AM.png") "<[email protected]>" NIL "BASE64" 4973752 NIL ("INLINE" ("FILENAME" "Screenshot 2019-06-25 at 8.35.12 AM.png")) NIL)("IMAGE" "PNG" ("NAME" "Screenshot 2019-06-24 at 5.05.55 PM.png") "<[email protected]>" NIL "BASE64" 478480 NIL ("INLINE" ("FILENAME" "Screenshot 2019-06
flutter: [INFO] imap_client: S: * 139 FETCH (UID 3218 BODYSTRUCTURE ((("TEXT" "HTML" ("CHARSET" "utf-8") NIL NIL "8BIT" 292 6 NIL NIL NIL)("IMAGE" "PNG" ("NAME" "Screenshot 2019-06-25 at 8.35.12 AM.png") "<[email protected]>" NIL "BASE64" 4973752 NIL ("INLINE" ("FILENAME" "Screenshot 2019-06-25 at 8.35.12 AM.png")) NIL)("IMAGE" "PNG" ("NAME" "Screenshot 2019-06-24 at 5.05.55 PM.png") "<[email protected]>" NIL "BASE64" 478480 NIL ("INLINE" ("FILENAME" "Screenshot 2019-06
flutter: [INFO] imap_client: S: -24 at 5.05.55 PM.png")) NIL)("IMAGE" "PNG" ("NAME" "Screenshot 2019-06-25 at 8.23.25 AM.png") "<[email protected]>" NIL "BASE64" 1727576 NIL ("INLINE" ("FILENAME" "Screenshot 2019-06-25 at 8.23.25 AM.png")) NIL) "RELATED" ("BOUNDARY" "----==--bound.215693.iva5-90b45dad4fcc.qloud-c.yandex.net") NIL NIL) "MIXED" ("BOUNDARY" "----==--bound.215692.iva5-90b45dad4fcc.qloud-c.yandex.net") NIL NIL))

A7 OK Success
flutter: [INFO] imap_client: S: -24 at 5.05.55 PM.png")) NIL)("IMAGE" "PNG" ("NAME" "Screenshot 2019-06-25 at 8.23.25 AM.png") "<[email protected]>" NIL "BASE64" 1727576 NIL ("INLINE" ("FILENAME" "Screenshot 2019-06-25 at 8.23.25 AM.png")) NIL) "RELATED" ("BOUNDARY" "----==--bound.215693.iva5-90b45dad4fcc.qloud-c.yandex.net") NIL NIL) "MIXED" ("BOUNDARY" "----==--bound.215692.iva5-90b45dad4fcc.qloud-c.yandex.net") NIL NIL))

A7 OK Success
flutter: [INFO] imap_client: S: -24 at 5.05.55 PM.png")) NIL)("IMAGE" "PNG" ("NAME" "Screenshot 2019-06-25 at 8.23.25 AM.png") "<[email protected]>" NIL "BASE64" 1727576 NIL ("INLINE" ("FILENAME" "Screenshot 2019-06-25 at 8.23.25 AM.png")) NIL) "RELATED" ("BOUNDARY" "----==--bound.215693.iva5-90b45dad4fcc.qloud-c.yandex.net") NIL NIL) "MIXED" ("BOUNDARY" "----==--bound.215692.iva5-90b45dad4fcc.qloud-c.yandex.net") NIL NIL))

A7 OK Success

Folder "inbox" could not be selected.

error:
I/flutter (14520): Folder "inbox" could not be selected.
E/flutter (14520): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: Expected */+/TAG, but got [Word ImapWordType.flag] \Draft
E/flutter (14520): #0 ImapCommand.run (package:imap_client/src/imap_command.dart:103:9)
E/flutter (14520):
E/flutter (14520): #1 ImapEngine.executeCommand (package:imap_client/src/imap_engine.dart:110:33)
E/flutter (14520):
E/flutter (14520): #2 _ImapCommandable.getFolder (package:imap_client/src/imap_commandable.dart:138:19)
E/flutter (14520): #3 _HomeState.getEmails (package:mail_app/main.dart:49:10)
E/flutter (14520): #4 _HomeState.build. (package:mail_app/main.dart:61:11)
E/flutter (14520): #5 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:992:19)
E/flutter (14520): #6 _InkResponseState.build. (package:flutter/src/material/ink_well.dart:1098:38)
E/flutter (14520): #7 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:184:24)
E/flutter (14520): #8 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:524:11)
E/flutter (14520): #9 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:284:5)
E/flutter (14520): #10 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:219:7)
E/flutter (14520): #11 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:477:9)
E/flutter (14520): #12 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:78:12)
E/flutter (14520): #13 PointerRouter._dispatchEventToRoutes. (package:flutter/src/gestures/pointer_router.dart:124:9)
E/flutter (14520): #14 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:377:8)
E/flutter (14520): #15 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:122:18)
E/flutter (14520): #16 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:108:7)
E/flutter (14520): #17 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:220:19)
E/flutter (14520): #18 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:200:22)
E/flutter (14520): #19 GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:158:7)
E/flutter (14520): #20 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:104:7)
E/flutter (14520): #21 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:88:7)
E/flutter (14520): #22 _rootRunUnary (dart:async/zone.dart:1206:13)
E/flutter (14520): #23 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter (14520): #24 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter (14520): #25 _invoke1 (dart:ui/hooks.dart:283:10)
E/flutter (14520): #26 _dispatchPointerDataPacket (dart:ui/hooks.dart:192:5)
E/flutter (14520):

code:
Future<List> getEmails()async{ try { ImapFolder inbox = await client.getFolder("inbox"); }catch(e){ print(e.toString()); } ... }

Decode Header Fields

Is your feature request related to a problem? Please describe.
Sometimes the header value is decoded something like this:
[personal-l] =?utf-8?q?Neue_hochschul=C3=B6ffentliche_Bekanntmac?= =?utf-8?q?hung?=
I am trying to decode the header by myself but it is not very easy.

Describe the solution you'd like
The library should decode it before I get it.
Or at least create a utility function for that so that developers using this library don't need to solve this (unnecessary) problem.

Describe alternatives you've considered
No idea.

Additional context
Was fetching using ENVELOPE, then map["ENVELOPE"]["subject"]

Error when opening folder names including spaces

When listing folders from (e.g.) Gmail, returned names include spaces (e.g. '[Gmail]/All Mail'). Trying to open the folders using these returned Strings as names doesn't work and I have to enclose the names manually with quotation marks.

This should probably (at least for convenience) work without altering the folder names received from list.

More examples would help new users understand how to use this library

Great job on getting IMAP support into Flutter, much appreciated.

However, as a relative newcomer to the IMAP protocol, I'm finding it quite challenging to know how to use your library to perform common tasks. I also find the ImapResponse class quite difficult to work with; there are many different fields and it's not clear which ones will contain the answer to my commands.

I imagine a lot of this could be solved with a few more examples, e.g.:

  • List the names of all the mailboxes
  • Find all unread mail
  • ...

I'll try and add some of these via a PR, as and when I figure them out, but if you had further examples ready to go, that would be great.

Fetching the envelop fails if the subject line contains quotation marks

When trying to fetch the envelop of an email with a subject line that contains a quotation mark, an error occurs saying that while scanning the response a close-bracket imap word was expected.

The reason for this seems to be that the email server escapes the quotation mark as \", but this is not recognized by this package at the moment.

Can't figure out how to list messages in the inbox...

This is the code I'm trying to use, but I always get a "BAD" status when running the fetch.

    ImapClient client = new ImapClient();

    // connect
    ImapResponse response = await client.connect("imap.gmail.com", 993, true);
    print(response.fullResponse);

    client.fetchHandler =
        (String mailboxName, int mailboxNumber, Map<String, String> data) {
      print(mailboxName);
      print(mailboxNumber);
      data.forEach((key, value) {
        print(key);
        print(value);
      });
    };

    // authenticate
    response = await client.authenticate(USERNAME, PASSWORD);
    print(response.status);

    // list folders
    response = await client.list('', '');
    print(response.status);

    response = await client.select('inbox');
    print(response.status);

    response = await client.fetch('1:*', ['BODY']);
    print(response.status);

Listener for New Messages

Hello and good day

I came across this package and was wondering if there's an existing listener for incoming Messages on this Package?
Maybe something like below

imapClient.onNewMessage((event) => {
 //do something
})

I was planning to trigger a local notification if there's a new message so I was looking for a listener

Looking forward to your response.

Thank you

Exception processing FETCH from Gmail

I received an unhandled exception when processing a FETCH operation from my Gmail account.

Here's the line from the server that triggered the error:

* 17989 FETCH (RFC822.SIZE 45339 INTERNALDATE "21-Sep-2018 12:05:58 +0000" FLAGS () ENVELOPE ("Fri, 21 Sep 2018 06:05:58 -0600" "Thank you for your donation to The Brain Tumour Charity" (("JustGiving" NIL "email" "contact.justgiving.com")) (("JustGiving" NIL

This is the command I sent:

var response = await client.fetch(uid.toString(), [
      "FLAGS",
      "INTERNALDATE",
      "RFC822.SIZE",
      "ENVELOPE",
      "BODY",
    ]);

And the exception:

Invalid argument(s): The string given is not a vaild imap list.
#0      ImapConverter.imapListToDartList (file:///Users/duncan/.pub-cache/hosted/pub.dartlang.org/imap_client-0.1.3/lib/src/imap_converter.dart:31:7)
#1      ImapConverter.imapListToDartMap (file:///Users/duncan/.pub-cache/hosted/pub.dartlang.org/imap_client-0.1.3/lib/src/imap_converter.dart:44:26)
#2      _ImapAnalyzer._handleSizeStatusUpdate (file:///Users/duncan/.pub-cache/hosted/pub.dartlang.org/imap_client-0.1.3/lib/src/imap_analyzer.dart:193:29)
#3      _ImapAnalyzer._handleLine (file:///Users/duncan/.pub-cache/hosted/pub.dartlang.org/imap_client-0.1.3/lib/src/imap_analyzer.dart:99:7)
#4      _ImapAnalyzer.analyzeLine (file:///Users/duncan/.pub-cache/hosted/pub.dartlang.org/imap_client-0.1.3/lib/src/imap_analyzer.dart:77:5)
#5      _RootZone.runUnaryGuarded (dart:async/zone.dart:1314:10)
#6      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:336:11)

How to login use xoauth2?

My use case is user login without asking password from app. What I need is to use google_sign_in instead. But how I passing xoauth2 token to imap_client?

Error parsing mail with pgp attachment

Bug description
Throws an exception when doing FETCH of BODYSTRUCTURE of a pgp-encrypted message

To Reproduce
Use gpg and Thunderbird to encrypt and sign a message and then attempt to FETCH its BODYSTRUCTURE.

Expected behavior
Successfully parses BODYSTRUCTURE response without exceptions.

Additional context

Exception is thrown in _processBodyMultiPart:

  static Future<Map<String, dynamic>> _processBodyMultiPart(
      ImapBuffer buffer) async {
    Map<String, dynamic> results = {"BODIES": <Map<String, dynamic>>[]};
    ImapWord word = await buffer.readWord();
    while (word.type == ImapWordType.parenOpen) {
      buffer.unread(word.value);
      results["BODIES"].add(await _processBody(buffer));
      word = await buffer.readWord();
    }
    if (word.type != ImapWordType.string) {
      throw new SyntaxErrorException("Expected string, but got $word"); <<<--- HERE
    }

word.type == ImapWordType.nil at this point

Log:

flutter: [INFO] imap_client: C: A7 FETCH 1 (BODYSTRUCTURE)
flutter: [INFO] imap_client: S: * 1 FETCH (BODYSTRUCTURE (("application" "pgp-encrypted" NIL NIL NIL "quoted-printable" 10 NIL NIL NIL NIL)("application" "octet-stream" ("name" "encrypted.asc") NIL NIL "7bit" 2871 NIL ("inline" ("filename" "encrypted.asc")) NIL NIL) "encrypted" ("boundary" "----KV1DHT7MP87IMFT410O4TDRRPM94YK" "protocol" "application/pgp-encrypted") NIL NIL NIL))

A7 OK Fetch completed (0.001 + 0.000 secs).

Can't analysis Chinese

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Input character escaping for backslash and quotation marks

Bug description
Currently strings are not being escaped when entered

Expected behavior
Strings should be escaped (\ and ") before use as quoted string when necesary

Additional context
Server-to-client has already been fixed via #5, client-to-server is still missing

STARTTLS does not refresh capabilities

Bug description
To prevent man-in-the-middle attacks, the capabilities list must be refreshed after a successful tls negotiation. This is currently not done.

To Reproduce
Issue starttls command

Expected behavior
Capabilities should refresh

Fetching email in web browser giving Raw socket constructor error

Debug service listening on ws://127.0.0.1:60991/6cwe7-gG74Y=
Debug service listening on ws://127.0.0.1:60991/6cwe7-gG74Y=
[INFO] imap_client: Connecting to imap.gmail.com at port 993 with secure mode on
Error: Unsupported operation: RawSocket constructor
at Object.throw_ [as throw] (http://localhost:60918/dart_sdk.js:4328:11)
at Function.connect (http://localhost:60918/dart_sdk.js:57912:17)
at Function.connect (http://localhost:60918/dart_sdk.js:56048:27)

if any other method for fetching emails from mail account. please suggest me as well

Use classes with fixed fields instead of maps

Is your feature request related to a problem? Please describe.
Currently, a map is used in many places to collect information, for example in ImapFolder._processBody(). This is a poor way to implement things as it requires the developer to remember each value's key.

Describe the solution you'd like
To help with autocompletion and error spotting, classes with fixed fields for each value should be used instead.

searching for UNSEEN emails is returning empty list

To Reproduce

    ImapClient client = new ImapClient();
    await client.connect("imap.mail.yahoo.com", 993, true);
    await client.authenticate(new ImapPlainAuth("******", "*****"));
    ImapFolder inbox = await client.getFolder("inbox");
    List<int> emails = await inbox.search('UNSEEN');

in this case the emails list has 1 positon with null value.

Expected behavior
Search should return the email ID list

trigger on incoming new un-read messages

hi , first of all thank you so much on building this wonderful imap plugin.
my email app is almost finish but i can't wrap my head around how to show notification on new incoming message. my first thought is to use android_alarm_manager plugin to count unread messages in inbox periodically and save it to shared preferences. If the amount of unread msg different from the previous one (shared preferences) it show notification with mail content at the top of mail box. But it felt unsafe as there're many factor that could modify mail length in mailbox, like moving,deleting mail for example.
i was wondering can you at least guide me to the right direction on how to properly use imap protocol for this to achieve my goal as i'm very new with it, thankyou,

Can't login to GMail w/ valid credentials

Bug description
A clear and concise description of what the bug is.

Can not successfully log in to GMail. I use r because I have an embedded dollar sign.

import 'dart:io';
import 'package:imap_client/imap_client.dart';
Future<void> main() async {
  // print log, helpful for debugging
  printImapClientDebugLog();
  var client = ImapClient();
  // connect
  await client.connect('imap.gmail.com', 993, true);
  // authenticate
  final response = await client.authenticate(
      ImapPlainAuth('[email protected]', r'''xxxxxx$xxxxx'''));

  if (response != ImapTaggedResponse.ok) {
    exit(1);
  }

To Reproduce
Step by step description on how to reproduce the error, including log data if possible.
Logs can be viewed by calling printImapClientDebugLog() before any other methods.

Connecting to VM Service at ws://127.0.0.1:61858/OZJLHoO_NOc=/ws
[INFO] imap_client: Connecting to imap.gmail.com at port 993 with secure mode on
[INFO] imap_client: S: * OK Gimap ready for requests from 24.183.26.195 135mb86127829ybd
[INFO] imap_client: C: A1 CAPABILITY
[INFO] imap_client: S: * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN AUTH=OAUTHBEARER AUTH=XOAUTH
A1 OK Thats all she wrote! 135mb86127829ybd
[INFO] imap_client: C: A2 AUTHENTICATE PLAIN
[INFO] imap_client: S: +
[INFO] imap_client: C: AGJhcnRvbmhhbW1vbmRAZ21haWwuY29tAGIzSlZLUnlWQ28kXlo2
[INFO] imap_client: S: A2 NO [AUTHENTICATIONFAILED] Invalid credentials (Failure)
Exited (1)

Expected behavior
To successfully log in to GMail

Additional context
Add any other context about the problem here.

Utf8 folder names

For example i have Russian folder name(it doesn't matter which language but not English) and when i fetch list of folders i received something like this: &BD4EPwQ7BDAEQgRLAKAENwQwAKAEOgQy-
instead of folder name.
I know that it a modified utf-7 encoding.
i found some libraries on JavaScript https://github.com/emailjs/emailjs-utf7
how they parsing that.

Russian?

If a have russian mail, and when i fetch it, i received something like this: С �важением

Ð�авÑ�ажнова Ð

[flutter_imap_mail] flutter packages get

[flutter_imap_mail] flutter packages get
Running "flutter pub get" in flutter_imap_mail...
Because every version of flutter_test from sdk depends on pedantic 1.8.0+1 and imap_client >=0.2.8 <1.0.0-alpha depends on pedantic ^1.9.0, flutter_test from sdk is incompatible with imap_client >=0.2.8 <1.0.0-alpha.

So, because flutter_imap_mail depends on both imap_client ^0.2.8 and flutter_test any from sdk, version solving failed.
pub get failed (1; So, because flutter_imap_mail depends on both imap_client ^0.2.8 and flutter_test any from sdk, version solving failed.)
exit code 1

Cannot connect to email server

E/flutter ( 3514): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: HandshakeException: Handshake error in client (OS Error:
E/flutter ( 3514): CERTIFICATE_VERIFY_FAILED: self signed certificate in certificate chain(handshake.cc:354))

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.