About tinymail - the technical story

Tinymail is a development framework for building E-mail clients on devices with few resources; like mobile devices (phones and PDAs) and embedded devices. It best dissertation supports IMAP, POP, NNTP and a series of local formats like Maildir. It supports a lot of the IMAP Lemonade profile. It can be used to send messages over SMTP and using Sendmail. It supports SSL and many authentication methods. It can be used offline (it stores cache locally). It's licensed under the LGPL.Because mobile and embedded devices are all different, it's designed as a framework. It abstracts and implements both an E-mail service access framework and a user interface framework. Both can be used separate from each other. Both can be reimplemented and are abstracted by interfaces. The default implementation of the E-mail service framework uses the Camel API of which a much enhanced version is embedded in Tinymail's build procedure. The default implementation of the user interface framework uses the Gtk+ API, which is an optional external dependency. Some components use a specialized API. There are for example components that implement a message view for messages that are formatted using HTML. There are also components for detecting the connection status of the device using c. You can reimplement such components for your specific device. For example if your device fits in a cradle and specific code is needed to detect that status and use that in the E-mail client, you can do that.The framework allows a full reimplementation, using very different technologies. It allows you to do this without having to break API nor ABI compatibility with the tinymail framework and components built on top of it.Implementing such a specific version happens by implementing an interface. There are unit tests for each Tinymail interface and all of Tinymail's API is fully covered with design by contract checking. These tests will test your implementation for correctness. Vendors are encouraged but not required to bring their specific implementations to the LGPL source code repository of Tinymail. There are already such platform libraries for OLPC, Maemo, the GNOME desktop, Moblin and GPEessay topics. They serve both as examples and code that is being used by projects built on top of Tinymail today.

The build environment has special support for creating new such platform libraries. It will for example attempt to fully automatically generate language bindings for your platform library. It currently only does this for Python and Vala, but .NET, Java, Perl and C++ are going to be added soon.

Generic information

Technical

On dependencies, an important misconception

Tinymail is not bound to the, nor depends on the Gtk+ framework. It has default user interface components for Gtk+ that will optionally be built at compilation, though.

Because Tinymail reuses the same object library which Gtk+ also uses (which is GObject), it of course integrates very well with Gtk+. But that in itself does not make Tinymail depend on the entire Gtk+ framework.

Since GObject is usable as a standalone library, it means that Tinymail only strictly depends on GObject and its dependency Glib. Both are ANSI C libraries that should compile on any POSIX operating system. Both have already been ported to a wide range of platforms and share a huge developers base (an entire GNOME community of developers) that have plenty of knowledge about it. Both are also extensively documented and where needed has their use also been documented within the Tinymail documentation. freelance online writing jobs

Marketing to do items

Application development with Tinymail

This section of the technical website describes how to develop your own applications on top of the Tinymail framework. It covers subjects like how to implement certain Tinymail interfaces, how to inherit existing components and how to use existing components, base class and interface API. It also touches some of the inner workings of Tinymail so that you, as an application developer, comprehend some of the design decisions and reasons why you will have to do something in a specific way (if you want to do it right).

Opensource/free software E-mail clients

Other people's code is usually useful as a learning tool. You can study their code and see how they used Tinymail's API to achieve certain things.

  • TMut is an E-mail client for devices like phones. Developed by Tinymail's maintainer.

The usual stuff

Let's get to the point: devdocs

Devdocs are some manuals and pointers to external manuals about some development tools, principles, libraries and concepts being used by Tinymail.

Manuals and tutorials for application developers

Note that a lot examples in these tutorials use gtk+ components. This does not mean that Tinymail strictly depends on Gtk+. It does, obviously, however, mean that the examples themselves depend on Gtk+. You are encouraged to add (not replace) the examples with examples that use non-gtk+ components to achieve the same result.

Key concepts

This manual describes some key concepts of application development with Tinymail.

Before you can start your application development

These manuals describe the types that you either have to implement or borrow from the existing stack of implementations in Tinymail before you can start creating your glamorous E-mail clients.

Scenarios with libtinymail and libtinymailui with libtinymailui-gtk

These manuals describes some scenarios that you'll likely encounter when developing applications on top of the Tinymail framework.

Further documentation about some other default components

These manuals describe some details about certain default components of the framework. They'll help you creating something quickly, yet correctly.

Tinymail's development

This section of the technical website describes how to help development of Tinymail itself. It covers subjects like how the build environment is setup, how to get its design by contract stuff right, how to build unit tests, how to implement new types and how to improve existing ones. It also covers subjects like debugging and testing the Tinymail framework itself. This section is always under construction.

Tinymail 2.0

How can I help?, where do I start?

Some of this documentation touches the internals of Tinymail. Sometimes it has very few to do with how you should use Tinymail as an application developer.

Development tips and documentation about tinymail's internals

Design

Design considerations

Some UML diagrams