[PATCH 3/3] Improve our MANUAL

Sebastian Spaeth Sebastian at SSpaeth.de
Thu Aug 25 09:18:05 BST 2011


Make it contain real use cases and more explanations. We probably need
to add more of the FAQ entries to the MANUAL and point to relevant FAQ
entries from the manual.

Signed-off-by: Sebastian Spaeth <Sebastian at SSpaeth.de>
---
 docs/MANUAL.rst |  345 +++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 245 insertions(+), 100 deletions(-)

diff --git a/docs/MANUAL.rst b/docs/MANUAL.rst
index 8f09f92..cf54985 100644
--- a/docs/MANUAL.rst
+++ b/docs/MANUAL.rst
@@ -14,39 +14,44 @@ Powerful IMAP/Maildir synchronization and reader support
 .. TODO: :Manual group:
 
 
-SYNOPSIS
-========
+DESCRIPTION
+===========
 
-	offlineimap [-h|--help]
+OfflineImap operates on a REMOTE and a LOCAL repository and synchronizes
+emails between them, so that you can read the same mailbox from multiple
+computers. The REMOTE repository is some IMAP server, while LOCAL can be
+either a local Maildir or another IMAP server.
 
-	offlineimap [OPTIONS]
+Missing folders will be automatically created on the LOCAL side, however
+NO folders will currently be created on the REMOTE repository
+automatically (it will sync your emails from local folders if
+corresponding REMOTE folders already exist).
 
-|    -1
-|    -P profiledir
-|    -a accountlist
-|    -c configfile
-|    -d debugtype[,...]
-|      -f foldername[,...]
-|      -k [section:]option=value
-|    -l filename
-|    -o
-|    -u interface
+Configuring OfflineImap in basic mode is quite easy, however it provides
+an amazing amount of flexibility for those with special needs.  You can
+specify the number of connections to your IMAP server, use arbitrary
+python functions (including regular expressions) to limit the number of
+folders being synchronized. You can transpose folder names between
+repositories using any python function, to mangle and modify folder
+names on the LOCAL repository. There are six different ways to hand the
+IMAP password to OfflineImap from console input, specifying in the
+configuration file, .netrc support, specifying in a separate file, to
+using arbitrary python functions that somehow return the
+password. Finally, you can use IMAPs IDLE infrastructure to always keep
+a connection to your IMAP server open and immediately be notified (and
+synchronized) when a new mail arrives (aka Push mail).
 
+Most configuration is done via the configuration file.  However, any setting can also be overriden by command line options handed to OfflineIMAP.
 
-DESCRIPTION
-===========
+OfflineImap is well suited to be frequently invoked by cron jobs, or can run in daemon mode to periodically check your email (however, it will exit in some error situations).
 
-Most configuration is done via the configuration file.  Nevertheless, there are
-a few command-line options that you may set for OfflineIMAP.
+Check out the `Use Cases`_ section for some example configurations.
 
 
 OPTIONS
 =======
 
 
-
-
-
 -1                Disable most multithreading operations
 
   Use solely a single-connection sync.  This effectively sets the
@@ -152,8 +157,7 @@ Blinkenlights
 ---------------
 
 Blinkenlights is an interface designed to be sleek, fun to watch, and
-informative of the overall picture of what OfflineIMAP is doing.  I consider it
-to be the best general-purpose interface in OfflineIMAP.
+informative of the overall picture of what OfflineIMAP is doing.
 
 
 Blinkenlights contains a row of "LEDs" with command buttons and a log.
@@ -230,30 +234,27 @@ English-speaking world. One version ran in its entirety as follows:
 TTYUI
 ---------
 
-TTYUI interface is for people running in basic, non-color terminals.  It
-prints out basic status messages and is generally friendly to use on a console
-or xterm.
+TTYUI interface is for people running in terminals.  It prints out basic
+status messages and is generally friendly to use on a console or xterm.
 
 
 Basic
---------------------
+------
 
 Basic is designed for situations in which OfflineIMAP will be run
-non-attended and the status of its execution will be logged.  You might use it,
-for instance, to have the system run automatically and e-mail you the results of
-the synchronization.  This user interface is not capable of reading a password
-from the keyboard; account passwords must be specified using one of the
-configuration file options.
+non-attended and the status of its execution will be logged.  This user
+interface is not capable of reading a password from the keyboard;
+account passwords must be specified using one of the configuration file
+options.
 
 
 Quiet
 -----
 
-Quiet is designed for non-attended running in situations where normal
-status messages are not desired.  It will output nothing except errors
-and serious warnings.  Like Basic, this user interface is not capable
-of reading a password from the keyboard; account passwords must be
-specified using one of the configuration file options.
+It will output nothing except errors and serious warnings.  Like Basic,
+this user interface is not capable of reading a password from the
+keyboard; account passwords must be specified using one of the
+configuration file options.
 
 MachineUI
 ---------
@@ -262,70 +263,10 @@ MachineUI generates output in a machine-parsable format.  It is designed
 for other programs that will interface to OfflineIMAP.
 
 
-Signals
-=======
-
-OfflineImap listens to the unix signals SIGUSR1 and SIGUSR2.
-
-If sent a SIGUSR1 it will abort any current (or next future) sleep of all
-accounts that are configured to "autorefresh". In effect, this will trigger a
-full sync of all accounts to be performed as soon as possible.
-
-If sent a SIGUSR2, it will stop "autorefresh mode" for all accounts. That is,
-accounts will abort any current sleep and will exit after a currently running
-synchronization has finished. This signal can be used to gracefully exit out of
-a running offlineimap "daemon".
-
-
-KNOWN BUGS
-==========
-
-* SSL3 write pending:
-    users enabling SSL may hit a bug about "SSL3 write pending". If so, the
-    account(s) will stay unsynchronised from the time the bug appeared. Running
-    OfflineIMAP again can help. We are still working on this bug.  Patches or
-    detailed bug reports would be appreciated. Please check you're running the
-    last stable version and send us a report to the mailing list including the
-    full log.
-
-* IDLE support is incomplete and experimental.  Bugs may be encountered.
-
-  * No hook exists for "run after an IDLE response".  Email will
-    show up, but may not be processed until the next refresh cycle.
-
-  * nametrans may not be supported correctly.
-
-  * IMAP IDLE <-> IMAP IDLE doesn't work yet.
-
-  * IDLE may only work "once" per refresh.  If you encounter this bug,
-    please send a report to the list!
-
-* Maildir support in Windows drive
-    Maildir uses colon caracter (:) in message file names. Colon is however
-    forbidden character in windows drives. There are several workarounds for
-    that situation:
-
-   * Use "maildir-windows-compatible = yes" account OfflineIMAP configuration.
-      - That makes OfflineIMAP to use exclamation mark (!) instead of colon for
-        storing messages. Such files can be written to windows partitions. But
-        you will probably loose compatibility with other programs trying to
-        read the same Maildir.
-      - Exclamation mark was choosed because of the note in
-        http://docs.python.org/library/mailbox.html
-      - If you have some messages already stored without this option, you will
-        have to re-sync them again
-
-   * Enable file name character translation in windows registry (not tested)
-      - http://support.microsoft.com/kb/289627
-
-   * Use cygwin managed mount (not tested)
-      - not available anymore since cygwin 1.7
-
-
 Synchronization Performance
 ===========================
 
-By default, we use fairly conservative settings that are good for
+By default, we use fairly conservative settings that are safe for
 syncing but that might not be the best performing one. Once you got
 everything set up and running, you might want to look into speeding up
 your synchronization. Here are a couple of hints and tips on how to
@@ -360,12 +301,13 @@ achieve this.
     side (it will detect flag changes on the Maildir side of things
     though). A quick sync on my smallish account will take 7 seconds
     rather than 40 seconds. Eg, I run a cron script that does a regular
-    sync once a day, and does quick syncs inbetween.
+    sync once a day, and does quick syncs (-q) only synchronizing the
+    "-f INBOX" in between.
 
  5) Turn off fsync. In the [general] section you can set fsync to True
     or False. If you want to play 110% safe and wait for all operations
     to hit the disk before continueing, you can set this to True. If you
-    set it to False, you lose some of that safety trading it for speed.
+    set it to False, you lose some of that safety, trading it for speed.
 
 Security and SSL
 ================
@@ -410,3 +352,206 @@ contents. However, this will not protect you from active attacks, such
 as Man-In-The-Middle attacks which cause you to connect to the wrong
 server and pretend to be your mail server. DO NOT RELY ON STARTTLS AS A
 SAFE CONNECTION GUARANTEEING THE AUTHENTICITY OF YOUR IMAP SERVER!
+
+UNIX Signals
+============
+
+OfflineImap listens to the unix signals SIGUSR1 and SIGUSR2.
+
+If sent a SIGUSR1 it will abort any current (or next future) sleep of all
+accounts that are configured to "autorefresh". In effect, this will trigger a
+full sync of all accounts to be performed as soon as possible.
+
+If sent a SIGUSR2, it will stop "autorefresh mode" for all accounts. That is,
+accounts will abort any current sleep and will exit after a currently running
+synchronization has finished. This signal can be used to gracefully exit out of
+a running offlineimap "daemon".
+
+
+KNOWN BUGS
+==========
+
+* SSL3 write pending:
+    users enabling SSL may hit a bug about "SSL3 write pending". If so, the
+    account(s) will stay unsynchronised from the time the bug appeared. Running
+    OfflineIMAP again can help. We are still working on this bug.  Patches or
+    detailed bug reports would be appreciated. Please check you're running the
+    last stable version and send us a report to the mailing list including the
+    full log.
+
+* IDLE support is incomplete and experimental.  Bugs may be encountered.
+
+  * No hook exists for "run after an IDLE response".  Email will
+    show up, but may not be processed until the next refresh cycle.
+
+  * nametrans may not be supported correctly.
+
+  * IMAP IDLE <-> IMAP IDLE doesn't work yet.
+
+  * IDLE may only work "once" per refresh.  If you encounter this bug,
+    please send a report to the list!
+
+* Maildir support in Windows drive
+    Maildir uses colon caracter (:) in message file names. Colon is however
+    forbidden character in windows drives. There are several workarounds for
+    that situation:
+
+   * Use "maildir-windows-compatible = yes" account OfflineIMAP configuration.
+      - That makes OfflineIMAP to use exclamation mark (!) instead of colon for
+        storing messages. Such files can be written to windows partitions. But
+        you will probably loose compatibility with other programs trying to
+        read the same Maildir.
+      - Exclamation mark was chosen because of the note in
+        http://docs.python.org/library/mailbox.html
+      - If you have some messages already stored without this option, you will
+        have to re-sync them again
+
+   * Enable file name character translation in windows registry (not tested)
+      - http://support.microsoft.com/kb/289627
+
+   * Use cygwin managed mount (not tested)
+      - not available anymore since cygwin 1.7
+
+
+PITFALLS & ISSUES
+=================
+
+Sharing a maildir with multiple IMAP servers
+--------------------------------------------
+
+ Generally a word of caution mixing IMAP repositories on the same
+ Maildir root. You have to be careful that you *never* use the same
+ maildir folder for 2 IMAP servers. In the best case, the folder MD5
+ will be different, and you will get a loop where it will upload your
+ mails to both servers in turn (infinitely!) as it thinks you have
+ placed new mails in the local Maildir. In the worst case, the MD5 is
+ the same (likely) and mail UIDs overlap (likely too!) and it will fail to
+ sync some mails as it thinks they are already existent.
+
+ I would create a new local Maildir Repository for the Personal Gmail and
+ use a different root to be on the safe side here. You could e.g. use
+ `~/mail/Pro` as Maildir root for the ProGmail and
+ `~/mail/Personal` as root for the personal one.
+
+ If you then point your local mutt, or whatever MUA you use to `~/mail/`
+ as root, it should still recognize all folders. (see the 2 IMAP setup
+ in the `Use Cases`_ section.
+
+USE CASES
+=========
+
+Sync from GMail to another IMAP server
+--------------------------------------
+
+This is an example of a setup where "TheOtherImap" requires all folders to be under INBOX::
+
+    [Repository Gmailserver-foo]
+    #This is the remote repository
+    type = Gmail
+    remotepass = XXX
+    remoteuser = XXX
+    # The below will put all GMAIL folders as sub-folders of the 'local' INBOX,
+    # assuming that your path separator on 'local' is a dot.
+    nametrans = lambda x: 'INBOX.' + x
+    
+    [Repository TheOtherImap]
+    #This is the 'local' repository
+    type = IMAP
+    remotehost = XXX
+    remotepass = XXX
+    remoteuser = XXX
+    #Do not use nametrans here.
+
+Selecting only a few folders to sync
+------------------------------------
+Add this to the remote gmail repository section to only sync mails which are in a certain folder::
+
+    folderfilter = lambda folder: folder.startswith('MyLabel')
+
+To only get the All Mail folder from a Gmail account, you would e.g. do::
+
+    folderfilter = lambda folder: folder.startswith('[Gmail]/All Mail') 
+
+
+Another nametrans transpose example
+-----------------------------------
+
+Put everything in a GMX. subfolder except for the boxes INBOX, Draft, and Sent which should keep the same name::
+
+     folderfilter = lambda folder: re.sub(r'^(?!INBOX$|Draft$|Sent$)',r'GMX.', folder)
+
+2 IMAP using name translations
+------------------------------
+
+Synchronizing 2 IMAP accounts to local Maildirs that are "next to each other", so that mutt can work on both. Full email setup described by Thomas Kahle at `http://dev.gentoo.org/~tomka/mail.html`_
+
+offlineimap.conf::
+
+    [general]
+    accounts = acc1, acc2
+    maxsyncaccounts = 2
+    ui = ttyui
+    pythonfile=~/bin/offlineimap-helpers.py
+    socktimeout = 90
+    
+    [Account acc1]
+    localrepository = acc1local
+    remoterepository = acc1remote
+    autorefresh = 2
+    
+    [Account acc2]
+    localrepository = acc2local
+    remoterepository = acc2remote
+    autorefresh = 4
+    
+    [Repository acc1local]
+    type = Maildir
+    localfolders = ~/Mail/acc1
+    
+    [Repository acc2local]
+    type = Maildir
+    localfolders = ~/Mail/acc2
+    
+    [Repository acc1remote]
+    type = IMAP
+    remotehost = imap.acc1.com
+    remoteusereval = get_username("imap.acc1.net")
+    remotepasseval = get_password("imap.acc1.net")
+    nametrans = oimaptransfolder_acc1
+    ssl = yes
+    maxconnections = 2
+    # Folders to get:
+    folderfilter = lambda foldername: foldername in [
+                 'INBOX', 'Drafts', 'Sent', 'archiv']
+    
+    [Repository acc2remote]
+    type = IMAP
+    remotehost = imap.acc2.net
+    remoteusereval = get_username("imap.acc2.net")
+    remotepasseval = get_password("imap.acc2.net")
+    nametrans = oimaptransfolder_acc2
+    ssl = yes
+    maxconnections = 2
+
+One of the coolest things about offlineimap is that you can inject arbitrary python code. The file specified with::
+
+    pythonfile=~/bin/offlineimap-helpers.py
+
+contains python functions that I used for two purposes: Fetching passwords from the gnome-keyring and translating folder names on the server to local foldernames. The python file should contain all the functions that are called here. get_username and get_password are part of the interaction with gnome-keyring and not printed here. Find them in the example file that is in the tarball or here. The folderfilter is a lambda term that, well, filters which folders to get. `oimaptransfolder_acc2` translates remote folders into local folders with a very simple logic. The `INBOX` folder will simply have the same name as the account while any other folder will have the account name and a dot as a prefix. offlineimap handles the renaming correctly in both directions::
+
+    import re
+    def oimaptransfolder_acc1(foldername):
+        if(foldername == "INBOX"):
+            retval = "acc1"
+        else:
+            retval = "acc1." + foldername
+        retval = re.sub("/", ".", retval)
+        return retval
+    
+    def oimaptransfolder_acc2(foldername):
+        if(foldername == "INBOX"):
+            retval = "acc2"
+        else:
+            retval = "acc2." + foldername
+        retval = re.sub("/", ".", retval)
+        return retval
-- 
1.7.4.1





More information about the OfflineIMAP-project mailing list