What tinymail supports
Support for platforms
Tested devices
| Device name | Architecture | Development platform | More information |
| Nokia 770 | 220MHz TI OMAP 1710 | Maemo | more |
| Nokia N800 | 330MHz TI OMAP 2420 | Maemo | more |
| OLPC | AMD Geode GX-500@1.0W | OLPC | more |
| IPAQ H2200 | Intel PXA255 | Linux 2.6.16, Gtk 2.10 | - |
| IPAQ HX4700 | Intel PXA270 | Linux 2.6.16, Gtk 2.10 | - |
Other devices
- Devices with a recent version of GPE
- Devices with any version of the Maemo
- Linux desktops with a x86, x86_64 / AMD64, etc CPU
Getting it to work on new devices
Core dependencies:
- GLib-2.0 >= 2.8 (needs the new GSlice allocator)
- GObject-2.0
- GThread-2.0
- pthread with a working pthread_cancel
- Availability of mmap() or CreateFileMapping()
- There is nothing in the code that is bound to a specific CPU (or it's a bug)
- Having POSIX is very useful (support for WinCE is planned)
The default ui components:
- Gtk+-2.0 2.8
Note: So far, only Linux 2.6.x has been tested.
RFCS utilized by Tinymail
| Protocol name | RFC |
| IMAP version 4 | RFC 2060, 3501, 4551, 3516, 2177 |
| NNTP | RFC 977 |
| POP3 | RFC 1939 |
| SMTP | RFC 0821 |
| POP3 + SSL/TLS | RFC 2595 |
| IMAP + SSL/TLS | RFC 2595 |
| SMTP + SSL/TLS | RFC 2487 |
Notes about these protocols
- Support for IMAP IDLE capability (RFC 2177, Push E-mail)
- Support for BINARY IMAP capability (RFC 3516)
- Support for QRESYNC LEMONADE IMAP capability (RFC is in draft)
- Support for CONDSTORE LEMONADE IMAP capability (RFC 4551)
- Support for ENABLE IMAP capability
- Support for STARTTLS IMAP feature
- The SSL/TLS implementation uses
- or OpenSSL
- or Mozilla's NSS library
- Supports both IPv4 and IPv6
- Sending E-mails can be done using both a sendmail client and SMTP
- Supports local folder types "mbox", "mh", "spool" and "Maildir"
- Support for SASL authentication:
- DIGEST-MD5
- CRAM-MD5
- GSSAPI
- Kerberos 4
- NTLM/SPA
- PLAIN
- Login
- POP before SMTP
Offline mode & reading your E-mail when you are not connected
- Supports offline mode for all protocols supported
- Uses mmap() to load-in the summary information (would otherwise consume most of the memory of the E-mail client)
- The summary is stored and retrieved separately from the messages (for IMAP, POP3 and NNTP)
- The summary includes headers like From, To, Subject, Date, Received
- The summary includes content information (information about the structure of the message)
- Caches already retrieved E-mails on the local filesystem
- Fully (both the message and its attachments)
- Partially (only the message, not its attachments) to safe storage room
Notes about partial & summary retrieval
Partial retrieval means retrieving only the message, not the attachments (nor other such mime parts). This of course reduces bandwidth, memory and filesystem consumption. Summary retrieval means retrieving only the summary information of your messages. The summary information includes some headers like "From", "To", "Subject" and the received and sent dates and the content information (the body structure).
- IMAP summary retrieval uses the IMAP4 command "UID FETCH uid (FLAGS INTERNALDATE BODY.PEEK[HEADER.FIELDS (DATE FROM TO CC SUBJECT MESSAGE-ID)])" (not yet ENVELOPE, but soon will)
- IMAP partial retrieval uses the "UID FETCH uid BODY.PEEK[part-spec]" IMAP4 command.
- POP3 summary retrieval uses the POP3 command "TOP uid 0"
- POP3 partial retrieval searches the headers for the boundary, if found it will interrupt the connection the second time the boundary was found in the message assuming that non-multipart message have no boundary that that all multipart messages are correctly formatted. Some POP3 servers might not like the disconnecting. For that reason it's advisable to allow your MUA user to configure the partial retrieval availability for POP3 (allowing to turn it off).
- Summary support for NNTP is available
- Partial retrieval for NNTP is not available
Exotic protocols
- Support for Exchange (without the need to setup an IMAP gateway) is available if the device can also run ORBit-2 & Bonobo
- Support for MAPI (Exchange) without the need to run ORbit-2 & Bonobo is being developed
Important to know, features and support in Tinymail
- Will cache the summary information of folders in a summary.mmap file
- Uses the memory efficient mmap() technique for loading the summary information of a folder into memory
- Can cache already-received messages for offline viewing
- Fully: the entire message is stored on a filesystem as-is
- Partially: only the first part of a multipart is stored, not its attachments
- Uses GConf for the GPE, Maemo and GNOME-Desktop specific implementation
- Uses a ini-file configuration for the OLPC laptop specific implementation
- Makes it possible to reimplement components being used without loosing compatibility with other components (interface oriented)
Specific support for something
- Uses Gtk+ for the implementation of some default ui components
- A header view
- A message view which aggregates a header view and mime-part viewers
- Mime-part viewers for attachments and text/html and text/plain mime parts
- A folder-view (summary viewing)
- A folder-list view (like viewing an account)
- Supports NetworkManager for detecting online/offline status of the device
- Supports Gnome-Keyring for password storage
- Supports viewing HTML E-mails using the Gecko layout rendering widget
- Supports disabling viewing images
- Supports disabling scripts
- Does not support cid images (attached images)
- Supports viewing HTML E-mails using GtkHTML
- Note to self: I still need to commit this
- Supports disabling viewing images (anti spam)
- Supports disabling scripts
- Supports cid images (attached images)
- Supports developing your E-mail client in Python (has language bindings for Python)
- A recursive mime part view for rfc822 mime parts (forwarded messages)
- A mime part view for images
Documentation
- Has an API reference manual (Both gtk-doc and Doxygen)
- Has many samples, tests and demos. Including a demo in C and in Python
- Has this trac as development documentation
- Has class diagrams and other such developer documentation
Testing
- Tests all its significant types and functionality using unit tests
- Constant memory measurements happen (manually)
- Automated API and ABI testing to make sure that we don't break it
Planned
High priority planning
- Support for dumping and merging folder cache
- A mime-part view for .ics meeting requests (for example as integration with Dates)
- Support for COMPRESS LEMONADE IMAP feature
Low priority planning
- Searching already-received messages and cached folder summary information
- .NET bindings
- Deep integration with calendaring applications like Dates
- Integration with PGP libraries (like Seahorse)
