What tinymail supports

Support for platforms

Tested devices

Device nameArchitectureDevelopment platformMore information
Nokia 770220MHz TI OMAP 1710Maemomore
Nokia N800330MHz TI OMAP 2420Maemomore
OLPCAMD Geode GX-500@1.0WOLPCmore
IPAQ H2200Intel PXA255Linux 2.6.16, Gtk 2.10-
IPAQ HX4700Intel PXA270Linux 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 nameRFC
IMAP version 4RFC 2060, 3501, 4551, 3516, 2177
NNTPRFC 977
POP3RFC 1939
SMTPRFC 0821
POP3 + SSL/TLSRFC 2595
IMAP + SSL/TLSRFC 2595
SMTP + SSL/TLSRFC 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)