BUG -- IMAP LIST COMMAND...

I think EMClient IMAP list handling is incorrect.  I’ve done an extensive amount of testing and it would be gruelling to post all of the test results proving this point.  

However, let’s make it simple, first:

In another post (https://forum.emclient.com/emclient/topics/activedirectory-gpo-redirected-folders-database-corruptio…), EMC reported that it uses the “%” wildcard instead of a “*” .  The result is that no public or shared folders are displayed in EMC.  Why?  

1 list * % 
* LIST (\HasChildren) “.” INBOX
* LIST (\HasNoChildren) “.” INBOX.Contacts
* LIST (\HasNoChildren) “.” INBOX.Drafts
* LIST (\HasNoChildren) “.” INBOX.Junk
* LIST (\HasNoChildren) “.” INBOX.Notes
* LIST (\HasNoChildren) “.” INBOX.Outbox
* LIST (\HasNoChildren) “.” INBOX.Sent
* LIST (\HasNoChildren) “.” INBOX.Spam
* LIST (\HasNoChildren) “.” INBOX.Trash
* LIST (\HasNoChildren) “.” INBOX.adsfasdfasdf
* LIST (\HasNoChildren) “.” INBOX.documents
* LIST (\HasNoChildren) “.” INBOX.frank
* LIST (\HasNoChildren) “.” INBOX.hold
* LIST (\Noselect \HasChildren) “.” news
* LIST (\HasNoChildren) “.” news.general
* LIST (\Noselect \HasChildren) “.” shared
* LIST (\HasNoChildren) “.” shared.keepers  
* LIST (\Noselect \HasChildren) “.” user
* LIST (\HasChildren) “.” user.adifferentuser
* LIST (\HasNoChildren) “.” user.adifferentuser.Drafts
* LIST (\HasNoChildren) “.” user.adifferentuser.Junk
* LIST (\HasNoChildren) “.” user.adifferentuser.Notes
* LIST (\HasNoChildren) “.” user.adifferentuser.Outbox
* LIST (\HasNoChildren) “.” user.adifferentuser.Sent
* LIST (\HasNoChildren) “.” user.adifferentuser.Trash
* LIST (\HasChildren) “.” user.sysadmin
* LIST (\HasNoChildren) “.” user.sysadmin.Drafts
* LIST (\HasNoChildren) “.” user.sysadmin.GLBA
* LIST (\HasNoChildren) “.” user.sysadmin.Junk
* LIST (\HasNoChildren) “.” user.sysadmin.Outbox
* LIST (\HasNoChildren) “.” user.sysadmin.Sent
* LIST (\HasNoChildren) “.” user.sysadmin.TLS
* LIST (\HasNoChildren) “.” user.sysadmin.Trash
* LIST (\HasNoChildren) “.” user.wishmaster
1 OK Completed (0.001 secs 45 calls)

AND…
1 list % %
* LIST (\HasChildren) “.” INBOX
* LIST (\Noselect \HasChildren) “.” news
* LIST (\Noselect \HasChildren) “.” shared
* LIST (\Noselect \HasChildren) “.” user
1 OK Completed (0.001 secs 38 calls)

* BAD Invalid tag
1 list INBOX% %
* LIST (\HasChildren) “.” INBOX
1 OK Completed (0.000 secs 17 calls)

* BAD Invalid tag

* BAD Invalid tag
1 list INBOX% *
* LIST (\HasChildren) “.” INBOX
* LIST (\HasNoChildren) “.” INBOX.Contacts
* LIST (\HasNoChildren) “.” INBOX.Drafts
* LIST (\HasNoChildren) “.” INBOX.Junk
* LIST (\HasNoChildren) “.” INBOX.Notes
* LIST (\HasNoChildren) “.” INBOX.Outbox
* LIST (\HasNoChildren) “.” INBOX.PCI
* LIST (\HasNoChildren) “.” INBOX.PII
* LIST (\HasNoChildren) “.” INBOX.Sent
* LIST (\HasNoChildren) “.” INBOX.Spam
* LIST (\HasNoChildren) “.” INBOX.Trash
* LIST (\HasNoChildren) “.” INBOX.adsfasdfasdf
* LIST (\HasNoChildren) “.” INBOX.documents
* LIST (\HasNoChildren) “.” INBOX.hold
1 OK Completed (0.001 secs 18 calls)

1 namespace
* NAMESPACE ((“INBOX.” “.”)) ((“user.” “.”)) (("" “.”))
1 OK Completed

(FYI,… when using altnamespace… the NAMESPACE command results come out as ("" “”.") (“user.” “.”)(“shared.” “.”) — because >>> I <<

RFC3501 calls “NAMESPACE” command a *** “HINT” ***.  (It’s NOT determinant; see the docs.  In fact, IMAP was designed for UNLIMITED namespaces – just like usenet/nntp.)

 &nbsp;

<u>5.1.1</u> Mailbox Hierarchy Naming

If it is desired to export hierarchical mailbox names, mailbox names
MUST be **left-to-right hierarchical using a single character to  
separate levels of hierarchy**. The same hierarchy separator character
is used for all levels of hierarchy within a single name.

<u>5.1.2</u> Mailbox Namespace Naming Convention

By convention, the first hierarchical element of any mailbox name
**which begins with "#" identifies the "namespace"** of the remainder of the name. This makes it possible to disambiguate between different types of mailbox stores, each of which have their own namespaces. For example, implementations which offer access to USENET newsgroups MAY use the "#news" namespace to partition the USENET newsgroup namespace from that of other mailboxes. Thus, the comp.mail.misc newsgroup would have a mailbox name of "#news.comp.mail.misc", and the name "comp.mail.misc" can refer to a different object (e.g., a user's private mailbox). 6.3.8. LIST Command Arguments: reference name mailbox name with possible wildcards Responses: untagged responses: LIST Result: OK - list completed NO - list failure: can't list that reference or name BAD - command unknown or arguments invalid



The LIST command returns a subset of names from the complete set of all names available to the client. Zero or more untagged LIST replies are returned, containing the name attributes, hierarchy delimiter, and name; see the description of the LIST reply for more detail. ... The character "\*" is a wildcard, and matches zero or more characters at this position. The character "%" is similar to "\*", but it does not match a hierarchy delimiter. If the "%" wildcard is the last character of a mailbox name argument, matching levels of hierarchy are also returned. If these levels of hierarchy are not also selectable mailboxes, they are returned with the \Noselect mailbox name attribute (see the description of the LIST response for more details).

Why does EMC filter out all the results???  

The SERVER (by the sysadmin) makes the decision to hide or not to hide – not the client.  (ON THE OTHER HAND, if I use “altnamespace: 1” in Cyrus, EMC *does* display all the folders – except “shared.keepers.”  EMC implementation is WRONG.)

Outlook does it correctly.  Outlook Express, correct.  Windows Live Mail, correct.  Gnome Evolution, correct.  KDE Kontact, correct.  Mozilla Thunderbird, correct.  Half a dozen others with ‘no name’ clients… correct.  

EMC – wrong.  (This is the REAL cause of the problem of missing user-shared folders and public folders mentioned in the other post.  EMC appears to be stripping the first portion of the hierarchy – out of its own volition.  Why?  I think I know why.  EMC should leave the hierarchy described BY THE SERVER, alone. )

THIS IS A SERIOUS IMPLEMENTATION ISSUE.

“Back to the old drawing board,” as they say.

The LIST command has two parameters: the second consists of the mailbox name or a wildcard pattern. The first is called a reference, and it specifies the context in which the mailbox name is interpreted in relation to the reference:
a1 LIST “INBOX.Private” “*”
* LIST (\HasNoChildren) “.” “INBOX.Private.Holiday”
* LIST (\HasNoChildren) “.” “INBOX.Private.Orchestra”
a1 OK LIST completed

XLIST is deprecated The Gmail-specific XLIST command was deprecated in 2013 in favor of the IMAP Special-Use List Standard. Clients are strongly encouraged to migrate from XLIST to the Special-Use industry standard as soon as possible. Note that the Special-Use standard attribute names are similar but not identical to the legacy XLIST attribute names.

22:47:40.187|046|   * OK [CAPABILITY IMAP4rev1 LITERAL+ ID ENABLE AUTH=PLAIN AUTH=LOGIN SASL-IR] server ready
22:47:40.187|052|   A0 CAPABILITY
22:47:40.187|046|   * CAPABILITY IMAP4rev1 LITERAL+ ID ENABLE ACL RIGHTS=kxte QUOTA MAILBOX-REFERRALS NAMESPACE UIDPLUS NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY CATENATE CONDSTORE ESEARCH SORT SORT=MODSEQ SORT=DISPLAY THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE LIST-EXTENDED WITHIN QRESYNC SCAN XLIST URLAUTH URLAUTH=BINARY AUTH=PLAIN AUTH=LOGIN SASL-IR COMPRESS=DEFLATE IDLE
22:47:40.187|046|   A0 OK Completed
22:47:40.187|052|   A1 ID (“name” “eM Client” “version” “6.0.20899.0” “GUID” “1”)
22:47:40.203|046|   A1 NO Only one Id allowed in non-authenticated state
22:47:40.203|052|   A2 AUTHENTICATE PLAIN XXXXXXXXXXXXXXX==
22:47:40.218|046|   A2 OK [CAPABILITY IMAP4rev1 LITERAL+ ID ENABLE ACL RIGHTS=kxte QUOTA MAILBOX-REFERRALS NAMESPACE UIDPLUS NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY CATENATE CONDSTORE ESEARCH SORT SORT=MODSEQ SORT=DISPLAY THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE LIST-EXTENDED WITHIN QRESYNC SCAN XLIST URLAUTH URLAUTH=BINARY LOGINDISABLED COMPRESS=DEFLATE IDLE] Success (tls protection) SESSIONID=

22:47:40.218|052| A3 COMPRESS DEFLATE

22:47:40.218|046| A3 OK DEFLATE active

22:47:40.218|052| A4 NAMESPACE

22:47:40.218|04D| * NAMESPACE ((“INBOX.” “.”)) ((“user.” “.”)) (("" “.”))

22:47:40.218|04D| A4 OK Completed

22:47:40.265|03E| A5 SELECT “INBOX” (CONDSTORE)

22:47:40.265|052| A6 XLIST “” “INBOX.%”

22:47:40.312|04D| * 4063 EXISTS

22:47:40.312|04D| * 1 RECENT

22:47:40.312|04D| * FLAGS (\Answered \Flagged \Draft \Deleted \Seen $has_cal $SENT Junk NotJunk)

22:47:40.312|04D| * OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen $has_cal $SENT Junk NotJunk *)] Ok

22:47:40.312|04D| * OK [UNSEEN 4060] Ok

22:47:40.312|04D| * OK [UIDVALIDITY 1393563733] Ok

22:47:40.312|04D| * OK [UIDNEXT 8295] Ok

22:47:40.312|04D| * OK [HIGHESTMODSEQ 16466] Ok

22:47:40.312|04D| * OK [URLMECH INTERNAL] Ok

22:47:40.312|04D| A5 OK [READ-WRITE] Completed

22:47:40.312|03E| [IMAP] Cache reset, UIDVALIDITY. Account:
XXXXXXX Folder: /ACCOUNT:18/Inbox Old value: 0 New value: 1393563733

22:47:40.312|043| A7 CREATE “INBOX.Outbox”

22:47:40.328|04D| * XLIST (\HasNoChildren) “.” INBOX.Contacts

22:47:40.328|04D| * XLIST (\HasNoChildren \Drafts) “.” INBOX.Drafts

22:47:40.343|04D| * XLIST (\HasNoChildren \Junk) “.” INBOX.Junk

22:47:40.359|04D| * XLIST (\HasNoChildren) “.” INBOX.Notes

22:47:40.375|04D| * XLIST (\HasNoChildren) “.” INBOX.Outbox

22:47:40.375|04D| * XLIST (\HasNoChildren) “.” INBOX.PCI

22:47:40.375|04D| * XLIST (\HasNoChildren) “.” INBOX.PII

22:47:40.375|04D| * XLIST (\HasNoChildren \Sent) “.” INBOX.Sent

22:47:40.390|04D| * XLIST (\HasNoChildren \Spam) “.” INBOX.Spam

22:47:40.421|04D| * XLIST (\HasNoChildren \Trash) “.” INBOX.Trash

22:47:40.437|04D| * XLIST (\HasNoChildren) “.” INBOX.adsfasdfasdf

22:47:40.437|04D| * XLIST (\HasNoChildren) “.” INBOX.documents

22:47:40.437|04D| * XLIST (\HasNoChildren) “.” INBOX.frank

22:47:40.437|04D| * XLIST (\HasNoChildren) “.” INBOX.hold

22:47:40.453|04D| * XLIST (\HasNoChildren) “.” INBOX.testcal

22:47:40.453|04D| * XLIST (\HasNoChildren) “.” INBOX.testcontacts

22:47:40.453|04D| A6 OK Completed (0.003 secs 17 calls)

22:47:40.453|04D| A7 NO Mailbox already exists

22:47:40.453|052| A8 STATUS “INBOX” (UNSEEN)

22:47:40.453|052| A9 STATUS “INBOX.Contacts” (UNSEEN)

22:47:40.453|052| A10 STATUS “INBOX.Drafts” (UNSEEN)

22:47:40.453|052| A11 STATUS “INBOX.Junk” (UNSEEN)

22:47:40.453|052| A12 STATUS “INBOX.Notes” (UNSEEN)

22:47:40.453|052| A13 STATUS “INBOX.Outbox” (UNSEEN)

22:47:40.453|052| A14 STATUS “INBOX.PCI” (UNSEEN)

22:47:40.453|052| A15 STATUS “INBOX.PII” (UNSEEN)

22:47:40.453|052| A16 STATUS “INBOX.Sent” (UNSEEN)

22:47:40.453|052| A17 STATUS “INBOX.Spam” (UNSEEN)

22:47:40.453|052| A18 STATUS “INBOX.Trash” (UNSEEN)

22:47:40.453|052| A19 STATUS “INBOX.adsfasdfasdf” (UNSEEN)

22:47:40.453|052| A20 STATUS “INBOX.documents” (UNSEEN)

22:47:40.453|052| A21 STATUS “INBOX.frank” (UNSEEN)

22:47:40.453|052| A22 STATUS “INBOX.hold” (UNSEEN)

22:47:40.453|052| A23 STATUS “INBOX.testcal” (UNSEEN)

22:47:40.453|052| A24 STATUS “INBOX.testcontacts” (UNSEEN)

22:47:40.453|043| A25 STATUS “INBOX.Outbox” (UIDVALIDITY)

22:47:40.468|04D| * STATUS INBOX (UNSEEN 3)

22:47:40.468|04D| A8 OK Completed

22:47:40.468|04D| * STATUS INBOX.Contacts (UNSEEN 0)

22:47:40.468|04D| A9 OK Completed

22:47:40.531|04D| * STATUS INBOX.Drafts (UNSEEN 0)

22:47:40.531|04D| A10 OK Completed

AND… I disabled the XLIST command on the server… And, I still have the same situation as described above.

CONCLUSION:  EMC DOES NOT UNDERSTAND THE MEANING AND PROPER APPLICATION OF THE CONCEPTS KNOWN AS “REFERENCE” AND “CONTEXT.”   FURTHERMORE, IT DOESN’T UNDERSTAND NAMESPACES; AND, THEREFORE, IT ALSO MISUSES THE “HINTS” SUPPLIED BY THE NAMESPACE COMMAND.

ALSO, this is  a paramount reason that SQL databases are a poor choice for an email client backend cache.  BerkeleyDB or equivalent hash->value based backends are much better suited to the task – both in reliability; and, speed.

LAST, BUT NOT LEAST, IMAP object traversal &/or enumeration to any or all levels in the hierarchy is [[supposed to be]] a RECURSIVE operation.  [AKA “EASY”]  This is the dirty little secret nature of the “reference/context” plus the “wildcards.”

23:59:32.000|025|   A1 ID (“name” “eM Client” “version” “6.0.20899.0” “GUID” “1”)
23:59:32.000|028|   A1 NO Only one Id allowed in non-authenticated state
23:59:32.000|025|   A2 AUTHENTICATE PLAIN XXXXXXXXXXXXX 
23:59:32.015|028|   A2 OK [CAPABILITY IMAP4rev1 LITERAL+ ID ENABLE ACL RIGHTS=kxte QUOTA MAILBOX-REFERRALS NAMESPACE UIDPLUS NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY CATENATE CONDSTORE ESEARCH SORT SORT=MODSEQ SORT=DISPLAY THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE LIST-EXTENDED WITHIN QRESYNC SCAN URLAUTH URLAUTH=BINARY LOGINDISABLED COMPRESS=DEFLATE IDLE] Success (tls protection) SESSIONID=

23:59:32.015|025| A3 COMPRESS DEFLATE

23:59:32.015|028| A3 OK DEFLATE active

23:59:32.015|025| A4 NAMESPACE

23:59:32.015|029| * NAMESPACE ((“INBOX.” “.”)) ((“user.” “.”)) (("" “.”))

23:59:32.015|029| A4 OK Completed

23:59:32.015|025| A5 LIST “” “INBOX.%”

23:59:32.015|026| A6 SELECT “INBOX” (CONDSTORE)

23:59:32.031|029| * LIST (\HasNoChildren) “.” INBOX.Contacts

23:59:32.031|029| * LIST (\HasNoChildren) “.” INBOX.Drafts

23:59:32.031|029| * LIST (\HasNoChildren) “.” INBOX.Junk

23:59:32.046|029| * LIST (\HasNoChildren) “.” INBOX.Notes

23:59:32.046|029| * LIST (\HasNoChildren) “.” INBOX.Outbox

23:59:32.046|029| * LIST (\HasNoChildren) “.” INBOX.PCI

23:59:32.046|029| * LIST (\HasNoChildren) “.” INBOX.PII

23:59:32.046|029| * LIST (\HasNoChildren) “.” INBOX.Sent

23:59:32.046|029| * LIST (\HasNoChildren) “.” INBOX.Spam

23:59:32.046|029| * LIST (\HasNoChildren) “.” INBOX.Trash

23:59:32.046|029| * LIST (\HasNoChildren) “.” INBOX.adsfasdfasdf

23:59:32.046|029| * LIST (\HasNoChildren) “.” INBOX.documents

23:59:32.046|029| * LIST (\HasNoChildren) “.” INBOX.frank

23:59:32.046|029| * LIST (\HasNoChildren) “.” INBOX.hold

23:59:32.046|029| * LIST (\HasNoChildren) “.” INBOX.testcal

23:59:32.046|029| * LIST (\HasNoChildren) “.” INBOX.testcontacts

23:59:32.046|029| A5 OK Completed (0.001 secs 17 calls)

23:59:32.046|029| * 4066 EXISTS

23:59:32.062|029| * 0 RECENT

23:59:32.062|029| * FLAGS (\Answered \Flagged \Draft \Deleted \Seen $has_cal $SENT Junk NotJunk)

23:59:32.062|029| * OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen $has_cal $SENT Junk NotJunk *)] Ok

23:59:32.062|029| * OK [UNSEEN 4066] Ok

23:59:32.062|029| * OK [UIDVALIDITY 1393563733] Ok

23:59:32.062|029| * OK [UIDNEXT 8298] Ok

23:59:32.062|029| * OK [HIGHESTMODSEQ 16476] Ok

23:59:32.062|029| * OK [URLMECH INTERNAL] Ok

ADVICE for Next patch release of EMC: 
1)  Move the database out of “Roaming.”

2)  Fix the Reference/Contexts.  Use
LIST * *,
LIST * %,
LIST % %,
and
LIST “Default User Namepace” *

(If an admin doesn’t want LIST * * – he can turn it off at the server, himself.)

3)  Store/Retrieve X509 crypto keys from VCards.

ADVICE for “Version 7”:
a)  Obliterate SQLite as an IMAP cache store…
b)  Rewrite IMAP routines.

1)  Learn to enumerate IMAP object WITHOUT using the NAMESPACE command.  NAMESPACE should only be used IF AND ONLY WHEN you have to to determine the “default” space for a user or in an UNAVOIDABLE error situation – e.g. where an IMAP resource no longer exists.

NOTE-- NAMESPACE was proposed by Microsoft, anyways… Stop following the crappy example that MS exhibited.  It’s fundamentally screwed up – it changes the entire idea about what IMAP is supposed to do.  Microsoft has become the beast that they always wanted to conquer (IBM, etc.)

2)  Enumerate all namespaces and root level trees, yourself – ONLY USE NAMESPACE TO OBTAIN THE DEFAULT NAMESPACE FOR THE USER.  Nothing else!

3)  REWRITE your IMAP subsystem to be 100% recursive.  Top to bottom.  You shouldn’t even need any “if-then-else” statements.

4)  While you’re at it, try doing it without any disk writes – storing everything in memory via a combination of arrays, linked-lists, and stacks of linked lists. (FYI, this is also what Cyrus does, internally).

5)  THEN, once you have that perfected… Scrap the SQLite backend for the IMAP objects.  Use a hash-based storage (e.g. text files, disk folders, or BerkeleyDB).  Text files are adequate.  RESULT:  SPEED LIKE YOU’VE ONLY EXPERIENCED ON A RACE TRACK!

Relational database for a name and address program?  Why? MAYBE.  Storing file MIME attachments in a database?  Why?  Storing emails in a database?  Why?   What’s the server for?  It’s a lot easier and faster to store email objects as individual files in folders.  Use Windows Search Service, instead.  Let Microsoft worry about it.

The IMAP server and the Cal/CardDAV servers do all the work for you, anyway.  Keep it that way.  “KISS principle”

I’ll bet that 90% of the your codebase is related to the user interface, right?  10% is backend.

It’s that 10% that is killing EMC as a viable mail client.

When was the last time you opened up a text file with Notepad and it said, “File Corrupt”… “Rebuilding Text file”?

This is like having a bad motor in a new car.

eM Client (6.0.20899.0) Windows: Microsoft Windows NT 6.1.7601 Service Pack 1, Framework: 4.0.30319.18444
har oppstått følgende feil:
System.Data.SQLite.SQLiteException (0x80004005): SQL logisk feil eller mangler database
SQL logisk feil eller mangler database
   Ved System.Data.SQLite.SQLite3.Reset (SQLiteStatement stmt)
   Ved System.Data.SQLite.SQLite3.Step (SQLiteStatement stmt)
   Ved System.Data.SQLite.SQLiteDataReader.NextResult ()
   Ved System.Data.SQLite. SQLiteDataReader…ctor (SQLiteCommand cmd, CommandBehavior oppfører)
   dret System.Data.SQLite.SQLiteCommand.ExecuteReader (CommandBehavior atferd)
   dret System.Data.SQLite.SQLiteCommand.ExecuteNonQuery ()
   dret System.Data.SQLite.SQLiteTransaction.Commit ()
   Ved MailClient.Storage.Data.SQLite.DbRepository1.Add [ST] (Object senderContext, IEnumerable1 elementer, Action1 storeCallback) &nbsp; &nbsp;dret MailClient.Storage.Application.ItemCollection2.AddInternal (TItem element, Action1 storeCallback ) &nbsp; &nbsp;dret MailClient.Storage.Application.ItemCollection2.Add (TItem element)
   dret MailClient.UI.Forms.formSendMail.SaveDraft (MailItem draftItem)
   dret MailClient.UI.Forms.formSendMail. <> c__DisplayClass68. <timerautosave_tick> b__64 (Object param0)
dret System.Threading.QueueUserWorkItemCallback.WaitCallback_Context (Object stat)
dret System.Threading.ExecutionContext.RunInternal (ExecutionContext executionContext, ContextCallback tilbakeringing, Objekt staten, Boolean preserveSyncCtx)
dret System.Threading.ExecutionContext.Run (ExecutionContext executionContext, ContextCallback tilbakeringing, objekt staten, Boolean preserveSyncCtx)
dret System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem ()
dret System.Threading.ThreadPoolWorkQueue.Dispatch ()
dret System.Threading._ThreadPoolWaitCallback.PerformWaitCallback () " rel=“nofollow” target="_blank">http: / /emclient.com/ns/report “> ; eM Windows NT 6.1.7601 Service Pack logisk feil eller mangler database SQL logisk feil eller mangler /> elementer navn> parameter> mscorlib montering> navn> parameter> mscorlib montering> eM (Win7sp1_rtm.101119-1850) fileversion> NT Nivå-dll filedescription> Operativsystemet Microsoft bokmål (Main.040305-0000) fileversion> Microsoft NET Runtime Execution Engine filedescription> Microsoft NET (Win7sp1_gdr.121129-1432) fileversion> DLL-fil for Windows NT BASE API-klient filedescription> Operativsystemet Microsoft bokmål (Win7sp1_gdr.121129-1432) fileversion> DLL-fil for Windows NT BASE API-klient filedescription> Operativsystemet Microsoft bokmål (Win7_rtm.090713-1255) fileversion> Avansert Windows 32 Base-API filedescription> Operativsystemet Microsoft bokmål (Win7sp1_gdr.111215-1535) fileversion> Windows NT CRT DLL filedescription> Microsoft Windows Operating (Win7_rtm.090713-1255) fileversion> Vert for SCM / SDDL / LSA Lookup APIer filedescription> Microsoft Windows Operating (Win7_rtm.090713-1255) fileversion> Remote Procedure Call Runtime filedescription> Operativsystemet Microsoft bokmål bygget av: FX451RTMGREL fileversion> Microsoft NET Runtime Execution Engine filedescription> Microsoft NET (Win7sp1_rtm.101119-1850) fileversion> Lavnivåbibliotek for grensesnitt filedescription> Operativsystemet Microsoft bokmål (Win7sp1_gdr.140822-1508) fileversion> GDI Client DLL filedescription> Microsoft Windows Operating (Win7sp1_rtm.101119-1850) fileversion> Windows-bruker API klient-DLL for handlekurv Flere brukere filedescription> Operativsystemet Microsoft bokmål (Win7sp1_gdr.130605-1534) fileversion> Language Pack filedescription>


” rel=“nofollow” target="_blank">




































































































































































































































































































































































































































































































































































































Microsoft Windows Operating (Win7sp1_gdr.140424-1533) fileversion> Uniscribe Unicode script prosessor filedescription> Microsoft ® Uniscribe Unicode script (Win7sp1_rtm.101119-1850) fileversion> Multi-User Windows IMM32 API Client DLL filedescription> Microsoft Windows Operating Microsoft® bokmål bygget av: FX451RTMGDR fileversion> Microsoft NET Runtime Common Language Runtime - Workstation filedescription> Microsoft NET bygget av: FX451RTMGREL fileversion> Microsoft C Runtime Library filedescription> Microsoft Visual Studio 11 bygget av: FX451RTMGDR fileversion> Microsoft Common Language Runtime Class Library filedescription> Microsoft NET (Win7_rtm.090713-1255) fileversion> Microsoft OLE for Windows filedescription> Operativsystemet Microsoft bokmål (Win7_rtm.090713-1255) fileversion> Base kryptografisk API DLL filedescription> Microsoft Windows Operating (Win7_rtm.090713-1255) fileversion> Microsoft UxTema-bibliotek filedescription> Operativsystemet Microsoft bokmål bygget av: FX451RTMGREL fileversion> NET Framework filedescription> Microsoft NET (Win7_rtm.090713-1255) fileversion> Cryptographic Service Provider API filedescription> Microsoft Windows Operating (Win7_rtm.090713-1255) fileversion> Microsoft Enhanced Cryptographic Provider filedescription> Microsoft Windows Operating Filedescription> eM bygget av: FX451RTMGREL fileversion> NET Framework filedescription> Microsoft NET bygget av: FX451RTMGREL fileversion> NET Framework filedescription> Microsoft NET Filedescription> Microsoft GDI + filedescription> Microsoft Windows Operating bygget av: NET bygget av: FX452RTMGDR fileversion> NET Framework filedescription> Microsoft NET bygget av: FX451RTMGREL fileversion> Microsoft Sortering Support filedescription> Microsoft NET (Win7_rtm.090713-1255) fileversion> Bibliotek for brukerkontroller filedescription> Operativsystemet Microsoft bokmål comctl32.DLL.MUI originalfilename> 6.10 (win7_rtm.090713-1255) fileversion> Bibliotek for brukerkontroller filedescription> Operativsystemet Microsoft bokmål (Win7_rtm.090713-1255) fileversion> Microsoft Desktop Window Manager API filedescription> Operativsystemet Microsoft bokmål (Win7sp1_rtm.101119-1850) fileversion> Remote RPC Extension filedescription> Microsoft Windows Operating (Win7sp1_rtm.101119-1850) fileversion> Felles DLL-fil for Windows-skall filedescription> Operativsystemet Microsoft bokmål bygget av: FX451RTMGREL fileversion> NET Framework filedescription> Microsoft NET bygget av: FX451RTMGREL fileversion> NET Framework filedescription>















































































































































































































































































































































































































































































































































Microsoft NET bygget av: FX451RTMGREL fileversion> NET Framework filedescription> Microsoft NET (Win7_rtm.090713-1255) fileversion> Windows Socket 2.0 32-biters DLL filedescription> Operativsystemet Microsoft bokmål (Win7_rtm.090713-1255) fileversion> NSI User-mode interface DLL filedescription> Microsoft Windows Operating (Win7sp1_gdr.131005-0934) fileversion> Crypto API32 filedescription> Operativsystemet Microsoft bokmål (Win7sp1_rtm.101119-1850) fileversion> ASN.1 Runtime APIs filedescription> Microsoft Windows Operating bygget av: FX45W81RTMGDR fileversion> Microsoft NET Runtime Object Remoting filedescription> Microsoft NET (Win7_rtm.090713-1255) fileversion> versjonskontroll og File Installasjons biblioteker filedescription> Microsoft Windows Operating (Win7sp1_gdr.140411-1533) fileversion> Security Support Provider Interface filedescription> Microsoft Windows Operating (Win7_rtm.090713-1255) fileversion> Microsoft Windows Sockets 2.0-tjenesteprogram filedescription> Operativsystemet Microsoft bokmål (Win7_rtm.090713-1255) fileversion> Winsock2-hjelpe-DLL (TL / IPv4) filedescription> Operativsystemet Microsoft bokmål (Win7_rtm.090713-1255) fileversion> Winsock2-hjelpe-DLL (TL / IPv6) filedescription> Operativsystemet Microsoft bokmål bygget av: FX451RTMGREL fileversion> Dia basert SymReader filedescription> Microsoft NET (Win7_rtm.090713-1255) fileversion> Microsoft Eiendom System filedescription> Windows bokmål /> 6.1.7601.17676 fileversion> COM + Configuration Catalog filedescription> Microsoft Windows Operating (Win7_rtm.090713-1255) fileversion> Windows NT MARTA-leverandør filedescription> Operativsystemet Microsoft bokmål (Win7_rtm.090713-1255) fileversion> DLL-fil for Win32 LDAP-API filedescription> Operativsystemet Microsoft bokmål (Win7_rtm.090713-1255) fileversion> Brukerprofil Basic API filedescription> Microsoft Windows Operating (Winblue_gdr.140724-2228) fileversion> Ole32-utvidelse for Win32 filedescription> Internett bokmål (Win8_gdr_oobssr.130113-0015) fileversion> ApiSet Stub DLL filedescription> Microsoft Windows Operating (Win8_gdr_oobssr.130113-0015) fileversion> ApiSet Stub DLL filedescription> Microsoft Windows Operating (Win8_gdr_oobssr.130113-0015) fileversion> ApiSet Stub DLL filedescription> Microsoft Windows Operating (Win8_gdr_oobssr.130113-0015) fileversion> ApiSet Stub DLL filedescription> Microsoft Windows Operating (Win8_gdr_oobssr.130113-0015) fileversion> ApiSet Stub DLL filedescription> Microsoft Windows Operating (Win8_gdr_oobssr.130113-0015) fileversion> ApiSet Stub DLL filedescription> Microsoft Windows Operating (Win7_rtm.090713-1255) fileversion> Unicode Normalisering DLL filedescription> Microsoft Windows Operating (Winblue_r2.140818-1155) fileversion> Kjør tid verktøy for Internet Explorer filedescription> Internett (Winblue_gdr.131013-1700) fileversion> internett-tillegg for Win32 filedescription> Internett bokmål (Norge) språk> modul> Microsoft® bokmål (Win7sp1_gdr.140411-1533) fileversion> Security Support Provider Interface filedescription> Microsoft Windows Operating (Win8_gdr_oobssr.130113-0015) fileversion> ApiSet Stub DLL filedescription> Microsoft Windows Operating (Win7_rtm.090713-1255) fileversion> Klientbibliotek for programkompatibilitet filedescription> Operativsystemet Microsoft bokmål (Win7_rtm.090713-1255) fileversion> INST-API for Windows filedescription> Operativsystemet Microsoft bokmål (Win7sp1_rtm.101119-1850) fileversion> Configuration Manager DLL filedescription> Microsoft Windows Operating System produkt>
































































































































































































































































































































































































































































































































































(Win7_rtm.090713-1255) fileversion> Enhetsinformasjon Set DLL filedescription> Microsoft Windows Operating Files \ eM Client \ SQLite \ x86 \ sqlite3.dll filename> Assembly importert fra typebiblioteket Språk (Konstant bygget av: FX451RTMGREL fileversion> NET Framework filedescription> Microsoft NET bygget av: FX451RTMGREL fileversion> NET Framework filedescription> Microsoft NET bygget av: FX451RTMGREL fileversion> Microsoft NET Services Support Infrastruktur filedescription> Microsoft NET bygget av: FX451RTMGREL fileversion> Microsoft NET Services Native Thunks filedescription> Microsoft NET bygget av: FX451RTMGREL fileversion> Microsoft NET Services Native Thunks filedescription> Microsoft NET bygget av: FX451RTMGDR fileversion> Microsoft NET Runtime Just-In-Time Compiler filedescription> Microsoft NET Filedescription> NET Framework filedescription> Microsoft NET (Win8_gdr.140127-1505) fileversion> Microsoft Windows Codecs Library filedescription> Microsoft Windows Operating (Win7sp1_gdr.121003-0333) fileversion> Network Location Awareness 2 filedescription> Microsoft Windows Operating (Win7_rtm.090713-1255) fileversion> Mellomlagstjeneste for e-postnavngiving filedescription> Operativsystemet Microsoft bokmål Microsoft® bokmål (Win7sp1_rtm.101119-1850) fileversion> Windows Sockets Helper DLL filedescription> Microsoft Windows Operating (Win7_rtm.090713-1255) fileversion> DNS-klient API DLL filedescription> Operativsystemet Microsoft bokmål (Win7_rtm.090713-1255) fileversion> LDAP RnR Provider DLL filedescription> Microsoft Windows Operating bokmål (Win8_gdr_oobssr.130113-0015) fileversion> ApiSet Stub DLL filedescription> Microsoft Windows Operating (Win7_rtm.090713-1255) fileversion> Fusion 2.5 filedescription> Operativsystemet Microsoft bokmål (Win8_gdr_oobssr.130113-0015) fileversion> ApiSet Stub DLL filedescription> Microsoft Windows Operating (Winblue_gdr.140724-2228) fileversion> Microsoft ® HTML Viewer filedescription> Internett bokmål Introperability (Win7_rtm.090713-1255) fileversion> Remote Access API filedescription> Microsoft Windows Operating (Win7_rtm.090713-1255) fileversion> Remote Access Connection Manager filedescription> Microsoft Windows Operating (Win7sp1_rtm.101119-1850) fileversion> Routing Utilities filedescription> Microsoft Windows Operating (Win7_rtm.090713-1255) fileversion> Windows HTTP-TJENESTER filedescription> Operativsystemet Microsoft bokmål (Win7sp1_rtm.101119-1850) fileversion> Weboverføringsprotokoller API filedescription> Operativsystemet Microsoft bokmål (Norge) språk> modul> credssp.dll navn>

























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































(Win7sp1_rtm.101119-1850) fileversion> servertjenesten Client DLL filedescription> Microsoft Windows Operating (Win7sp1_rtm.101119-1850) fileversion> Offline Files Win32 API filedescription> Microsoft Windows Operating (Win7_rtm.090713-1255) fileversion> Klient-DLL for programvarelisensiering filedescription> Operativsystemet Microsoft bokmål Filedescription> TLS / SSL Security Provider filedescription> Microsoft Windows Operating Data API Kjerne Library filedescription> Google GData Client Data API Kontakter Library filedescription> Google GData Client Data API Extensions Library filedescription> Google GData Client NET (Win7_rtm.090713-1255) fileversion> Kryptografisk Windows-bibliotek filedescription> Operativsystemet Microsoft bokmål (Win7_rtm.090713-1255) fileversion> Windows Cryptographic Primitives Library filedescription> Microsoft Windows Operating (Win7_rtm.090713-1255) fileversion> Windows Cryptographic Primitives Library filedescription> Microsoft Windows Operating Microsoft® bokmål (Winblue_gdr.140724-2228) fileversion> Microsoft ® JScript filedescription> Internett bokmål Shell (Win7sp1_rtm.101119-1850) fileversion> Windows Image Helper filedescription> Microsoft Windows Operating C ++ Runtime Library filedescription> Microsoft Visual Studio C Runtime Library filedescription> Microsoft Visual Studio /> EhStorShell.dll.mui originalfilename> 6.1.7600.16385 (win7_rtm.090713-1255) fileversion> Skallutvidelses-DLL for Windows Forbedret lagring filedescription> Operativsystemet Microsoft ® bokmål (Win8_gdr_oobssr.130113-0015) fileversion> Microsoft Windows Codecs Extended Library filedescription> Microsoft Windows Operating 6.0 SP3 filedescription> Microsoft ® MSXML 6.0 Files \ eM Client \ Hunspellx86.dll filename> Hunspell Internt navn> 1,1,1,0 fileversion> Hunspell egen kode DLL filedescription> < produkt> NHunspell Spell (Win7_rtm.090713-1255) fileversion> Microsoft Hurtigbuffer for miniatyrbilder filedescription> Operativsystemet Microsoft bokmål (Win7sp1_rtm.101119-1850) fileversion> ActiveX Interface Marshaling Library filedescription> Microsoft Windows Operating bygget av: FX451RTMGREL fileversion> Microsoft Unicode Normalisering filedescription> Microsoft NET (USA) språk> modul> moduler> rapport></timerautosave_tick>

I think saving e-mails as ‘just’ files instead of in an SQL database is not a bad idea. Although you might get too many files if every e-mail is saved as a single file.

You also might have a look at RavenDB, an object/document database:

http://ravendb.net/

FROM THE MAN WHO DESIGNED THE IMAP PROTOCOL, HIMSELF…!!!

[Imap-protocol] Where to start? Mark Crispin mrc+imap at panda.com
Sun Jun 5 16:58:40 PDT 2011

If you enjoy beating your head against a wall incessantly, then by all

means ignore what I am about to say. Over the years, I have learned that
there are individuals who delight in beating their heads against the wall,
and that it is useless for me to attempt to deprive them of their fun.

If you don’t enjoy an aching head, then listen up.

First and foremost, the Formal Syntax section of RFC 3501 should be your

holy book. If any part of RFC 3501 distracts you from the Formal Syntax,

ignore it in favor of the Formal Syntax.



Your jaw will drop when you first see the Formal Syntax. Your eyes will

glaze over. You will start saying “no, no, no.” Just work through that

**stage.

It’s a steep hill to climb, but once you make it to the top you

** **will see everything with crystal clarity** _ . _ _ _ **_IMAP is a very subtle protocol in places, and only the Formal Syntax _** **_relates the full subtlty. _** When a space is required, then exactly ONE space (not ZERO, not TWO) MUST be there; and when a space is not required then it is FORBIDDEN.

Whatever you do, DO NOT ATTEMPT TO IMPLEMENT ANY COMMAND OR RESPONSE BY
LOOKING AT THE EXAMPLES! You are guarantee to screw up if you use the
examples as a model (that means YOU, Microsoft!). Use only the Formal
Syntax. The result should indeed look like the examples; and if it
doesn’t then study the Formal Syntax to understand why.

Do I still have your attention? Good. You apparently don’t want to bang

your head against the wall. I just saved you for one of the major causes

of head-banging.



Second, mind the transition between literal and non-literal modes. You
are either outputting a line, which is set of octets terminated by CRLF;
or you are outputting a literal, which is a precisely counted number of
octets with no termination. However, in all cases in IMAP, there is a
line after a literal (even if it is just a CRLF to end the command or
response).

There are some deep insights in the previous paragraph that will be of

great use to you if you implement your server in a network I/O
infrastructure in which you are doing either “line” or “buffered” mode.
Go ahead. Ask me how I know… :slight_smile:

Some commands may have multiple literals. So, if a command has two
arguments, both of which come in as literals, you must: read line, read
sized buffer, read line, read sized buffer, read line. The SEARCH command
can have quite a few literals. Or it may have none. Be prepared.

Third, you are best off parsing commands into a struct, following the
Formal Syntax. Think about extensibility. You’ll be glad you did if you
ever implement the MULTIAPPEND extension.

Something else is important: there is ABSOLUTELY NOTHING that a command
can do, as part of the parsing of the command, that changes anything in
the mailbox or the server session. If a command responds with either NO
or BAD, then the command is guaranteed to have done nothing. Thus,
commands are in three phases: parse, action, response; and there is an
action if and only if the response is OK.

Fourth, implement responses by a struct, again following the Formal
Syntax. You’ll have lots of enums for types to identify which union to
follow. But it’s possible to define all of IMAP response in terms of a
single struct (truly the Struct From Hell…but once you get it it will be
a delight). Now you just need an engine to poot it out. Guess what. I
just saved you a HUGE amount of time in writing the IMAP response
generator.

Writing response routines is obsolete technology. I know because I have
done it both ways. It is so much faster to have a single response engine
that poots out a response struct tree.

Fifth, keep in mind that pretty much all of RFC 3501 is mandatory to
implement. You CAN save yourself some time by not implementing non-INBOX
mailboxes (thus the LIST command only poots a \NoInferiors mailbox called
INBOX, and CREATE/DELETE/RENAME all respond with NO). But you’ll probably
need the non-INBOX mailboxes sooner rather than later.

When you do implement other mailboxes, don’t try to be magic about
subscriptions. Just treat it like server-based bookmarks.

Modified UTF-7 is a royal pain; and I had hoped that it would have been
extinct by now. But you can defer doing anything about it until you
implement non-INBOX mailboxes.

Sixth, you probably will want a vector of messages in the selected
mailbox, indexed by message sequence number. In this vector you will
want, at a minimum, the internal date, size, flags, and UID. You’ll
probably want some pointers to message contents, and perhaps preparsed
ENVELOPE and BODYSTRUCTURE. Do UID lookup via binary search through this
vector (not linear search).

Seventh, this reminds me about something else. Those BODYSTRUCTURE things
have lots of size counts. These, and the RFC822.SIZE, must all be EXACT
(do you hear me, Novell? Microsoft?). Clients that do partial fetching
depend upon those counts being exact. No, it is not OK to guess. These
are NOT advisory.

Eighth, flags being booleans is a common implementation and that’s quite
alright. However, you’ll need some way to record keyword names. Unless
you are providing access to a non-owned mailbox, all flags should be
permanent.

Ninth, slash should be the One And Only True Hierarchy Delimiter. Almost
everybody agrees that it was a mistake to allow others.

Tenth, OK, I lied. I will repeat something that someone else said. Mind
that COPY requires atomicity. So does the MULTIAPPEND extension, if you
ever implement that. If you turn out to be talented enough to implement
MULTIAPPEND, you can claim that you truly grok IMAP.

Eleventh, a server session only needs one mailbox open at a time. If you
have a multithreaded server that supports multiple sessions, consider a
design that allows you to spawn off additional server processes when the
current process fills up. A 32-bit address space simply is not enough for
a modern multi-session server.

Finally, pat yourself on the back. You decided to ask for advice before

you started implementing, instead of diving in, making all the newbie

mistakes, and only then ask questions. You’re already ahead of the game.

Regards,

– Mark –

First, in my tiny brain, caching entire emails is dumb.  The server SHOULD have the authoritative original.  Ideally, an email client doesn’t need to cache anything at all. 

Personally, when using any email client, I only allow caching header info.  If I retrieve an item, then, and only then, in my tiny brain, would the item be cached.  (Consider all the Junk email you receive.  Do you want to cache that, too?)

I realize endusers are fickle.  They don’t understand client-server operations.  Mobile operation dictates the need for SOME (I repeat, SOME) caching. 

HOWEVER, to prevent the “too many files” proposition, I have an answer to that, too.  ANSWER:  It *COULD* be feasible to cache the user’s own INBOX hierarchy.  Nothing else!  (Let the server do its job.)

On the other hand, the way it is now is this:  How about a 50 GigaByte File?

All objects retrieved from the IMAP server should be left intact – because IMAP servers don’t give a hoot about “content.”  Yes, “emails” are the norm; but, in reality, the object returned by the FETCH is of little importance.  Anything (I repeat, ANYTHING) can be stored or retrieved with the IMAP protocol.  IMAP is versatile. 

Hence, I digress… an ideal email client (one that is always connected to a server) doesn’t need to cache anything at all.  The server can even store vCards, iCal, vCalendar, Word Documents, Excel Spreadsheets, etc. ANYTHING.  IMAP is useful as a General Storage/Retrieval protocol. 

The server, itself, is merely a hierarchical store of “queues” of Seen or Unseen objects – hence, the server IS a general purpose filing cabinet.  (FYI, this is why I like the Cyrus “IMAP engine” as well as I do – because Carnegie-Mellon did it right.)

Cool translation…

:slight_smile:

Hi Gi Joe,

I prefer my email client to store all my e-mails locally for the following reasons:

* I live in China, so the internet connection is normally slow or sometimes broken.

* I’m lucky to not get a lot of spam … maybe 2 or 3 e-mails per day.

* when I’m traveling, many times I’m not connected to the internet. Having my e-mail at hand will still enable me to work.

* a lot of e-mails I’m receiving contain attachments which I need to save locally, process and send again. It’s too annoying when those attachments are only downloaded when I open that specific e-mail (remember my internet connection is not so fast).

* searching in e-mails goes much faster locally then via a server

* I’ve only 1 GB space on my private IMAP mail server (I believe) … that’s not enough for my e-mail.

* I’ve only 500 MB space for e-mail on the server of my work … that’s not enough for me.

You’re a user that I’d classify as “mobile” (not always-online)

In your case (a preferred embodiment):

  1. “checkbox” – Cache FULL Messages Locally…
    2)  In a local folder (not in the Roaming folder…)
    3)  In its “raw” format – *.eml  (note that EMC will “associate” with EML files… but, unfortunately, it doesn’t really save any.)

Then, if Windows Search Service was implemented (It even has an indexer that runs in the background)…

It would already have FULL TEXT SEARCHING built-in.  You could even find it by using the “Search” Feature in Windows, or Office, or .

(AND,… Because you are one of those “special cases”… Try this or something else like it. Note that it saves EML format to another folder: Maybe somewhere under your Documents folder? )
https://freeshell.de/~kaosmos/mboximport-en.html
http://www.broobles.com/imapsize/

If you run Linux… there’s a dozen or more of these types of utilities you can use.

Hi GI Joe,

I do download all e-mails locally (for offsite use).

And I do move the e-mails from my inboxes to project related folders under ‘local folders’ in eM Client, once I’ve processed those e-mails in my inboxes.

I’m not running Linux anymore … I used to do that for a few years starting from 1993 (when I had to download it on 50 diskettes … :slight_smile:

But it took too much time maintaining 2 operating systems, so I dropped Linux.

And I’m using Copernic Desktop Search (CDS) to search for files on my computer. Indeed, if I would save the e-mails as EML files on my harddisk, then CDS should be able to index them. Although I’m not saving e-mails yet in EML format … maybe one day I should.

If you check those hyperlinks (and others – Google EML download or Backup) and you’ll find stuff that you can set up with Scheduler to do incremental downloads.

Hi GI Joe,

Thanks for the links.

However:

* I have used the ‘ImportExportTools’ in Thunderbird before … but I’m not using Thunderbird anymore (switched to eM Client).

* I see that latest version of  ‘IMAPSize’ is from 2009 … that’s a long time ago … normally I don’t use software which is not actively maintained anymore. (Maybe it does work correctly, so no updates needed anymore.) Plus I’m not so interested in the size of the folders on the e-mail server.

I’m using POP3 to download my e-mails in eM Client, not IMAP.

I’m not using Gmail.

I hope the eM Client team can do something with your comments regarding IMAP … you seem to know a lot about it.

eM Client by design currently only supports the personal namespace as reported by the NAMESPACE command. In the configuration without the alternative namespace support this results in LIST “” “INBOX.%” command being sent to the server and thus never listing the other folders. This is expected behaviour. We are aware that there is some demand to support the other namespaces, but so far the number of requests for that was very low. That said, we track it as feature request and it may make it into some future version.

Using alternate namespace feature is a workaround for eM Client’s lack of the support for other namespaces. Since the personal folders are then mixed with the root of other namespaces the LIST “” “%” command results in a list of all personal folders AND the other users / shared namespace roots. We then display all of them.

I’m actually surprised that you get different results with Microsoft Outlook and Outlook Express because the alternate namespace server configuration was added exactly because of these clients.

 

I`m very sorry it came out like this. This was my first post ever…
I was looking for help for my problem, that looked simular. But i dont know. Its seem that you realy know what data is all about. I would kindly ask u if you can look at my post. and se if you can help. I hope that post is easier to read.

Thank you… 
Espen 

https://forum.emclient.com/emclient/topics/error-message-and-shutdown-problem

[[[“eM Client by design currently only supports the personal namespace” ]]]  (TRANSLATION:  EMC IS INCOMPETENT.)

Your IMAP routines are wrong.  … It’s NOT a question of “SUPPORTED.”  It’s either right or wrong.

Read Crispin’s comments, above.  And, Mine… above.  Why don’t you hire Crispin as a consultant to set you straight?  Or, Ask Larry Ellison of Oracle for some more money – see what he says. 

I’m telling you for free.

We have a saying in America… “Don’t piss down my back and tell me it’s raining.”


RFC 2342… NAMESPACE command… was proposed by MICROSOFT.  And, it referred to RFC 2060.  Why?  Because of Exchange Server – Public Folders.   That was for Microsoft use, only.  Microsoft “knows” the truth.  It works with ONLY MS Exchange because Microsoft couldn’t get away with conning the whole world.

Read Crispin, above.  RFC 3501 is your “HOLY BOOK.”  RFC 3501 CAME *** LONG AFTER *** RFC2060.   It also came *** LONG AFTER *** RFC2342.

LEARN HOW TO READ ENGLISH… “DEFAULT USER NAMESPACE” is all that you need – if and only if you “get lost” or have an UNAVOIDABLE error – eg… sysadmin deletes the user.

ALL IMAP servers log you into your own tree !!!  But, a software program MAY get lost on error or a remote event.  When an IMAP server LIST command presents folders to you… any folders, anywhere – you can use them.  The server ACLs will prevent anything which is forbidden.

Go back to school.  EMC is “CLUELESS.”

There are “namespaces” and there are “root trees”…

Network Working Group M. Crispin Request for Comments: 3501 University of Washington Obsoletes: [2060](http://tools.ietf.org/html/rfc2060) \<\<\>\> March 2003 Category: Standards Track



Network Working Group M. Gahrns Request for Comments: 2342 Microsoft Category: Standards Track C. Newman Innosoft ---\>\>\> May 1998

1. Abstract

IMAP4 [RFC-2060] does not define a DEFAULT SERVER NAMESPACE. As a
result, two common namespace models have evolved (THE WORLD vs MICROSOFT)

Microsoft “lost” in the world of IMAP.


I DISABLED THE NAMESPACE COMMAND ON THE SERVER:… SEE EMC, NOW?  THE FOLDERS ARE THERE.  BUT, IF I DELETE ALL THOSE MESSAGES OR REPLY OR WHATEVER… EMC CROAKS – BECAUSE EMC IMAP IS F$%#ED.

EMC IS BROKEN… BAD!  DISABLE YOUR OWN NAMESPACE COMMAND ON YOUR OWN SERVER… SEE WHAT HAPPENS… ENJOY!

EMC doesn’t know the difference between “Reference” and “Context” and “wildcard.”  Nor does it know the difference between “namespace” and “root tree.”

I’ve looked at your IMAP logs… and your LIST/XLIST and NAMESPACE USAGE IS WRONG.  Thus, ALL of your implementation of IMAP is messed up… because of the fundamental EMC inability to differentiate between namespaces and root trees. 

Take the advice offered above… Like Crispin said, "If you don’t enjoy an aching head, then listen up.
"

RFC 3501:

By convention, the first hierarchical element of any
mailbox name which begins with "#" identifies the
"namespace" of the remainder of the name.&nbsp; This
makes it possible to disambiguate between 
different types of mailbox stores, each of which
have their own namespaces.

In 2011, Crispin said, “DON’T FOLLOW THE EXAMPLES… FOLLOW THE FORMAL SYNTAX.”  Read Crispin, "RFC 3501 is your “HOLY BOOK.”

IMAP protocol is a “multi-dimensional” storage protocol.  Crispin said, "**IMAP is a very subtle protocol in places, and only the Formal Syntax
**relates the full subtlty." If you study the syntax, you’ll know it.  EMC suffers 2-dimensional thinking.

EMC doesn’t know the difference between “Reference” and “Context” and “wildcard.”  Nor does it know the difference between “namespace” and “root tree.”

Real software engineers know how to test.  Real software engineers know when to “suck it up” and admit they F’d up.  Real software engineers know when its time to rewrite.  [FYI, I’ve been designing and writing software since before most of you at EMC were even born.  I’ve even rewritten a few things.  This isn’t about right or wrong… The paramount goal is always:  Do it right… never “half-ass.”]

Paraphrasing Crispin, "EMC started implementing, diving in, making all the newbie

mistakes, and only then ask questions.
"

EMC follows RFC 2060 and 2342… and ignores 3501.  EMC doesn’t even use SUBSCRIBE.  NAMESPACE COMMAND IS NOT EVEN MENTIONED IN 3501.  Why?  Because NAMESPACE command was officially poo-poo’ed.  (In 2011, Crispin said, “That means YOU, Microsoft” … and now, “That means YOU, EMC”) 

I get tired of repeating myself… but, here goes:
EMC:  “This is the best car you will ever own.”
BUYER:  “This is like having a bad motor in a new car.” 
EMC: “We only support traveling at 30KPH.”
BUYER:   “I drive on the highway.  Minimum speed is 80KPH.  Max is the Autobahn.”
EMC:  “We don’t support highway driving.  But, we have great brake lights.”
BUYER:  “I get it now.  It’s not fit for [information] highway use.  Farm use only.”

EMCLIENT advertisement:  “EMClient is the best equipped email client on the market.  It supports all conceivable e-mail technologies (POP3, SMTP, IMAP, EWS, AirSync)”

FYI, IMAP includes Namespace trees, root trees, subscriptions, public folders, private folders, shared folders, etc.  These were “all conceived” back in the 2003 RFC 3501.

Serbian Zastava/Yugo automobile manufacturer made similar claims about their car in America in the early 1980s.  Fiat took over a few years ago.  Zastava now makes speciality plastic parts made out of polyester.  Americans kicked Zastava out of the country.  Yugo vehicles were deathtraps.

If you are going to peddle this to Americans… don’t make the same mistake as Yugo.

KUDOS GI JOE!!  Finally someone to point out the root cause of the problem and not try to play the blame game like EMC did when I contacted them…to date it’s still a PITA with no resolution in site.  They should Hire YOU!

It’s starting to look like a typical Serbian company.  They tried to get venture capital from people like Larry Ellison of Oracle not too long ago.

Larry is no dummy.

I’m gonna be a little sarcastic here; but, the situation is what it is.

I’m sure you’ll be happy to know that various “webmail” programs work better than EMC, too.  NO MATTER WHAT configuration I put on the server, they all work like a charm.  So do the other email clients – as listed in the OP.

I’ve also “HACKED HACKED AND REHACKED” a solution to the EMC problem.   But, it’s a time consuming one.  [A couple things are still ‘not right’, but, at least 80-90% is behaving itself, now.]

EMC should probably examine some open source implementations of IMAP to see why they work so well. 

Given that PHP apps seem to be the predominate web-based solution (e.g. Roundcube AND others), maybe EMC should study the PHP code; and, the open source library for PHP – php-imap.  You might be surprised by the name of the person who wrote the backend library for php-imap.

Happy hacking!