Brainstorming for Better Email Software
Update: This brainstorming resulted in the development of an opensource webmail application. The project is currently under development but you can access our web site to receive news and if you want you can participate too.
Problems of Email Software
- Slow when the volume of emails and attachments is big (when using IMAP)
- Poor indexing and search features (no database)
- Not accessible from anywhere (when using POP and deteting emails after checking)
- Slow (when using conventional webmails)
- Can't upload large attachments in webmail
- Serious problems when receiving large attachments in desktop email clients (time out problems, everending download, etc...)
Solutions
- Store email text in a database and attachments on the file system (use of regular expressions to parse incoming emails)
- Design a fast and full-featured webmail application
- Client-side standalone Javascript application
- PHP/MySQL back-end with additional connectors for SQLite and BerkeleyDB
- Cron jobs
- Use only the webmail application or design a desktop application that works the same way
- Store all information in Javascript variables and arrays (ie: address book, messages of the Inbox, messages that are downloaded later on, settings, etc...)
- NEVER need to reload the whole page
- Asynchronous, fast communication with the server (ie: When I click "Send", I don't have to wait for the server feedback. Instead, I have the "Sent" confirmation right away, or an error message in the corner later)
Proposal for the webmail application
Management
- Multiple identities with multiple signatures
- Multiple POP/IMAP/SMTP servers
- Address book importer/exporter (multiple formats)
- Email forwarding (formard emails to another or to other accounts automatically)
- Retrieve email from external accounts
Interface
- Virtual tabs
- Ability to open several messages at the same time in tabs
- Calculate used space on disk, in the database, grab allocated user space from the global settings and display percentage of used space
- Compiled templates with languages (loads faster; lower resource usage)
Email reception
- Automatic check of local and remote accounts at a specified interval with a cron job
- Parsing of incoming emails, separation of text and attachments, storage of text content to a database, storage of files to the file system
- Database reindexed at a specific interval with a cron job
- Sound alert on email reception (optional)
- Window focus on email reception (optional)
- All messages from the first page of the Inbox are stored in a Javascript array. As you open other pages and directories (Page 2 of Inbox, Sent, Draft...), messages are stored into Javascript arrays as well, so that they're downloaded always only once
Email reading
- Messages grouped by conversations with all messages of a specific conversation organized into a thread, one after the other, sorted by date
- Multimedia preview (image thumbnails, embedded Flash music player)
- Delete specific message from a thread
- Tag important messages with a star for future reference (starred messages)
- Parse phone numbers, link and prepend them with the call:// protocol for VoIP applications
- Possibility to open email in new centered window
- Forward all thread
- Add keywords to messages that are almost empty so that they are visible in searches (ie: messages that only have an attachment)
- Display images embedded in HTML emails only if user allows them to be displayed. He can:
- Display images only now
- Always display images from this specific sender
- Printable version
Compose
- Find-as-you-type feature to add a contact to the list of recipients (using Javascript regular expression)
- All address book is copied to a Javascript array
- Start file upload right away when attaching a file
- Warn user if attachment is too big before the end of the upload
- Ajax upload progress bar
- Attach a file located on the server using the file manager (upload once, attach many)
- If user replies to a message, add the recipient's email address to the address book if not there yet (if user decides to)
- Spell check
- Sign email digitally
- Digital encryption
- Label message as waiting for response til MM/DD/YYYY (if no response by then, the system emails the user to let him know he didn't get a reply)
- Plain text and HTML formats; plain text and HTML templates for business newsletters
- Add X-Tags to email header:
- X-Emoticon (for message lists and message)
- X-Avatar-URL (for message lists and message)
- Include a short link inside the message to one of the user's file for the recipient to click and download (instead of attaching the file physically)
- Increase upload limit
with .htaccess file:
- php_value post_max_size 100M
- php_value upload_max_filesize 100M
- php_value memory_limit 100M
- Automatic draft saving (every 60 seconds)
- Possibility to compose email in new centered window holding down Shift key while clicking Compose button
Usability
- Threaded view of messages
- Show original message
- Multiple account option
- Advanced search
- Selectable number of search results per page
- Selectable number of messages in message lists
- Theming options (colors, icons, logo)
- Standalone Javascript application that communicates with the server only each x minutes or if the synchronization function is triggered manually
Email management
- "Always Spam" and "Never Spam" buttons (white and black lists)
- Filtering rules
- Labels (ie: Music, Job, Projects, Linux...) to tag messages (can have more than one label per message)
- Sublabels (unlimited subcategories)
- Search shortcuts (ie: 'has:attachment'; 'label:inbox'; 'hasno:label')
- Advanced search:
- By day, week, month, year
- By label
- With/without attachments
- From recipient
- Matches string
- Regular expression (for advanced users)
- "Delete all spam" link
Backup
- Asynchronous backup utility triggered by the user:
- Cron job checks every x minutes if a backup has been scheduled and performs a backup if asked to
- Compress /attachments/user_at_example_dot_com directory and database dump of user data into .tbz file
- Backup file stored in specific location only known and accessible by the user
- User receives an email with instructions to retrieve backup, and to import somewhere else
- Backup deleted after x days
- Import email formats from Outlook Express, Outlook, Opera and Thunderbird (if possible!)
- Scheduled daily/weekly/monthly backups
Extra utilities
- Address Book
- List of contacts
- Group management (to send mailing lists)
- File Manager
- Each file has a special identifier that starts with a recognizable string (ie: FILE|4Hb8Dc38iH)
- If this identifier is found in a new message, the application turns it into a link that allows the recipient to click and download the file
- Todo List
- Buddy List & Chat feature (optional)
- Jabber, Gtalk
- MSN
- Yahoo
- AIM, ICQ
- Calendar (optional)
Settings
- General
- Number of messages per page (Inbox, Sent, Spam...)
- Synchronization frequency (Default: Each 5 minutes)
- When sending mailing list: Maximum number of emails sent per hour (cPanel allows at most 200 by default)
- Manage digital IDs (Digital Certificates)
- Manage personal avatar (50x50 px)
- Spam retention period (ie: 30 days)
- Language
- Vacation responder: Enable/Disable
- Subject
- Message
- Only send a response to people in my Contacts (Yes/No)
- Signature (Yes/No)
- Show/Hide contact avatars in message lists and address book
- Enable smileys in message bodies
- Date and time formats
- On new message:
- Sound alert (Yes/No)
- Set focus on window (Yes/No)
- Accounts
- Send mail as (select email account)
- Add another email address
- When I receive a message sent to one of my addresses:
- Reply from the same address the message was sent to.
- Always reply from my default address
- Get mail from other accounts
(download mail using POP3)
- Manage servers
- Add server (POP, IMAP, SMTP)
- Password modification
- Current password
- New password (twice)
- Secret question (drop-down menu with several possible questions)
- Answer to secret question
- Labels
- List of labels (ex: Job, Hobbies, Computing, Trips)
- Add/Rename/Remove labels, set different colors for each label
- Filters
- List filters
- Add email filter
- Condition:
- From: (email address)
- Has the words: (keywords)
- To: (name of email address)
- Doesn't have: (keyword)
- Subject: (keyword)
- Has attachment
- Then:
- Skip the Inbox (Archive it)
- Star it
- Apply the label: (list of labels)
- Forward it to: (field)
- Delete it
- Also apply filter to x conversations below
- Remove filter
- Forwarding
- Disable forwarding
- Forward a copy of incoming mail to <email_address> and:
- Keep a copy in the inbox
- Archive message
- Delete message
Miscellaneous
- Keep user logged in if:
- The cookie session ID hasn't changed
- The user hasn't logged out here or elsewhere
- Javascript-free version for certain users
- Mobile version for celular phones and handheld devices
- URL Rewrite
- Use utf-8 encoding
- Reasonable CPU/RAM usage even for the full-featured Ajax version
- "Loading" screen
- Compatible with the following browsers: Internet Explorer 6 and 7; Firefox; Opera; Konqueror and Safari (latest versions).
- Don't show the client is communicating with the server, only show an error message if the connection is lost or something went wrong
- Stats: Number of messages, number of attachments, number of contacts, number of emails sent and received this month, average per day
- Full technical documentation in one of these formats: HTML, ODT, RTF, CHM, PDF
Challenges
- What do you think is the best way to apply a label to a message?
- Drop-down menu
- +/- next to each label
- A tag cloud underneath the message
- Any other suggestion?
- Is it possible to keep the client-side Javascript standalone application snappy?
- How could a desktop email client communicate with a database-driven email system?
- Using the same remote PHP back-end with SQL queries
- Any other suggestion?
landemaine@gmail.com