Cypht is the Open Source webmail program I have been toiling away on for the last few years. It stands out from the competition because of a few unique options, not that it doesn’t have its own warts. But let’s focus on the positive, and not talk about things like the painful installation process, outstanding bugs, or unfinished features. I wouldn’t be doing a very good job converting this blog into a propaganda platform for the project with a title like “5 Shitty Cypht Webmail Features“. Also, I’m a dork. What I think qualifies as cool is known to be subjective.
1. Stand Alone Authentication
Pretty boring opener, but bear with me. Typically webmail programs are designed to point to an E-mail source, like an IMAP or POP3 server, for authentication. They pass the username and password you give them on to the E-mail server, which then tells the webmail program if you are legit or bogus. Cypht boldly (not really) breaks this paradigm by splitting authentication from your E-mail sources.
We support using LDAP or a database to authenticate users, as well as the old-school method of using a pre-configured IMAP or POP3 server. Adding new authentication mechanisms is designed to be easy (relatively), so any source that can verify your username and password can be coded up. We even support a dynamic login process that lets you pick from common E-mail service providers, and can auto-discover E-mail services for a domain (sometimes).
2. Combined Views
Cypht provides combined lists of E-mail messages from all your accounts. One of the reasons I started working on yet another webmail program, was because I wanted this feature. I spend 95% of my time using these views for my E-mail needs, and very little time browsing folders and pages like it’s 1999 (though Cypht supports this as well)
Show me the latest 20 unread messages from each of my accounts over the last 2 weeks in one list? Done. Search for the boarding pass I misplaced even though I forgot which E-mail account I used to make the reservation, and the plane takes off in 5 minutes? Done (this actually happened to me). If you have more than one E-mail account, combined views quickly become the bee’s knees. If you only have one E-mail address, you probably should have skipped this section.
3. Module Sets
Plugins are cool. Module sets are cooler. First of all, they sound cooler. Secondly, module sets are not just a way to bolt on features. Cypht is entirely built of module sets, and a framework to run them. Only one is required, the “core” set. It does things like basic page layout and login/logout. Everything else (IMAP, SMTP, POP3, RSS, contacts, profiles, the list goes on) is its own module set, and can be enabled or disabled independently.
As if that wasn’t the ultimate in coolness, there’s more! Module sets can override each other. Don’t like the default behavior of a core module? You can change it without hacking a single line of Cypht code by creating your own module set that overrides it. I need a sweater it’s getting so cool in here! There is even some poorly written documentation about module sets for aspiring developers.
4. Focus on Security
Security is serious business for a webmail program. So many attack vectors! From filtering out nasties, to TLS everywhere, to encrypting data at rest – Cypht goes the extra mile to try to cover all the bases. Cypht was built with security and privacy as core design principles.
Securing a complex web application is a process, and we welcome feedback and suggestions to continue to improve. For the gory details, check out our security page with a list of impressive sounding technical stuff.
5. Production and Debug Mode
Cypht has two modes of operation. “Debug” mode is what you use when troubleshooting issues or doing development. “Production” mode is what you use when … in production. Debug mode fire-hoses your PHP log with information about each request, enables all errors and warnings, and activates new modules as you create them for a quick write-then-test cycle. Production mode uses combined and minfied assets, silences warnings, and pre-calculates module dependencies.
If you are looking for a different kind of webmail, one that is lightweight, secure, and has a complicated install process -check out Cypht. Or don’t. It’s cool.
I have tested your Cypht webmail system. It is quite good but I have some problems/wishes I’d like to share:
1. I’d like to be able to configure at site- and user-level which menu item is the starting page. The combined inbox would be the best for many of my users, but some may find one of their accounts preferred.
2. I can’t seem to find the way to display the HTML messages in HTML at once. It always the text version that loads, and clicking on the html attachment brings the formatted message. Also, the merge of the text, html, style, and binary attachments makes difficult to see the attachments.
3. I have tested Cypht on a mobile Google Chrome, and accessing the menu was quite difficult. The right-sweep you mention doesn’t work for me.
Hello! I fixed the swipe right issue, thanks for the feedback. I’m happy to address your other suggestions. Could you create issues here: https://github.com/jasonmunro/cypht/issues. Thanks!
Hi, thanks for the swift fix. I have left my suggestions on GitHub.
Pingback: Even More Multiple Monitor Gaming On Linux – Unencumbered by Facts
Would you be able to give us a little more help on overriding modules ?
For example I would like to change the email date display from so many hours / dasy ago to an actual date and time.
I have found the line of code in the imap module which produces the display and I can modify the line to produce the output I would like.
I would prefer to use the inbuilt ability to override the module output but haven’t yet been able to work out how to do it. I have looked at the hello world module but it does not seem to offer much assistance.
I have tried copying the module files to a separate directory and including that “module” after the imap module.
I have also tried putting an entry in the site module setup.php file and enabling the site module.
Nothing works!! I obviously haven’t understood the mechanism correctly. Would you be able to publish something using this as an example??
Anyy assistance would be much appreciated.
Hi Mike, thanks for the feedback. Replacing modules should only require that you do a few things (in this example we use the site module set, but you could create your own and follow similar instructions):
1. Determine which module you want to replace. In a module set modules.php file, these are classes that start with Hm_Handler or Hm_Output.
2. In the site module set, create a new module to replace it, with a different name, in the modules.php file. Let’s assume you want to replace “Hm_Handler_foo”, you would create a new module to replace it called “Hm_Handler_myfoo”.
3. In the setup.php file for the site module set, you would add a line like so:
replace_module(‘handler’, ‘foo’, ‘myfoo’);
4. Make sure the site module set is enabled in your hm3.ini
5. Re-run the config gen script to register your module override
Now any page processing that calls Hm_Handler_foo, will instead call Hm_Handler_myfoo.
Having looked at this specific request however, I realize there is a flaw in this. Replacing
modules that just do a bit of work is great, but some modules do quite a few things, AND call
functions to do formatting etc. To change the date format you would have to override a number
of modules, and duplicate the functions they call until you get down to the exactly place where
a date is formatted so you can override it. That stinks 🙂
I think I have a better solution, as detailed in this issue I just created: https://github.com/jasonmunro/cypht/issues/236
It looks like you have taken that on as a project. I’ll keep an eye on the announcements.
Excellent work on the structure. I was looking for something which handles mutiple imap accounts; there is not much about in the open source field. The ability to View All is an added bonus.
I have updated the code as described in the issue. You can now use the site module set to override any function in another module set. You need only define the function with the same name in the site/lib.php file, and make sure it has the same arguments and return type.
There must be an option for auto saving the data. Like if I have added my smtp and other info it must be auto save because there is a possibility if I don’t save it manually and close the browser. In this case my all the email setups will be lost.