Loading...
 

History: Cyrus IMAP 3 and JMAP development

Preview of version: 59

ClearOS's 7.x's mail server is Cyrus IMAP 2.x This page is to coordinate testing of upcoming Cyrus IMAP 3.x , which brings new features such as CalDAV, CardDAV and JMAP support.

Status

A lot of work is happening on the JMAP spec and associated code. We'll update this server in October or November 2017 to the latest developer snapshot.

Code

Commits

JMAP spec


What is new in Cyrus 3.x

cyrus.suite.wiki

cyrus.suite.wiki is a shared development and testing server. Once the testing period is over, the server will be deleted so don't store any real data on this server. If you would like server access, please contact Marc Laporte

Urls

You can replace test with your login and follow the pattern below

User management

https://cyrus.suite.wiki:81/app/users (you need root access). And users need to login via IMAP for their account to be properly set up.

CalDAV

https://cyrus.suite.wiki/dav/calendars/user/test

CardDAV

https://cyrus.suite.wiki/dav/addressbooks/user/test/

RSS

https://cyrus.suite.wiki/rss/user/test

IMAP and SMTP

IMAP

port 143
server: cyrus.suite.wiki
username: login (not full email)

SMTP

port: 25?
server: cyrus.suite.wiki
username: login (not full email)
not working for me

IMAPS

SSL
port 993
server: cyrus.suite.wiki
username: login (not full email)
not working for me

SMTPS

SSL
port: 587
server: cyrus.suite.wiki
username: login (not full email)
not working for me

JMAP webmail

The webmail demo is installed, but it looks like the authentication layer in the client is different than what is expected in Cyrus? I updated the JMAP.auth.didAuthenticate block in /usr/share/jmap-demo-webmail/app/state.js as described in the JMAP webmail demo docs, but I see 401 unauthorized replies.

Here's the URL of the webmail demo - please make sure your adblocker is disabled! https://cyrus.suite.wiki:81/jmap-demo-webmail/

It's installed in /usr/share/jmap-demo-webmail. Use "git diff" to see the minor changes.

[root@cyrus jmap-demo-webmail]# pwd
/usr/share/jmap-demo-webmail
[root@cyrus jmap-demo-webmail]# git diff
diff --git a/app/state.js b/app/state.js
index 82ec7a4..f1b5310 100644
--- a/app/state.js
+++ b/app/state.js
@@ -348,9 +348,9 @@ App.kbshortcuts
 var userPath = ( /k=([0-9a-f\-]+)/.exec( location.href ) || [ '', '' ] )[1];
 
 JMAP.auth.didAuthenticate({
-    username:       'user@example.com',
-    accessToken:    'password',
-    apiUrl:         '/jmap/'   + userPath,
+    username:       'test',
+    accessToken:    'wikisuite',
+    apiUrl:         'https://cyrus.suite.wiki/jmap',
     eventSourceUrl: '/events/' + userPath,
     uploadUrl:      '/upload/' + userPath,
     downloadUrl:    '/raw/'    + userPath + '/{blobId}/{name}'
diff --git a/index.html b/index.html
index 330c622..1c7b9f6 100644
--- a/index.html
+++ b/index.html
@@ -10,7 +10,7 @@
 </head>
 <body>
 <!-- Comment out the following line to talk to a real server -->
-<script type="text/javascript" src="fixtures.js"></script>
+<!-- script type="text/javascript" src="fixtures.js"></script -->
 
 <script type="text/javascript" src="libs/Overture.js"></script>
 <script type="text/javascript" src="libs/timezones-raw.js"></script>
[root@cyrus jmap-demo-webmail]#

Confirmation that JMAP is working

[root@cyrus ~]# curl -X POST -H "Content-Type: application/json" -H "Accept: application/json" --user test:wikisuite -d '[["getCalendars", {}, "#1"]]' http://localhost/jmap/
[["calendars",{"accountId":"test","state":"15","list":[{"id":"Default","x-href":"/dav/calendars/user/test/Default","name":"personal","mayReadFreeBusy":true,"mayReadItems":true,"mayAddItems":true,"mayModifyItems":true,"mayRemoveItems":true,"mayRename":true,"mayDelete":true}],"notFound":null},"#1"]]
[root@cyrus ~]#

[root@cyrus ~]# curl -X POST -H "Content-Type: application/json" -H "Accept: application/json" --user test:wikisuite -d '[[ "getMailboxes", {}, "#0" ]]' http://localhost/jmap/
[["mailboxes",{"accountId":"test","state":"23","notFound":null,"list":[{"id":"23b8b283-54b2-4953-83b1-dddfdf50d1ab","name":"Inbox","mustBeOnlyMailbox":false,"mayReadItems":true,"mayAddItems":true,"mayRemoveItems":true,"mayCreateChild":true,"totalMessages":1,"unreadMessages":0,"totalThreads":1,"unreadThreads":0,"parentId":null,"mayRename":false,"mayDelete":false,"role":"inbox","sortOrder":1},{"id":"5e8d9e35-76a6-4a54-9bb4-e8625f908670","name":"Drafts","mustBeOnlyMailbox":false,"mayReadItems":true,"mayAddItems":true,"mayRemoveItems":true,"mayCreateChild":true,"totalMessages":1,"unreadMessages":1,"totalThreads":1,"unreadThreads":0,"parentId":null,"mayRename":true,"mayDelete":true,"role":null,"sortOrder":10},{"id":"3334d6fb-f621-4b7b-9634-93eb193023d2","name":"Trash","mustBeOnlyMailbox":false,"mayReadItems":true,"mayAddItems":true,"mayRemoveItems":true,"mayCreateChild":true,"totalMessages":0,"unreadMessages":0,"totalThreads":0,"unreadThreads":0,"parentId":null,"mayRename":true,"mayDelete":true,"role":null,"sortOrder":10}]},"#0"]]
[root@cyrus ~]#

Notes for future documentation page

How to install

  1. Set up MX records
  2. install the eGloo release package: rpm -Uvh http://mirrors.egloo.ca/egloo/clearos/7.3/stable/x86_64/egloo-release-7-2.noarch.rpm
    • This will be simpler in the future
  3. Then install the IMAP and SMTP apps:
    yum --enablerepo=egloo-clearos-devel install app-imap app-smtp
  4. You will also need to do the following:
    • Create the default SSL certificate via the “System - Settings - Certificate Manager” app.
    • Create a user with IMAP and SMTP enabled.
    • Login via an IMAP client in order to create a mailbox for the user.


Optional: How to install Mail Forwarding on ClearOS

How to use

  • The extra features (CalDAV, CardDAV and JMAP) run on port 80 and/or 443, so Cyrus IMAP interferes with web server.
  • See URLs patterns above

Clients tested

DAVdroid

Automatic detection from email doesn't work but entering username, password and base URL works

Questions

  • Is it possible to have a logout feature? (which would make it easier to test with different accounts)


Known bugs / limitations

Accounts created in ClearOS are not reliably setup for CalDAV and CardDAV.

Solution: login to the account via IMAP.
peter.baldwin wrote:

Mailbox creation gotcha: The mailboxes get created on the fly:
- the first time the user logs in, or
- a mail message is delivered

peter.baldwin wrote:

The mailboxes for test and nikola.tesla were created, but the relevant subfolders were not. You can browse the mailboxes in /var/spool/imap/ by the way. Here's what it looked like in the log:

Aug 18 14:52:16 cyrus lmtp[12030]: autocreateinbox: autocreate inbox for user test was called
Aug 18 14:52:16 cyrus lmtp[12030]: autocreateinbox: User test, INBOX was successfully created
Aug 18 14:52:16 cyrus lmtp[12030]: WARNING: sieve script /var/lib/imap/sieve/t/test/defaultbc doesn't exist: No such file or directory
Aug 18 14:52:16 cyrus lmtp[12030]: Delivered: to mailbox: user.test

Looking back at my "peter" account, I can see that tried the RSS feed link for a sanity check - https://cyrus.suite.wiki/rss/user/peter This prompted me for a login and I could view my RSS feed. Under the hood, this showed up in the log:

Aug 17 18:18:47 cyrus https[19262]: login: cpe.teksavvy.com peter Basic+TLS User logged in SESSIONID=
...
Aug 17 18:18:47 cyrus https[19262]: creating sql_db /var/lib/imap/user/p/peter.dav

It looks like that "dav" folder is needed by the calendars and addressbook but only created on an IMAP login. If you were to login using an IMAP client, I'm guessing everything would be ok.



For developers

History

Advanced
Information Version
Marc Laporte 101
View
Marc Laporte Adding info about containers 100
View
Marc Laporte Page renamed from ClearOS, Cyrus IMAP 3 and JMAP development to Cyrus IMAP 3 and JMAP development. Semantic alias redirect created 99
View
Marc Laporte 98
View
Marc Laporte 97
View
Marc Laporte 96
View
Marc Laporte 95
View
Marc Laporte Latest commit b0c7996 on Mar 4, 2018 We will use Docker going forward 94
View
Marc Laporte 93
View
Marc Laporte 92
View
Marc Laporte JMAPdroid! 91
View
Marc Laporte 90
View
Marc Laporte Updated links 89
View
Marc Laporte 88
View
Marc Laporte 87
View
Marc Laporte Page renamed from ClearOS and Cyrus IMAP 3 testing to ClearOS, Cyrus IMAP 3 and JMAP development. Semantic alias redirect created 86
View
Marc Laporte 85
View
Marc Laporte 84
View
Marc Laporte 83
View
Marc Laporte 82
View
Marc Laporte 81
View
Marc Laporte 80
View
Marc Laporte 79
View
Marc Laporte 78
View
Marc Laporte 77
View
Marc Laporte 76
View
Marc Laporte 75
View
Marc Laporte 74
View
Marc Laporte 73
View
Marc Laporte 72
View
Marc Laporte 71
View
Marc Laporte 70
View
Marc Laporte 69
View
Marc Laporte 68
View
Marc Laporte 67
View
Marc Laporte 66
View
Marc Laporte 65
View
Marc Laporte 64
View
Marc Laporte 63
View
Marc Laporte 62
View
Marc Laporte 61
View
Marc Laporte rss Plugin modified by editor. 60
View
Marc Laporte rss Plugin modified by editor. 59
View
Marc Laporte 58
View
Marc Laporte rss Plugin modified by editor. 57
View
Marc Laporte 56
View
Marc Laporte 55
View
Marc Laporte 54
View
Marc Laporte 53
View
Marc Laporte 52
View
  • «
  • 1 (current)
  • 2