Go to file
Sebastian Spaeth b69a745417 Changelog entry
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2012-02-16 11:54:53 +01:00
bin Convert to use OptionParser for command line handling. 2010-12-15 20:02:27 +01:00
docs Improve nametrans user documentation 2012-02-13 16:07:33 +01:00
offlineimap Improve nametrans local->remote folder syncing 2012-02-16 11:45:18 +01:00
test Improve nametrans local->remote folder syncing 2012-02-16 11:45:18 +01:00
.gitignore Add beginnings of sphinx-based code documentation 2011-04-27 18:57:41 +02:00
Changelog.draft.rst Changelog entry 2012-02-16 11:54:53 +01:00
Changelog.maint.rst v6.3.2.1 2011-03-16 20:46:18 +01:00
Changelog.rst Release v6.5.2.1 2012-02-04 21:11:44 +01:00
COPYING Update FSF address 2006-08-12 05:15:55 +01:00
COPYRIGHT Update copyright 2009-08-12 00:41:42 -05:00
Makefile v6.3.2.1 2011-03-16 20:46:18 +01:00
offlineimap.conf Improve nametrans user documentation 2012-02-13 16:07:33 +01:00
offlineimap.conf.minimal Improve nametrans user documentation 2012-02-13 16:07:33 +01:00
offlineimap.py Convert to use OptionParser for command line handling. 2010-12-15 20:02:27 +01:00
README.rst README: don't use github features for contributions 2011-01-19 20:02:24 +01:00
setup.py Improve test suite and add test 2012-01-20 15:55:44 +01:00
SubmittingPatches.rst We have a (read-only) commit mailing list 2012-01-20 00:42:58 +01:00

.. -*- coding: utf-8 -*-

.. _mailing list: http://lists.alioth.debian.org/mailman/listinfo/offlineimap-project

======
README
======

.. contents::
.. sectnum::


Description
===========

Welcome to the official OfflineIMAP project.

*NOTICE:* this software was written by John Goerzen, who retired from
maintaining. It is now maintained by Nicolas Sebrecht at
https://github.com/nicolas33/offlineimap. Thanks to John for his great job and
to have share this project with us.


OfflineIMAP is a tool to simplify your e-mail reading. With OfflineIMAP, you can
read the same mailbox from multiple computers. You get a current copy of your
messages on each computer, and changes you make one place will be visible on all
other systems. For instance, you can delete a message on your home computer, and
it will appear deleted on your work computer as well. OfflineIMAP is also useful
if you want to use a mail reader that does not have IMAP support, has poor IMAP
support, or does not provide disconnected operation.

OfflineIMAP works on pretty much any POSIX operating system, such as Linux, BSD
operating systems, MacOS X, Solaris, etc.

OfflineIMAP is a Free Software project licensed under the GNU General Public
License. You can download it for free, and you can modify it. In fact, you are
encouraged to contribute to OfflineIMAP, and doing so is fast and easy.


OfflineIMAP is FAST; it synchronizes my two accounts with over 50 folders in 3
seconds.  Other similar tools might take over a minute, and achieve a
less-reliable result.  Some mail readers can take over 10 minutes to do the same
thing, and some don't even support it at all.  Unlike other mail tools,
OfflineIMAP features a multi-threaded synchronization algorithm that can
dramatically speed up performance in many situations by synchronizing several
different things simultaneously.

OfflineIMAP is FLEXIBLE; you can customize which folders are synced via regular
expressions, lists, or Python expressions; a versatile and comprehensive
configuration file is used to control behavior; two user interfaces are
built-in; fine-tuning of synchronization performance is possible; internal or
external automation is supported; SSL and PREAUTH tunnels are both supported;
offline (or "unplugged") reading is supported; and esoteric IMAP features are
supported to ensure compatibility with the widest variety of IMAP servers.

OfflineIMAP is SAFE; it uses an algorithm designed to prevent mail loss at all
costs.  Because of the design of this algorithm, even programming errors should
not result in loss of mail.  I am so confident in the algorithm that I use my
own personal and work accounts for testing of OfflineIMAP pre-release,
development, and beta releases.  Of course, legally speaking, OfflineIMAP comes
with no warranty, so I am not responsible if this turns out to be wrong.


Method of Operation
===================

OfflineIMAP traditionally operates by maintaining a hierarchy of mail folders in
Maildir format locally.  Your own mail reader will read mail from this tree, and
need never know that the mail comes from IMAP.  OfflineIMAP will detect changes
to the mail folders on your IMAP server and your own computer and
bi-directionally synchronize them, copying, marking, and deleting messages as
necessary.

With OfflineIMAP 4.0, a powerful new ability has been introduced ― the program
can now synchronize two IMAP servers with each other, with no need to have a
Maildir layer in-between.  Many people use this if they use a mail reader on
their local machine that does not support Maildirs.  People may install an IMAP
server on their local machine, and point both OfflineIMAP and their mail reader
of choice at it.  This is often preferable to the mail reader's own IMAP support
since OfflineIMAP supports many features (offline reading, for one) that most
IMAP-aware readers don't.  However, this feature is not as time-tested as
traditional syncing, so my advice is to stick with normal methods of operation
for the time being.


Quick Start
===========

If you have already installed OfflineIMAP system-wide, or your system
administrator has done that for you, your task for setting up OfflineIMAP for
the first time is quite simple.  You just need to set up your configuration
file, make your folder directory, and run it!

You can quickly set up your configuration file.  The distribution includes a
file offlineimap.conf.minimal (Debian users may find this at
``/usr/share/doc/offlineimap/examples/offlineimap.conf.minimal``) that is a
basic example of setting of OfflineIMAP.  You can simply copy this file into
your home directory and name it ``.offlineimaprc`` (note the leading period).  A
command such as ``cp offlineimap.conf.minimal ~/.offlineimaprc`` will do it.
Or, if you prefer, you can just copy this text to ``~/.offlineimaprc``::

  [general]
  accounts = Test

  [Account Test]
  localrepository = Local
  remoterepository = Remote

  [Repository Local]
  type = Maildir
  localfolders = ~/Test

  [Repository Remote]
  type = IMAP
  remotehost = examplehost
  remoteuser = jgoerzen


Now, edit the ``~/.offlineimaprc`` file with your favorite editor.  All you have
to do is specify a directory for your folders to be in (on the localfolders
line), the host name of your IMAP server (on the remotehost line), and your
login name on the remote (on the remoteuser line).  That's it!

To run OfflineIMAP, you just have to say offlineimap ― it will fire up, ask you
for a login password if necessary, synchronize your folders, and exit.  See?

You can just throw away the rest of this finely-crafted, perfectly-honed manual!
Of course, if you want to see how you can make OfflineIMAP FIVE TIMES FASTER FOR
JUST $19.95 (err, well, $0), you have to read on!


Documentation
=============

If you are reading this file on github, you can find more documentations in the
`docs` directory.

Using your git repository, you can generate documentation with::

	$ make doc


Mailing list
============

The user discussion, development and all exciting stuff take place in the
`mailing list`_. You're *NOT* supposed to subscribe to send emails.


Reporting bugs and contributions
================================

Bugs
----

Bugs, issues and contributions should be reported to the `mailing list`_.
**Please, don't use the github features (messages, pull requests, etc) at all.
It would most likely be discarded or ignored.**


========
Examples
========

Here are some example configurations for various situations.  Please e-mail any
other examples you have that may be useful to me.


Multiple Accounts with Mutt
===========================

This example shows you how to set up OfflineIMAP to synchronize multiple
accounts with the mutt mail reader.

Start by creating a directory to hold your folders by running ``mkdir ~/Mail``.
Then, in your ``~/.offlineimaprc``, specify::

  accounts = Personal, Work


Make sure that you have both an [Account Personal] and an [Account Work]
section.  The local repository for each account must have different localfolder
path names.  Also, make sure to enable [mbnames].

In each local repository section, write something like this::

	localfolders = ~/Mail/Personal


Finally, add these lines to your ``~/.muttrc``::

  source ~/path-to-mbnames-muttrc-mailboxes
  folder-hook Personal set from="youremail@personal.com"
  folder-hook Work set from="youremail@work.com"
  set mbox_type=Maildir
  set folder=$HOME/Mail
  spoolfile=+Personal/INBOX


That's it!


UW-IMAPD and References
=======================

Some users with a UW-IMAPD server need to use OfflineIMAP's "reference" feature
to get at their mailboxes, specifying a reference of ``~/Mail`` or ``#mh/``
depending on the configuration.  The below configuration from (originally from
docwhat@gerf.org) shows using a reference of Mail, a nametrans that strips the
leading Mail/ off incoming folder names, and a folderfilter that limits the
folders synced to just three::

  [Account Gerf]
  localrepository = GerfLocal
  remoterepository = GerfRemote

  [Repository GerfLocal]
  type = Maildir
  localfolders = ~/Mail

  [Repository GerfRemote]
  type = IMAP
  remotehost = gerf.org
  ssl = yes
  remoteuser = docwhat
  reference = Mail
  # Trims off the preceeding Mail on all the folder names.
  nametrans = lambda foldername: \
    re.sub('^Mail/', '', foldername)
  # Yeah, you have to mention the Mail dir, even though it
  # would seem intuitive that reference would trim it.
  folderfilter = lambda foldername: foldername in [
    'Mail/INBOX',
    'Mail/list/zaurus-general',
    'Mail/list/zaurus-dev',
  ]
  maxconnections = 1
  holdconnectionopen = no


pythonfile Configuration File Option
====================================

You can have OfflineIMAP load up a Python file before evaluating the
configuration file options that are Python expressions.  This example is based
on one supplied by Tommi Virtanen for this feature.


In ~/.offlineimaprc, he adds these options::

  [general]
  pythonfile=~/.offlineimap.py
  [Repository foo]
  foldersort=mycmp

Then, the ~/.offlineimap.py file will contain::

  prioritized = ['INBOX', 'personal', 'announce', 'list']

  def mycmp(x, y):
    for prefix in prioritized:
      xsw = x.startswith(prefix)
      ysw = y.startswith(prefix)
      if xsw and ysw:
        return cmp(x, y)
      elif xsw:
        return -1
      elif ysw:
        return +1
    return cmp(x, y)

  def test_mycmp():
    import os, os.path
    folders=os.listdir(os.path.expanduser('~/data/mail/tv@hq.yok.utu.fi'))
    folders.sort(mycmp)
    print folders


This code snippet illustrates how the foldersort option can be customized with a
Python function from the pythonfile to always synchronize certain folders first.


Signals
=======

OfflineIMAP writes its current PID into ``~/.offlineimap/pid`` when it is
running.  It is not guaranteed that this file will not exist when OfflineIMAP is
not running.

<!-- not done yet

  You can send SIGINT to OfflineIMAP using this file to kill it.  SIGUSR1 will
  force an immediate resync of all accounts.  This will be ignored for all
  accounts for which a resync is already in progress.

-->