From d64138c2286485f6eee4b553851b934625e0699d Mon Sep 17 00:00:00 2001 From: jgoerzen Date: Sat, 2 Nov 2002 23:30:41 +0100 Subject: [PATCH] /offlineimap/head: changeset 276 Updated --- offlineimap/head/bin/offlineimap | 2 +- offlineimap/head/debian/changelog | 9 +- offlineimap/head/manual.html | 2235 ++++++++++---------- offlineimap/head/manual.pdf | Bin 62289 -> 59442 bytes offlineimap/head/manual.ps | 269 +-- offlineimap/head/manual.txt | 796 ++++--- offlineimap/head/offlineimap.1 | 2 + offlineimap/head/offlineimap.py | 2 +- offlineimap/head/offlineimap/imapserver.py | 19 +- offlineimap/head/offlineimap/version.py | 6 +- 10 files changed, 1694 insertions(+), 1646 deletions(-) diff --git a/offlineimap/head/bin/offlineimap b/offlineimap/head/bin/offlineimap index 37c2ed2..ef31f04 100644 --- a/offlineimap/head/bin/offlineimap +++ b/offlineimap/head/bin/offlineimap @@ -18,4 +18,4 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA from offlineimap import init -init.startup('3.99.1') +init.startup('3.99.2') diff --git a/offlineimap/head/debian/changelog b/offlineimap/head/debian/changelog index cfc376c..6701715 100644 --- a/offlineimap/head/debian/changelog +++ b/offlineimap/head/debian/changelog @@ -6,8 +6,15 @@ offlineimap (3.99.2) unstable; urgency=low session. This way, even unexpected and non-repeatable errors stand a chance of getting a more detailed log. * Handle uidvalidity file in an atomic fashion. CLoses: #165600. + * Supports CRAM-MD5 authentication. Fixes [complete.org #38], and for + Debian, Closes: #154165. + * Noted CRAM-MD5 support in the "CONFORMING TO" section of the manual. + * Certain servers may not always return the UID flag for new messages. + This causes an OfflineIMAP exception, though rerunning will fix it. + Now, OfflineIMAP will detect the condition and ignore the offending + messages (without an exception) until the next sync. - -- John Goerzen Tue, 15 Oct 2002 12:35:42 -0500 + -- John Goerzen Sat, 02 Nov 2002 10:23:10 -0600 offlineimap (3.99.1) unstable; urgency=low diff --git a/offlineimap/head/manual.html b/offlineimap/head/manual.html index 3dd17e2..fdfcc39 100644 --- a/offlineimap/head/manual.html +++ b/offlineimap/head/manual.html @@ -25,41 +25,47 @@ SEE ALSO

- - + +

NAME

- +

-
-OfflineIMAP - Powerful IMAP/Maildir synchronization and reader support
+ + +

OfflineIMAP − Powerful IMAP/Maildir synchronization +and reader support

+ +

SYNOPSIS

- - +

-
-offlineimap [ -1 ] [ -P -profiledir ] [ -a accountlist ] [ --c configfile ] [ -d -debugtype[,debugtype...] ] [ -o ] [ -u -interface ]
- - - -
-offlineimap -h | --help
+ + +

offlineimap [ −1 ] [ −P +profiledir ] [ −a accountlist ] [ +−c configfile ] [ −d +debugtype[,debugtype...] ] [ −o ] [ +−u interface ]

+ +

offlineimap −h | +−−help

+ +

DESCRIPTION

- - +

- +
-OfflineIMAP is a tool to simplify your e-mail + +

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 @@ -68,29 +74,19 @@ 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 is FAST; it synchronizes my two +support, or does not provide disconnected operation.

+ +

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 +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 +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 @@ -99,380 +95,450 @@ 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 +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.

- +releases.

+ +

+ +

+ + + +
+

METHOD OF OPERATION

+ -
-METHOD OF OPERATION
- - - - +
-OfflineIMAP operates by maintaining a hierarchy of + +

OfflineIMAP 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.

+marking, and deleting messages as necessary.

+ +

INSTALLATION

- - +

- +
-If you are reading this document via the "man" + +

If you are reading this document via the "man" command, it is likely that you have no installation tasks to perform; your system administrator has already installed it. If you need to install it yourself, you have three options: a system-wide installation with Debian, system-wide installation with other systems, and a single-user installation. You can download the latest version of -OfflineIMAP from -http://quux.org/devel/offlineimap/.

- +OfflineIMAP from http://quux.org/devel/offlineimap/.

+ +

+ +

+ + + +
+

PREREQUISITES

+ -
-PREREQUISITES
- - + + +
+

In order to use OfflineIMAP, you need to have these +conditions satisfied:

+
+ +

-
-In order to use OfflineIMAP, you need to have these -conditions satisfied:
+ + - - -
-Your mail server must support IMAP. Most Internet Service -Providers and corporate networks do, and most operating -systems have an IMAP implementation readily -available.
+

+ + + - +

Your mail server must support IMAP. Most Internet +Service Providers and corporate networks do, and most +operating systems have an IMAP implementation readily +available.

+ - + + +
-You must have Python version 2.2.1 or above installed. If -you are running on Debian GNU/Linux, this requirement will -automatically be taken care of for you. If you do not have -Python already, check with your system administrator or + + +

+
+ +

You must have Python version 2.2.1 or above installed. +If you are running on Debian GNU/Linux, this requirement +will automatically be taken care of for you. If you do not +have Python already, check with your system administrator or operating system vendor; or, download it from http://www.python.org/. If you intend to use the Tk interface, you must have Tkinter (python-tk) installed. If you intend to use the SSL interface, your Python must have -been built with SSL support.

+been built with SSL support.

+ + + + +

+ + + + +

Have a mail reader that supports the Maildir mailbox +format. Most modern mail readers have this support built-in, +so you can choose from a wide variety of mail servers. This +format is also known as the "qmail" format, so any +mail reader compatible with it will work with +OfflineIMAP.

+ +

+ +

+ + + +
+

DEBIAN SYSTEM-WIDE INSTALLATION

+ -
-Have a mail reader that supports the Maildir mailbox format. -Most modern mail readers have this support built-in, so you -can choose from a wide variety of mail servers. This format -is also known as the "qmail" format, so any mail -reader compatible with it will work with -OfflineIMAP.
- - - -
-DEBIAN SYSTEM-WIDE INSTALLATION
- - - - +
-If you are tracking Debian unstable, you may install + +

If you are tracking Debian unstable, you may install OfflineIMAP by simply running the following command -as root:

- +as root:

+ +

apt-get install offlineimap

+ +

If you are not tracking Debian unstable, download the +Debian .deb package from the OfflineIMAP website and then +run dpkg -i to install the downloaded package. Then, +go to CONFIGURATION below. You will type offlineimap +to invoke the program.

+ + + +

+ + + +
+

OTHER SYSTEM-WIDE INSTALLATION

+ -
-apt-get install offlineimap
- - - -
-If you are not tracking Debian unstable, download the Debian -.deb package from the OfflineIMAP website and then run -dpkg -i to install the downloaded package. Then, go -to CONFIGURATION below. You will type offlineimap to -invoke the program.
- - - -
-OTHER SYSTEM-WIDE INSTALLATION
- - - -
-Download the tar.gz version of the package from the website. -Then run these commands:
- - - - +
-tar -zxvf offlineimap-x.y.z.tar.gz
+
+

Download the tar.gz version of the package from the +website. Then run these commands:

+ +

tar -zxvf offlineimap-x.y.z.tar.gz
cd offlineimap-x.y.z
-python2.2 setup.py

- - - -
-Some systems will need to use python instead of +python2.2 setup.py

+ +

Some systems will need to use python instead of python2.2. Next, proceed to configuration. You will -type offlineimap to invoke the program.

- +type offlineimap to invoke the program.

+ + + +

+ + + +
+

SINGLE-ACCOUNT INSTALLATION

+ -
-SINGLE-ACCOUNT INSTALLATION
- - - -
-Download the tar.gz version of the package from the website. -Then run these commands:
- - - -
-tar -zxvf offlineimap-x.y.z.tar.gz
-cd offlineimap-x.y.z
- - - -
-When you want to run OfflineIMAP, you will issue the -cd command as above and then type -./offlineimap; there is no installation step -necessary.
+ + +

Download the tar.gz version of the package from the +website. Then run these commands:

+ +

tar -zxvf offlineimap-x.y.z.tar.gz
+cd offlineimap-x.y.z

+ +

When you want to run OfflineIMAP, you will issue +the cd command as above and then type +./offlineimap.py; there is no installation step +necessary.

+ +

CONFIGURATION

- - +

- +
-OfflineIMAP is regulated by a configuration file that -is normally stored in ~/.offlineimaprc. + +

OfflineIMAP is regulated by a configuration file +that is normally stored in ~/.offlineimaprc. OfflineIMAP ships with a file named offlineimap.conf that you should copy to that location and then edit. This file is vital to proper operation of the system; it sets everything you need to run OfflineIMAP. Full documentation for the configuration -file is included within the sample file.

+file is included within the sample file.

+ +

OPTIONS

- - +

- +
-Most configuration is done via the configuration file. + +

Most configuration is done via the configuration file. Nevertheless, there are a few options that you may set for -OfflineIMAP.

- - +OfflineIMAP.

+ +

+ +

-
--1
+ + - - - + +
-Disable all multithreading operations and use solely a +

−1

+
+ +

Disable all multithreading operations and use solely a single-thread sync. This effectively sets the maxsyncaccounts and all maxconnections -configuration file variables to 1.

- +configuration file variables to 1.

+ +

+ +

+ + + +
+

−P profiledir

+ -
--P profiledir
- - - - +
-Sets OfflineIMAP into profile mode. The program will -create profiledir (it must not already exist). As it -runs, Python profiling information about each thread is -logged into profiledir. Please note: This option is present -for debugging and optimization only, and should NOT be used -unless you have a specific reason to do so. It will + +

Sets OfflineIMAP into profile mode. The program +will create profiledir (it must not already exist). +As it runs, Python profiling information about each thread +is logged into profiledir. Please note: This option is +present for debugging and optimization only, and should NOT +be used unless you have a specific reason to do so. It will significantly slow program performance, may reduce reliability, and can generate huge amounts of data. You must -use the -1 option when you use --P.

- +use the −1 option when you use -P.

+ + + +

+ + + +
+

−a accountlist

+ -
--a accountlist
- - - - +
-Overrides the accounts section in the config file. + +

Overrides the accounts section in the config file. Lets you specify a particular account or set of accounts to sync without having to edit the config file. You might use this to exclude certain accounts, or to sync some accounts -that you normally prefer not to.

- +that you normally prefer not to.

+ + + +

+ + + +
+

−c configfile

+ -
--c configfile
- + + +

Specifies a configuration file to use in lieu of the +default, ~/.offlineimaprc.

+ + + +

+ + + +
+

−d debugtype[,debugtype...]

+ -
-Specifies a configuration file to use in lieu of the -default, ~/.offlineimaprc.
- - - -
--d debugtype[,debugtype...]
- - - - +
-Enables debugging for OfflineIMAP. This is useful if you are -trying to track down a malfunction or figure out what is + +

Enables debugging for OfflineIMAP. This is useful if you +are trying to track down a malfunction or figure out what is going on under the hood. I suggest that you use this with --1 in order to make the results more -sensible.

- -−1 in order to make the results more +sensible.

+ +
+ +

- +
--d now requires one or more debugtypes, separated by commas. -These define what exactly will be debugged, and so far -include two options: imap and maildir. The + +

-d now requires one or more debugtypes, separated by +commas. These define what exactly will be debugged, and so +far include two options: imap and maildir. The imap option will enable IMAP protocol stream and parsing debugging. Note that the output may contain passwords, so take care to remove that from the debugging output before sending it to anyone else. The maildir option will enable debugging for certain Maildir -operations.

+operations.

+ +

+ +

+ + + + + +
+

−o

+
+ +

Run only once, ignoring any autorefresh setting in the +config file.

+

+ +

+ + + +
+

−h, −−help

+ -
--o
- + + +

Show summary of options.

+ + + +

+ + + +
+

−u interface

+ -
-Run only once, ignoring any autorefresh setting in the -config file.
- - - -
--h, --help
- - - -
-Show summary of options.
- - - -
--u interface
- - - -
-Specifies an alternative user interface module to use. This -overrides the default specified in the configuration file. -The UI specified with -u will be forced to be used, -even if its isuable() method states that it cannot -be. Use this option with care. The pre-defined options are -listed in the USER INTERFACES section.
+ + +

Specifies an alternative user interface module to use. +This overrides the default specified in the configuration +file. The UI specified with -u will be forced to be +used, even if its isuable() method states that it +cannot be. Use this option with care. The pre-defined +options are listed in the USER INTERFACES section.

+ +

USER INTERFACES

- - +

- +
-OfflineIMAP has a pluggable user interface system + +

OfflineIMAP has a pluggable user interface system that lets you choose how the program communicates information to you. There are two graphical interfaces, one terminal interface, and two noninteractive interfaces suitable for scripting or logging purposes. The ui option in the configuration file specifies the user -interface preferences. The -u command-line option can -override the configuration file. The available values for -the configuration file or command-line are describef in this -section.

- +interface preferences. The −u command-line +option can override the configuration file. The available +values for the configuration file or command-line are +describef in this section.

+ +

+ +

+ + + +
+

Tk.Blinkenlights

+ -
-Tk.Blinkenlights
- - - - +
-This is an interface designed to be sleek, fun to watch, and -informative of the overall picture of what + +

This 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. Tk.Blinkenlights contains, by default, a small window with a @@ -480,396 +546,395 @@ row of LEDs and a row of command buttons. The total size of the window is very small, so it uses little desktop space, yet it is quite functional. There is also an optional, toggable, log that shows more detail about what is happening -and is color-coded to match the color of the -lights.

- - - -
-Tk.Blinkenlights is the only user interface that has +and is color-coded to match the color of the lights.

+ +

Tk.Blinkenlights is the only user interface that has configurable parameters; see the example -offlineimap.conf for more details.

- - - -
-Each light in the Tk.Blinkenlights interface represents a +offlineimap.conf for more details.

+ +

Each light in the Tk.Blinkenlights interface represents a thread of execution -- that is, a particular task that OfflineIMAP is performing right now. The color indicates what task the particular thread is performing, and -are as follows:

+are as follows:

+ + + +

+ + + + + +
+

Black

+
+ +

indicates that this light’s thread has terminated; +it will light up again later when new threads start up. So, +black indicates no activity.

+

+ +

+ + + +
+

Red (Meaning 1)

+ -
-Black
+ + +

is the color of the main program’s thread, which +basically does nothing but monitor the others. It might +remind you of HAL 9000 in 2001.

+ + + +

+ + + + + + + + + + + + + + + + + + + + + + + + +
+

Gray

+
+ +

indicates that the thread is establishing a new +connection to the IMAP server.

+
+ +

Purple

+
+ +

is the color of an account synchronization thread that +is monitoring the progress of the folders in that account +(not generating any I/O).

+
+ +

Cyan

+
+ +

indicates that the thread is syncing a folder.

+
+ +

Green

+
+ +

means that a folder’s message list is being +loaded.

+
+ +

Blue

+
+ +

is the color of a message synchronization controller +thread.

+
+ +

Orange

+
+ +

indicates that an actual message is being copied.

+

+ +

+ + + +
+

Red (Meaning 2)

+ -
-indicates that this light's thread has terminated; it will -light up again later when new threads start up. So, black -indicates no activity.
+ + +

indicates that a message is being deleted.

+ + + +

+ + + + + + + + + + +
+

Yellow

+
+ +

(bright orange) indicates that message flags are being +added.

+
+ +

Pink

+
+ +

(bright red) indicates that message flags are being +removed.

+

+ +

+ + + +
+

Red / Black Flashing

+ -
-Red (Meaning 1)
- - + +
+

corresponds to the countdown timer that runs between +synchronizations.

+
+ +

-
-is the color of the main program's thread, which basically -does nothing but monitor the others. It might remind you of -HAL 9000 in 2001.
- - + +
+

The name of this interface derives from a bit of computer +science history. Eric Raymond’s Jargon File +defines blinkenlights, in part, as:

+

+ +

-
-Gray
- - - -
-indicates that the thread is establishing a new connection -to the IMAP server.
- - - -
-Purple
- - - -
-is the color of an account synchronization thread that is -monitoring the progress of the folders in that account (not -generating any I/O).
- - - -
-Cyan
- - - -
-indicates that the thread is syncing a folder.
- - - -
-Green
- - - -
-means that a folder's message list is being -loaded.
- - - -
-Blue
- - - -
-is the color of a message synchronization controller -thread.
- - - -
-Orange
- - - -
-indicates that an actual message is being -copied.
- - - -
-Red (Meaning 2)
- - - -
-indicates that a message is being deleted.
- - - -
-Yellow
- - - -
-(bright orange) indicates that message flags are being -added.
- - - -
-Pink
- - - -
-(bright red) indicates that message flags are being -removed.
- - - -
-Red / Black Flashing
- - - -
-corresponds to the countdown timer that runs between -synchronizations.
- - - -
-The name of this interface derives from a bit of computer -science history. Eric Raymond's Jargon File defines -blinkenlights, in part, as:
- - - - +
-Front-panel diagnostic lights on a computer, esp. a + +

Front-panel diagnostic lights on a computer, esp. a dinosaur. Now that dinosaurs are rare, this term usually refers to status lights on a modem, network hub, or the -like.

- - - -
-This term derives from the last word of the famous +like.

+ +

This term derives from the last word of the famous blackletter-Gothic sign in mangled pseudo-German that once graced about half the computer rooms in the English-speaking -world. One version ran in its entirety as -follows:

- - - -
-ACHTUNG! ALLES LOOKENSPEEPERS!
- - - -
-Das computermachine ist nicht fuer gefingerpoken und +world. One version ran in its entirety as follows:

+ +

ACHTUNG! ALLES LOOKENSPEEPERS!

+ +

Das computermachine ist nicht fuer gefingerpoken und mittengrabben. Ist easy schnappen der springenwerk, blowenfusen und poppencorken mit spitzensparken. Ist nicht fuer gewerken bei das dumpkopfen. Das rubbernecken sichtseeren keepen das cotten-pickenen hans in das pockets -muss; relaxen und watchen das blinkenlichten.

- +muss; relaxen und watchen das blinkenlichten.

+ +

+ +

+ + + +
+

Tk.VerboseUI

+ -
-Tk.VerboseUI
- - - - +
-This interface (formerly known as Tk.TkUI) is a graphical + +

This interface (formerly known as Tk.TkUI) is a graphical interface that presents a variable-sized window. In the window, each currently-executing thread has a section where its name and current status are displayed. This interface is best suited to people running on slower connections, as you get a lot of detail, but for fast connections, the detail may go by too quickly to be useful. People with fast -connections may wish to use Tk.Blinkenlights -instead.

- +connections may wish to use Tk.Blinkenlights instead.

+ + + +

+ + + +
+

TTY.TTYUI

+ -
-TTY.TTYUI
- - - - +
-This interface is the default for people running in + +

This interface is the default for people running in terminals. It prints out basic status messages, has an interruptible timer like the graphical interfaces do, and is -generally friendly to use on a console or -xterm.

- +generally friendly to use on a console or xterm.

+ + + +

+ + + +
+

Noninteractive.Basic

+ -
-Noninteractive.Basic
- - - - +
-This interface is designed for situations where + +

This interface is designed for situations where 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.

- +configuration file options.

+ + + +

+ + + +
+

Noninteractive.Quiet

+ -
-Noninteractive.Quiet
- - - - +
-This interface is designed for non-attended running in + +

This interface 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 Noninteractive.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.

+options.

+ +

EXAMPLES

- + +

+ + + +
+

Here is an example configuration for a particularly +complex situation; more examples will be added later.

+

+ +

+ + + +
+

MULTIPLE ACCOUNTS WITH MUTT

+ -
-Here is an example configuration for a particularly complex -situation; more examples will be added later.
- - - -
-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:
-mkdir ~/Mail
- - - -
-In your ~/.offlineimaprc, specify this:
-accounts = Personal, Work
- - - - +
-Make sure that you have both a [Personal] and a + +

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:
+mkdir ~/Mail

+ +

In your ~/.offlineimaprc, specify this:
+accounts = Personal, Work

+ +

Make sure that you have both a [Personal] and a [Work] section, with different localfolder pathnames -and enable [mbnames].

- - - -
-In each account section, do something like this:
-localfolders = ~/Mail/Personal
- - - -
-Add these lines to your ~/.muttrc:
+and enable [mbnames].

+ +

In each account section, do something like this:
+localfolders = ~/Mail/Personal

+ +

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
-set spoolfile=+Personal/INBOX

- +set spoolfile=+Personal/INBOX

+ +

That’s it!

+ + + +

+ + + +
+

UW-IMAPD AND REFERENCES

+ -
-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 + +

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 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.

- - - -
-[Gerf]
+that limits the folders synced to just three.

+ +

[Gerf]
localfolders = ~/Mail
remotehost = gerf.org
ssl = yes
@@ -877,171 +942,131 @@ remoteuser = docwhat
reference = Mail
# Trims off the preceeding Mail on all the folder names.
nametrans = lambda foldername: \
-re.sub('^Mail/', '', 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',
+’Mail/INBOX’,
+’Mail/list/zaurus-general’,
+’Mail/list/zaurus-dev’,
]
maxconnections = 1
-holdconnectionopen = no

- +holdconnectionopen = no

+ + + +

+ + + +
+

PYTHONFILE CONFIGURATION FILE OPTION

+ -
-PYTHONFILE CONFIGURATION FILE OPTION
- - - - +
-You can have OfflineIMAP load up a Python file before + +

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 ~/.offlineimap.rc, he adds these -options:
- - - -
-[general]
+Virtanen for this feature.

+ +

In ~/.offlineimap.rc, he adds these options:

+ +

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

- - - -
-Then, the ~/.offlineimap.py file will -contain:
- - - -
-prioritized = ['INBOX', 'personal', 'announce', -'list']
- - - -
-def mycmp(x, y):
+foldersort=mycmp

+ +

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

+ +

prioritized = [’INBOX’, +’personal’, ’announce’, +’list’]

+ +

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

- - - -
-def test_mycmp():
+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=os.listdir(os.path.expanduser(’~/data/mail/tv@hq.yok.utu.fi’))
folders.sort(mycmp)
-print folders

- - - -
-This code snippet illustrates how the foldersort +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.

+first.

+ +

ERRORS

- + +

+ + + +
+

If you get one of some frequently-encountered or +confusing errors, please check this section.

+

+ +

+ + + +
+

UID validity problem for folder

+ -
-If you get one of some frequently-encountered or confusing -errors, please check this section.
- - - -
-UID validity problem for folder
- - - - +
-IMAP servers use a unique ID (UID) to refer to a specific + +

IMAP servers use a unique ID (UID) to refer to a specific message. This number is guaranteed to be unique to a particular message FOREVER. No other message in the same folder will ever get the same UID. UIDs are an integral part -of OfflineIMAP's synchronization scheme; they are used to -match up messages on your computer to messages on the -server.

- - - -
-Sometimes, the UIDs on the server might get reset. Usually -this will happen if you delete and then recreate a folder. -When you create a folder, the server will often start the -UID back from 1. But OfflineIMAP might still have the -UIDs from the previous folder by the same name stored. -OfflineIMAP will detect this condition and skip the -folder. This is GOOD, because it prevents data -loss.
- - - -
-You can fix it by removing your local folder and cache data. -For instance, if your folders are under ~/Folders and -the folder with the problem is INBOX, you'd type -this:
- - - -
-rm -r ~/Folders/INBOX
-rm ~/.offlineimap/AccountName/INBOX
- - - -
-(replacing AccountName with the account name as specified in -~/.offlineimaprc)
- - - -
-Next time you run OfflineIMAP, it will re-download +of OfflineIMAP’s synchronization scheme; they are used +to match up messages on your computer to messages on the +server.

+ +

Sometimes, the UIDs on the server might get reset. +Usually this will happen if you delete and then recreate a +folder. When you create a folder, the server will often +start the UID back from 1. But OfflineIMAP might +still have the UIDs from the previous folder by the same +name stored. OfflineIMAP will detect this condition +and skip the folder. This is GOOD, because it prevents data +loss.

+ +

You can fix it by removing your local folder and cache +data. For instance, if your folders are under +~/Folders and the folder with the problem is INBOX, +you’d type this:

+ +

rm -r ~/Folders/INBOX
+rm ~/.offlineimap/AccountName/INBOX

+ +

(replacing AccountName with the account name as specified +in ~/.offlineimaprc)

+ +

Next time you run OfflineIMAP, it will re-download the folder with the new UIDs. Note that the procedure specified above will lose any local changes made to the -folder.

- - - -
-Some IMAP servers are broken and do not support UIDs +folder.

+ +

Some IMAP servers are broken and do not support UIDs properly. If you continue to get this error for all your folders even after performing the above procedure, it is likely that your IMAP server falls into this category. @@ -1049,179 +1074,235 @@ likely that your IMAP server falls into this category. OfflineIMAP with them will not destroy any mail, but at the same time, it will not actually synchronize it either. (OfflineIMAP will detect this condition and abort -prior to synchronization)

+prior to synchronization)

+ +

OTHER FREQUENTLY ASKED QUESTIONS

- + +

+ + + +
+

There are some other FAQs that might not fit into another +section of this document, and they are enumerated here.

+

+ +

+ + + +
+

What platforms does OfflineIMAP run on?

+ -
-There are some other FAQs that might not fit into another -section of this document, and they are enumerated -here.
- + + +

It should run on most platforms supported by Python, +which are quite a few.

+ + + +

+ + + +
+

I’m using Mutt. Other IMAP sync programs require +me to use set maildir_trash=yes . Do I need to do that with +OfflineIMAP?

+ -
-What platforms does OfflineIMAP run on?
- + + +

No. OfflineIMAP is smart enough to figure out +message deletion without this extra crutch. You’ll get +the best results if you don’t use this setting, in +fact.

+ + + +

+ + + +
+

How do I specify the names of my folders?

+ -
-It should run on most platforms supported by Python, which -are quite a few.
- - - -
-I'm using Mutt. Other IMAP sync programs require me to -use set maildir_trash=yes . Do I need to do that with -OfflineIMAP?
- - - -
-No. OfflineIMAP is smart enough to figure out message -deletion without this extra crutch. You'll get the best -results if you don't use this setting, in fact.
- - - -
-How do I specify the names of my -folders?
- - - - +
-You do not need to. OfflineIMAP is smart enough to + +

You do not need to. OfflineIMAP is smart enough to automatically figure out what folders are present on the IMAP server and synchronize them. You can use the folderfilter and foldertrans configuration file options to request certain folders and rename them as -they come in if you like.

- +they come in if you like.

+ + + +

+ + + +
+

How can I prevent certain folders from being +synced?

+ -
-How can I prevent certain folders from being -synced?
- + + +

Use the folderfilter option in the configuration +file.

+ + + +

+ + + +
+

How can I add or delete a folder?

+ -
-Use the folderfilter option in the configuration -file.
- + + +

OfflineIMAP does not currently provide this +feature, but if you create a new folder on the IMAP server, +it will be created locally automatically.

+ + + +

+ + + +
+

Are there any other warnings that I should be aware +of?

+ -
-How can I add or delete a folder?
- + + +

Yes; see the NOTES section below.

+ + + +

+ + + +
+

What is the mailbox name recorder (mbnames) +for?

+ -
-OfflineIMAP does not currently provide this feature, -but if you create a new folder on the IMAP server, it will -be created locally automatically.
- - - -
-Are there any other warnings that I should be aware -of?
- - - -
-Yes; see the NOTES section below.
- - - -
-What is the mailbox name recorder (mbnames) -for?
- - - - +
-The Mutt mail reader is not capable of automatically + +

The Mutt mail reader is not capable of automatically determining the names of your mailboxes. OfflineIMAP can help it (or many other) programs out be writing these names out in a format you specify. See the example -offlineimap.conf file for details.

- +offlineimap.conf file for details.

+ + + +

+ + + +
+

Can I synchronize multiple accounts with +OfflineIMAP?

+ -
-Can I synchronize multiple accounts with -OfflineIMAP?
- + + +

Sure. Just name them all in the accounts line in the +general section of the config file, and add a per-account +section for each one.

+ + + +

+ + + +
+

Does OfflineIMAP support POP?

+ -
-Sure. Just name them all in the accounts line in the general -section of the config file, and add a per-account section -for each one.
- - - -
-Does OfflineIMAP support POP?
- - - - +
-No. POP is not robust enough to do a completely reliable + +

No. POP is not robust enough to do a completely reliable multi-machine synchronization like OfflineIMAP can do. -OfflineIMAP will not support it.

- +OfflineIMAP will not support it.

+ + + +

+ + + +
+

Do you support mailbox formats other than +Maildir?

+ -
-Do you support mailbox formats other than -Maildir?
- + + +

Not at present. There is no technical reason not to; just +no demand yet. Maildir is a superior format anyway.

+ + + +

+ + + +
+

[technical] Why are your Maildir message filenames so +huge?

+ -
-Not at present. There is no technical reason not to; just no -demand yet. Maildir is a superior format -anyway.
- - - -
-[technical] Why are your Maildir message filenames so -huge?
- - - - +
-OfflineIMAP has two relevant principles: 1) never + +

OfflineIMAP has two relevant principles: 1) never modifying your messages in any way and 2) ensuring 100% reliable synchronizations. In order to do a reliable sync, OfflineIMAP must have a way to uniquely identify each @@ -1230,134 +1311,178 @@ your account name, the folder name, and the message UID. The account name can be calculated from the path in which your messages are. The folder name can usually be as well, BUT some mail clients move messages between folders by simply -moving the file, leaving the name intact.

- - + +
+ +

- +
-So, OfflineIMAP must store both a UID folder ID. The -folder ID is necessary so OfflineIMAP can detect a -message moved to a different folder. OfflineIMAP + +

So, OfflineIMAP must store both a UID folder ID. +The folder ID is necessary so OfflineIMAP can detect +a message moved to a different folder. OfflineIMAP stores the UID (U= number) and an md5sum of the foldername -(FMD5= number) to facilitate this.

- +(FMD5= number) to facilitate this.

+ +

+ +

+ + + +
+

What is the speed of OfflineIMAP’s +sync?

+ -
-What is the speed of OfflineIMAP's sync?
- - - - +
-OfflineIMAP versions 2.0 and above contain a + +

OfflineIMAP versions 2.0 and above contain a multithreaded system. A good way to experiment is by setting maxsyncaccounts to 3 and maxconnections to 3 in each account -clause.

- - + +
+ +

- +
-This lets OfflineIMAP open up multiple connections + +

This lets OfflineIMAP open up multiple connections simultaneously. That will let it process multiple folders and messages at once. In most cases, this will increase -performance of the sync.

- - - -
-Don't set the number too high. If you do that, things might -actually slow down as your link gets saturated. Also, too -many connections can cause mail servers to have excessive -load. Administrators might take unkindly to this, and the -server might bog down. There are many variables in the -optimal setting; experimentation may help.
- - - -
-An informal benchmark yields these results for my -setup:
- - - -
-10 minutes with MacOS X Mail.app "manual +performance of the sync.

+ +

Don’t set the number too high. If you do that, +things might actually slow down as your link gets saturated. +Also, too many connections can cause mail servers to have +excessive load. Administrators might take unkindly to this, +and the server might bog down. There are many variables in +the optimal setting; experimentation may help.

+ +

An informal benchmark yields these results for my +setup:

+ +

10 minutes with MacOS X Mail.app "manual cache"
5 minutes with GNUS agent sync
20 seconds with OfflineIMAP 1.x
9 seconds with OfflineIMAP 2.x
3 seconds with OfflineIMAP 3.x "cold start"
2 seconds with OfflineIMAP 3.x "held -connection"

+connection"

+ +

CONFORMING TO

- - + +

-
-Internet Message Access Protocol version 4rev1 (IMAP 4rev1) -as specified in RFC2060
+ + - +

+ + + - + + + +
+ +

Internet Message Access Protocol version 4rev1 (IMAP +4rev1) as specified in RFC2060

+
-Maildir as specified in + + +

+
+ +

CRAM-MD5 as specified in RFC2195

+

+ +

+ + + + +
+ +

+
+ +

Maildir as specified in http://www.qmail.org/qmail-manual-html/man5/maildir.html and -http://cr.yp.to/proto/maildir.html.

- - +http://cr.yp.to/proto/maildir.html.

+ -
-Standard Python 2.2.1 as implemented on POSIX-compliant -systems.
+ + + +

+ + + + +

Standard Python 2.2.1 as implemented on POSIX-compliant +systems.

+ +

NOTES

- + +

+ + + +
+

DELETING LOCAL FOLDERS

+ -
-DELETING LOCAL FOLDERS
- - - - +
-OfflineIMAP does a two-way synchronization. That is, -if you make a change to the mail on the server, it will be -propogated to your local copy, and vise-versa. Some people -might think that it would be wise to just delete all their -local mail folders periodically. If you do this with + +

OfflineIMAP does a two-way synchronization. That +is, if you make a change to the mail on the server, it will +be propogated to your local copy, and vise-versa. Some +people might think that it would be wise to just delete all +their local mail folders periodically. If you do this with OfflineIMAP, remember to also remove your local status cache (~/.offlineimap by default). Otherwise, OfflineIMAP will take this as an intentional deletion of many messages and will interpret your action as requesting them to be deleted -from the server as well. (If you don't understand this, -don't worry; you probably won't encounter this -situation)

- +from the server as well. (If you don’t understand +this, don’t worry; you probably won’t encounter +this situation)

+ + + +

+ + + +
+

COPYING MESSAGES BETWEEN FOLDERS

+ -
-COPYING MESSAGES BETWEEN FOLDERS
- - - - +
-Normally, when you copy a message between folders or add a -new message to a folder locally, OfflineIMAP will + +

Normally, when you copy a message between folders or add +a new message to a folder locally, OfflineIMAP will just do the right thing. However, sometimes this can be tricky -- if your IMAP server does not provide the SEARCH command, or does not return something useful, @@ -1367,137 +1492,117 @@ upload the message to the IMAP server and delete it from your local folder. Then, on your next sync, the message will be re-downloaded with the proper UID. OfflineIMAP makes sure that the message was properly uploaded before -deleting it, so there should be no risk of data -loss.

- +deleting it, so there should be no risk of data loss.

+ + + +

+ + + +
+

MAILING LIST

+ -
-MAILING LIST
- - - -
-There is an OfflineIMAP mailing list available.
- - - - +
-To subscribe, send the text "Subscribe" in the + +

There is an OfflineIMAP mailing list available.

+ +

To subscribe, send the text "Subscribe" in the subject of a mail to offlineimap-request@complete.org. To -post, send the message to -offlineimap@complete.org.

+post, send the message to offlineimap@complete.org.

+ +

BUGS

- - +

- +
-Reports of bugs should be sent via e-mail to the + +

Reports of bugs should be sent via e-mail to the OfflineIMAP bug-tracking system (BTS) at offlineimap@bugs.complete.org or submitted on-line using the Web interface at http://bugs.complete.org/. The Web site also lists all current bugs, where you can check their -status or contribute to fixing them.

+status or contribute to fixing them.

+ +

COPYRIGHT

- - +

-
-OfflineIMAP is Copyright (C) 2002 John Goerzen.
- - - - +
-This program is free software; you can redistribute it + +

OfflineIMAP is Copyright (C) 2002 John Goerzen.

+ +

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later -version.

- - - -
-This program is distributed in the hope that it will be +version.

+ +

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -details.

- - - -
-You should have received a copy of the GNU General Public -License along with this program; if not, write -to:
- - - -
-Free Software Foundation, Inc.
+details.

+ +

You should have received a copy of the GNU General Public +License along with this program; if not, write to:

+ +

Free Software Foundation, Inc.
59 Temple Place
Suite 330
Boston, MA 02111-1307
-USA

+USA

+ +

AUTHOR

- - +

- +
-OfflineIMAP, its libraries, documentation, and all + +

OfflineIMAP, its libraries, documentation, and all included files, except where noted, was written by John Goerzen <jgoerzen@complete.org> and copyright is held -as stated in the COPYRIGHT section.

- - - -
-OfflineIMAP may be downloaded, and information found, from -its homepage via either Gopher or HTTP:
- - - -
-gopher://quux.org/1/devel/offlineimap
-http://quux.org/devel/offlineimap
- - - -
-OfflineIMAP may also be downloaded using Subversion. +as stated in the COPYRIGHT section.

+ +

OfflineIMAP may be downloaded, and information found, +from its homepage via either Gopher or HTTP:

+ +

gopher://quux.org/1/devel/offlineimap
+http://quux.org/devel/offlineimap

+ +

OfflineIMAP may also be downloaded using Subversion. Additionally, the distributed tar.gz may be updated with a simple "svn update" command; it is ready to go. For information on getting OfflineIMAP with Subversion, -please visit:

- - - -
-http://svn.complete.org/
+please visit:

+ +

http://svn.complete.org/

+ +

SEE ALSO

- - +

-
-mutt(1), python(1).
+ + +

mutt(1), python(1).

+ +


diff --git a/offlineimap/head/manual.pdf b/offlineimap/head/manual.pdf index feb1c1173ff0600094602e92196b5fceb8e6c1c4..5308461cc23de993bf085f550847bed5bb825dc9 100644 GIT binary patch delta 30325 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 literal 62289 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 QD2T*T?b|1LN{Z_L0Vj`^J^%m! diff --git a/offlineimap/head/manual.ps b/offlineimap/head/manual.ps index d54bd70..4b0955e 100644 --- a/offlineimap/head/manual.ps +++ b/offlineimap/head/manual.ps @@ -1,16 +1,16 @@ %!PS-Adobe-3.0 -%%Creator: groff version 1.17.2 -%%CreationDate: Fri Aug 9 15:51:31 2002 +%%Creator: groff version 1.18 +%%CreationDate: Sat Nov 2 10:25:19 2002 %%DocumentNeededResources: font Times-Roman %%+ font Times-Bold %%+ font Times-Italic -%%DocumentSuppliedResources: procset grops 1.17 2 +%%DocumentSuppliedResources: procset grops 1.18 0 %%Pages: 9 %%PageOrder: Ascend %%Orientation: Portrait %%EndComments %%BeginProlog -%%BeginResource: procset grops 1.17 2 +%%BeginResource: procset grops 1.18 0 /setpacking where{ pop currentpacking @@ -108,11 +108,20 @@ TM setmatrix /ST/stroke load def /MT/moveto load def /CL/closepath load def -/FL{ -currentgray exch setgray fill setgray +/Fr{ +setrgbcolor fill }bind def -/BL/fill load def +/Fk{ +setcmykcolor fill +}bind def +/Fg{ +setgray fill +}bind def +/FL/fill load def /LW/setlinewidth load def +/Cr/setrgbcolor load def +/Ck/setcmykcolor load def +/Cg/setgray load def /RE{ findfont dup maxlength 1 index/FontName known not{1 add}if dict begin @@ -171,7 +180,7 @@ setpacking %%IncludeResource: font Times-Italic grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron -/scaron/zcaron/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef +/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent @@ -248,9 +257,9 @@ F -.15(ve)-.15 G 3.216(r5).15 G 3.216(0f)-3.216 G .716 orithm that can dramatically speed up performance in man)108 302.4 R 2.821(ys)-.15 G(itu-)-2.821 E(ations by synchronizing se)108 314.4 Q -.15(ve)-.25 G(ral dif).15 E(ferent things simultaneously)-.25 E(.)-.65 -E F2(Of\215ineIMAP)108 331.2 Q F0(is)3.066 E F3(FLEXIBLE;)3.066 E F0 -.566(you can customize which folders are synced via re)3.066 F .565 -(gular e)-.15 F .565(xpressions, lists, or)-.15 F .733(Python e)108 +E F2(Of\215ineIMAP)108 331.2 Q F0(is)3.036 E F3(FLEXIBLE;)3.456 E F0 +.536(you can customize which folders are synced via re)3.036 F .535 +(gular e)-.15 F .535(xpressions, lists, or)-.15 F .733(Python e)108 343.2 R .733(xpressions; a v)-.15 F .733(ersatile and comprehensi)-.15 F 1.033 -.15(ve c)-.25 H .734 (on\214guration \214le is used to control beha).15 F .734(vior; tw)-.2 F @@ -262,9 +271,9 @@ E F2(Of\215ineIMAP)108 331.2 Q F0(is)3.066 E F3(FLEXIBLE;)3.066 E F0 (\215ine \(or "unplugged"\) reading is sup-)-.25 F .543(ported; and eso\ teric IMAP features are supported to ensure compatibility with the wide\ st v)108 379.2 R .543(ariety of IMAP)-.25 F(serv)108 391.2 Q(ers.)-.15 E -F2(Of\215ineIMAP)108 408 Q F0(is)4.064 E F3(SAFE;)4.064 E F0 1.565 -(it uses an algorithm designed to pre)4.064 F -.15(ve)-.25 G 1.565 -(nt mail loss at all costs.).15 F 1.565(Because of the)6.565 F .011 +F2(Of\215ineIMAP)108 408 Q F0(is)4.045 E F3(SAFE;)4.375 E F0 1.545 +(it uses an algorithm designed to pre)4.045 F -.15(ve)-.25 G 1.545 +(nt mail loss at all costs.).15 F 1.546(Because of the)6.546 F .011 (design of this algorithm, e)108 420 R -.15(ve)-.25 G 2.511(np).15 G .011(rogramming errors should not result in loss of mail.)-2.511 F 2.51 (Ia)5.01 G 2.51(ms)-2.51 G 2.51(oc)-2.51 G .01(on\214dent in the)-2.51 F @@ -318,7 +327,7 @@ G(ilable.).25 E 32.5<8359>108 660 S .086(ou must ha)-33.6 F .386 -.15 (installed. If)144 708 R .36(you intend to use the SSL interf)2.86 F .359(ace, your Python must ha)-.1 F .659 -.15(ve b)-.2 H .359(een b).15 F .359(uilt with SSL sup-)-.2 F(port.)144 720 Q(John Goerzen)72 768 Q -(July 12, 2002)151.655 E(1)201.915 E EP +(July 12, 2002)151.655 E(1)201.915 E 0 Cg EP %%Page: 2 2 %%BeginPageSetup BP @@ -359,24 +368,25 @@ BP (TION)-.95 E F0(Do)108 333.6 Q(wnload the tar)-.25 E(.gz v)-.55 E (ersion of the package from the website.)-.15 E (Then run these commands:)5 E F1(tar -zxvf of\215ineimap-x.y)108 350.4 Q -(.z.tar)-.7 E(.gz)-1 E(cd of\215ineimap-x.y)108 362.4 Q(.z)-.7 E F0 .148 -(When you w)108 379.2 R .148(ant to run)-.1 F F1(Of\215ineIMAP)2.648 E -(,)-.92 E F0 .148(you will issue the)2.648 F F1(cd)2.648 E F0 .148 -(command as abo)2.648 F .449 -.15(ve a)-.15 H .149(nd then type).15 F F1 -(./of\215ineimap;)2.649 E F0(there is no installation step necessary)108 -391.2 Q(.)-.65 E/F2 10.95/Times-Bold@0 SF(CONFIGURA)72 408 Q(TION)-1.04 -E F1(Of\215ineIMAP)108 420 Q F0 .509(is re)3.009 F .508 +(.z.tar)-.7 E(.gz)-1 E(cd of\215ineimap-x.y)108 362.4 Q(.z)-.7 E F0 +3.873(When you w)108 379.2 R 3.873(ant to run)-.1 F F1(Of\215ineIMAP) +6.373 E(,)-.92 E F0 3.873(you will issue the)6.373 F F1(cd)6.373 E F0 +3.873(command as abo)6.373 F 4.173 -.15(ve a)-.15 H 3.874(nd then type) +.15 F F1(./of\215ineimap.py;)108 391.2 Q F0 +(there is no installation step necessary)2.5 E(.)-.65 E/F2 10.95 +/Times-Bold@0 SF(CONFIGURA)72 408 Q(TION)-1.04 E F1(Of\215ineIMAP)108 +420 Q F0 .547(is re)3.047 F .547 (gulated by a con\214guration \214le that is normally stored in)-.15 F -/F3 10/Times-Italic@0 SF(~/.of)3.008 E(\215ineimapr)-.18 E(c.)-.37 E F1 -(Of\215ineIMAP)5.508 E F0 .003(ships with a \214le named)108 432 R F3 -(of)2.503 E(\215ineimap.conf)-.18 E F0 .003(that you should cop)2.503 F -2.503(yt)-.1 G 2.503(ot)-2.503 G .003(hat location and then edit.)-2.503 -F .004(This \214le is vital)5.003 F .256 -(to proper operation of the system; it sets e)108 444 R -.15(ve)-.25 G -.256(rything you need to run).15 F F1(Of\215ineIMAP)2.755 E(.)-1.1 E F0 -.255(Full documentation for)5.255 F -(the con\214guration \214le is included within the sample \214le.)108 -456 Q F2(OPTIONS)72 472.8 Q F0 .061 +/F3 10/Times-Italic@0 SF(~/.of)2.547 E(\215ineimapr)-.18 E(c.)-.37 E F1 +(Of\215ineIMAP)5.546 E F0 1.008(ships with a \214le named)108 432 R F3 +(of)3.738 E(\215ineimap.conf)-.18 E F0 1.008(that you should cop)5.468 F +3.508(yt)-.1 G 3.508(ot)-3.508 G 1.009(hat location and then edit.) +-3.508 F 1.009(This \214le is)6.009 F .638 +(vital to proper operation of the system; it sets e)108 444 R -.15(ve) +-.25 G .637(rything you need to run).15 F F1(Of\215ineIMAP)3.137 E(.) +-1.1 E F0 .637(Full documenta-)5.637 F(tion for the con\214guration \ +\214le is included within the sample \214le.)108 456 Q F2(OPTIONS)72 +472.8 Q F0 .061 (Most con\214guration is done via the con\214guration \214le.)108 484.8 R(Ne)5.061 E -.15(ve)-.25 G .061(rtheless, there are a fe).15 F 2.561 (wo)-.25 G .062(ptions that you may set)-2.561 F(for)108 496.8 Q F1 @@ -410,8 +420,8 @@ E(.)-1.1 E108 631.2 Q F3(accountlist)2.5 E F0(Ov)144 643.2 Q .84 (accounts, or to sync some accounts that you normally prefer not to.)144 667.2 Q F1108 684 Q F3(con\214g\214le)2.5 E F0 (Speci\214es a con\214guration \214le to use in lieu of the def)144 696 -Q(ault,)-.1 E F3(~/.of)2.5 E(\215ineimapr)-.18 E(c.)-.37 E F0 -(John Goerzen)72 768 Q(July 12, 2002)151.655 E(2)201.915 E EP +Q(ault,)-.1 E F3(~/.of)2 E(\215ineimapr)-.18 E(c.)-.37 E F0 +(John Goerzen)72 768 Q(July 12, 2002)151.655 E(2)201.915 E 0 Cg EP %%Page: 3 3 %%BeginPageSetup BP @@ -460,13 +470,13 @@ SF(USER INTERF)72 312 Q -.602(AC)-.986 G(ES).602 E F1(Of\215ineIMAP)108 (There are tw)5.023 F 2.523(og)-.1 G .024(raphical interf)-2.523 F .024 (aces, one terminal interf)-.1 F .024(ace, and tw)-.1 F 2.524(on)-.1 G (oninteracti)-2.524 E .324 -.15(ve i)-.25 H(nter).15 E(-)-.2 E -.1(fa) -108 348 S 1.002(ces suitable for scripting or logging purposes.).1 F -(The)6.002 E F2(ui)3.502 E F0 1.002 -(option in the con\214guration \214le speci\214es the user)3.502 F -(interf)108 360 Q .475(ace preferences.)-.1 F(The)5.475 E F22.975 -E F0 .475(command-line option can o)2.975 F -.15(ve)-.15 G .476 -(rride the con\214guration \214le.).15 F .476(The a)5.476 F -.25(va)-.2 -G .476(ilable v).25 F(al-)-.25 E(ues for the con\214guration \214le or \ +108 348 S .975(ces suitable for scripting or logging purposes.).1 F(The) +5.974 E F2(ui)3.554 E F0 .974 +(option in the con\214guration \214le speci\214es the user)3.834 F +(interf)108 360 Q .483(ace preferences.)-.1 F(The)5.483 E F22.624 +E F0 .484(command-line option can o)3.234 F -.15(ve)-.15 G .484 +(rride the con\214guration \214le.).15 F .484(The a)5.484 F -.25(va)-.2 +G .484(ilable v).25 F(al-)-.25 E(ues for the con\214guration \214le or \ command-line are describef in this section.)108 372 Q F1(Tk.Blink)87 388.8 Q(enlights)-.1 E F0 1.709(This is an interf)108 400.8 R 1.709 (ace designed to be sleek, fun to w)-.1 F 1.709(atch, and informati)-.1 @@ -487,9 +497,9 @@ ry small, so it uses little desktop space, yet it is quite functional.) (-coded to match the)-.2 F(color of the lights.)108 460.8 Q(Tk.Blink)108 477.6 Q 5.224(enlights is the only user interf)-.1 F 5.224 (ace that has con\214gurable parameters; see the e)-.1 F(xample)-.15 E -F2(of)108 489.6 Q(\215ineimap.conf)-.18 E F0(for more details.)2.5 E .43 -(Each light in the Tk.Blink)108 506.4 R .43(enlights interf)-.1 F .429 -(ace represents a thread of e)-.1 F -.15(xe)-.15 G .429 +F2(of)108.23 489.6 Q(\215ineimap.conf)-.18 E F0(for more details.)4.46 E +.43(Each light in the Tk.Blink)108 506.4 R .43(enlights interf)-.1 F +.429(ace represents a thread of e)-.1 F -.15(xe)-.15 G .429 (cution -- that is, a particular task that).15 F F1(Of\215ineIMAP)108 518.4 Q F0 .866(is performing right no)3.366 F 4.666 -.65(w. T)-.25 H .867(he color indicates what task the particular thread is performing,) @@ -502,7 +512,7 @@ F1(Red \(Meaning 1\))108 576 Q F0 .442 (is the color of the main program')144 588 R 2.942(st)-.55 G .442 (hread, which basically does nothing b)-2.942 F .442 (ut monitor the others.)-.2 F(It)5.442 E -(might remind you of HAL 9000 in)144 600 Q F2(2001.)2.5 E F1(Gray)108 +(might remind you of HAL 9000 in)144 600 Q F2(2001.)2.88 E F1(Gray)108 616.8 Q F0(indicates that the thread is establishing a ne)13.78 E 2.5 (wc)-.25 G(onnection to the IMAP serv)-2.5 E(er)-.15 E(.)-.55 E F1(Pur) 108 633.6 Q(ple)-.1 E F0 .656(is the color of an account synchronizatio\ @@ -512,7 +522,7 @@ F1(Cyan)108 662.4 Q F0(indicates that the thread is syncing a folder) 13.22 E(.)-.55 E F1(Gr)108 679.2 Q(een)-.18 E F0(means that a folder') 9.52 E 2.5(sm)-.55 G(essage list is being loaded.)-2.5 E F1(Blue)108 696 Q F0(is the color of a message synchronization controller thread.)16.55 -E(John Goerzen)72 768 Q(July 12, 2002)151.655 E(3)201.915 E EP +E(John Goerzen)72 768 Q(July 12, 2002)151.655 E(3)201.915 E 0 Cg EP %%Page: 4 4 %%BeginPageSetup BP @@ -528,11 +538,11 @@ E F1(Pink)108 158.4 Q F0 (\(bright red\) indicates that message \215ags are being remo)15.99 E -.15(ve)-.15 G(d.).15 E F1(Red / Black Flashing)108 175.2 Q F0 (corresponds to the countdo)144 187.2 Q -(wn timer that runs between synchronizations.)-.25 E 1.316 -(The name of this interf)108 204 R 1.316(ace deri)-.1 F -.15(ve)-.25 G -3.816(sf).15 G 1.316(rom a bit of computer science history)-3.816 F -6.317(.E)-.65 G 1.317(ric Raymond')-6.317 F(s)-.55 E/F2 10 -/Times-Italic@0 SF -.35(Ja)3.817 G -.37(rg).35 G 1.317(on F).37 F(ile) +(wn timer that runs between synchronizations.)-.25 E 1.305 +(The name of this interf)108 204 R 1.305(ace deri)-.1 F -.15(ve)-.25 G +3.805(sf).15 G 1.305(rom a bit of computer science history)-3.805 F +6.305(.E)-.65 G 1.305(ric Raymond')-6.305 F(s)-.55 E/F2 10 +/Times-Italic@0 SF -.35(Ja)3.805 G -.37(rg).35 G 1.305(on F).37 F(ile) -.45 E F0(de\214nes blink)108 216 Q(enlights, in part, as:)-.1 E .132 (Front-panel diagnostic lights on a computer)144 232.8 R 2.632(,e)-.4 G .132(sp. a dinosaur)-2.632 F 2.632(.N)-.55 G .632 -.25(ow t)-2.632 H @@ -603,14 +613,14 @@ G(oninteracti)-3.934 E -.15(ve)-.25 G 1.434(.Basic, this user).15 F (to synchronize multiple accounts with the mutt mail)3.014 F(reader)108 672 Q(.)-.55 E(Start by creating a directory to hold your folders:)108 696 Q F1(mkdir ~/Mail)108 708 Q F0(John Goerzen)72 768 Q(July 12, 2002) -151.655 E(4)201.915 E EP +151.655 E(4)201.915 E 0 Cg EP %%Page: 5 5 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 111.22(OFFLINEIMAP\(1\) Of)72 48 R (\215ineIMAP manual)-.25 E(OFFLINEIMAP\(1\))113.72 E(In your)108 84 Q/F1 -10/Times-Italic@0 SF(~/.of)2.5 E(\215ineimapr)-.18 E(c,)-.37 E F0 +10/Times-Italic@0 SF(~/.of)2 E(\215ineimapr)-.18 E(c,)-.37 E F0 (specify this:)2.5 E/F2 10/Times-Bold@0 SF(accounts = P)108 96 Q (ersonal, W)-.2 E(ork)-.75 E F0(Mak)108 120 Q 2.821(es)-.1 G .321 (ure that you ha)-2.821 F .621 -.15(ve b)-.2 H .321(oth a).15 F F2([P) @@ -619,11 +629,11 @@ F0 .32(section, with dif)2.82 F .32(ferent localfolder pathnames and) -.25 F(enable)108 132 Q F2([mbnames].)2.5 E F0 (In each account section, do something lik)108 156 Q 2.5(et)-.1 G(his:) -2.5 E F2(localf)108 168 Q(olders = ~/Mail/P)-.25 E(ersonal)-.2 E F0 -(Add these lines to your)108 192 Q F1(~/.muttr)2.5 E(c:)-.37 E F2(sour) -108 204 Q(ce ~/path-to-mbnames-muttr)-.18 E(c-mailboxes)-.18 E -.25(fo) -108 216 S(lder).25 E(-hook P)-.37 E(ersonal set fr)-.2 E(om="y)-.18 E -(our)-.25 E(email@personal.com")-.18 E -.25(fo)108 228 S(lder).25 E -(-hook W)-.37 E(ork set fr)-.75 E(om="y)-.18 E(our)-.25 E(email@w)-.18 E +(Add these lines to your)108 192 Q F1(~/.muttr)2 E(c:)-.37 E F2(sour)108 +204 Q(ce ~/path-to-mbnames-muttr)-.18 E(c-mailboxes)-.18 E -.25(fo)108 +216 S(lder).25 E(-hook P)-.37 E(ersonal set fr)-.2 E(om="y)-.18 E(our) +-.25 E(email@personal.com")-.18 E -.25(fo)108 228 S(lder).25 E(-hook W) +-.37 E(ork set fr)-.75 E(om="y)-.18 E(our)-.25 E(email@w)-.18 E (ork.com")-.1 E(set mbox_type=Maildir)108 240 Q(set f)108 252 Q (older=$HOME/Mail)-.25 E(set spool\214le=+P)108 264 Q(ersonal/INBO)-.2 E (X)-.4 E F0(That')108 288 Q 2.5(si)-.55 G(t!)-2.5 E F2(UW)87 304.8 Q @@ -665,7 +675,7 @@ E -.18(re)108 436.8 S(fer).18 E(ence = Mail)-.18 E 2.5(#T)108 448.8 S (python\214le=~/.of\215ineimap.py)108 681.6 Q([f)108 693.6 Q(oo])-.25 E -.25(fo)108 705.6 S(ldersort=mycmp).25 E F0(Then, the)108 729.6 Q F1 (~/.of)2.5 E(\215ineimap.py)-.18 E F0(\214le will contain:)2.5 E -(John Goerzen)72 768 Q(July 12, 2002)151.655 E(5)201.915 E EP +(John Goerzen)72 768 Q(July 12, 2002)151.655 E(5)201.915 E 0 Cg EP %%Page: 6 6 %%BeginPageSetup BP @@ -712,16 +722,16 @@ E F0 1.638(IMAP serv)108 345.6 R 1.637 (vious folder by the same name stored.)-.25 F F1(Of\215ineIMAP)5.303 E F0 .303(will detect this)2.803 F(condition and skip the folder)108 434.4 Q 5(.T)-.55 G(his is GOOD, because it pre)-5 E -.15(ve)-.25 G -(nts data loss.).15 E -1.1(Yo)108 451.2 S 2.827(uc)1.1 G .327 -(an \214x it by remo)-2.827 F .327 -(ving your local folder and cache data.)-.15 F -.15(Fo)5.327 G 2.827(ri) -.15 G .327(nstance, if your folders are under)-2.827 F/F3 10 -/Times-Italic@0 SF(~/F)2.826 E(old-)-1.05 E(er)108 463.2 Q(s)-.1 E F0 -(and the folder with the problem is INBO)2.5 E(X, you')-.4 E 2.5(dt)-.5 +(nts data loss.).15 E -1.1(Yo)108 451.2 S 2.854(uc)1.1 G .354 +(an \214x it by remo)-2.854 F .353 +(ving your local folder and cache data.)-.15 F -.15(Fo)5.353 G 2.853(ri) +.15 G .353(nstance, if your folders are under)-2.853 F/F3 10 +/Times-Italic@0 SF(~/F)2.353 E(old-)-1.05 E(er)108 463.2 Q(s)-.1 E F0 +(and the folder with the problem is INBO)2.77 E(X, you')-.4 E 2.5(dt)-.5 G(ype this:)-2.5 E F1(rm -r ~/F)108 480 Q(olders/INBO)-.25 E(X)-.4 E (rm ~/.of\215ineimap/AccountName/INBO)108 492 Q(X)-.4 E F0 (\(replacing AccountName with the account name as speci\214ed in)108 -508.8 Q F3(~/.of)2.5 E(\215ineimapr)-.18 E(c\))-.37 E F0(Ne)108 525.6 Q +508.8 Q F3(~/.of)2 E(\215ineimapr)-.18 E(c\))-.37 E F0(Ne)108 525.6 Q .801(xt time you run)-.15 F F1(Of\215ineIMAP)3.301 E(,)-.92 E F0 .802 (it will re-do)3.302 F .802(wnload the folder with the ne)-.25 F 3.302 (wU)-.25 G 3.302(IDs. Note)-3.302 F .802(that the proce-)3.302 F @@ -756,7 +766,7 @@ F0(It should run on most platforms supported by Python, which are quite\ (Of\215ineIMAP)7.27 E F0 2.27 (is smart enough to \214gure out message deletion without this e)4.77 F 2.27(xtra crutch.)-.15 F(John Goerzen)72 768 Q(July 12, 2002)151.655 E -(6)201.915 E EP +(6)201.915 E 0 Cg EP %%Page: 7 7 %%BeginPageSetup BP @@ -856,7 +866,7 @@ G .132(onnections can cause mail serv)-2.633 F .132(ers to ha)-.15 F (10 minutes with MacOS X Mail.app "manual cache")144 696 Q 2.5(5m)144 708 S(inutes with GNUS agent sync)-2.5 E(20 seconds with Of)144 720 Q (\215ineIMAP 1.x)-.25 E(John Goerzen)72 768 Q(July 12, 2002)151.655 E(7) -201.915 E EP +201.915 E 0 Cg EP %%Page: 8 8 %%BeginPageSetup BP @@ -868,88 +878,88 @@ BP 108 S(econds with Of)-2.5 E(\215ineIMAP 3.x "held connection")-.25 E/F1 10.95/Times-Bold@0 SF(CONFORMING T)72 124.8 Q(O)-.197 E F0 32.5<8349>108 136.8 S(nternet Message Access Protocol v)-32.5 E(ersion 4re)-.15 E -(v1 \(IMAP 4re)-.25 E(v1\) as speci\214ed in RFC2060)-.25 E 32.5<834d> -108 153.6 S 8.92(aildir as speci\214ed in http://www)-32.5 F(.qmail.or) --.65 E(g/qmail-manual-html/man5/maildir)-.18 E 8.92(.html and)-.55 F -(http://cr)144 165.6 Q(.yp.to/proto/maildir)-.55 E(.html.)-.55 E 32.5 -<8353>108 182.4 S +(v1 \(IMAP 4re)-.25 E(v1\) as speci\214ed in RFC2060)-.25 E 32.5<8343> +108 153.6 S(RAM-MD5 as speci\214ed in RFC2195)-32.5 E 32.5<834d>108 +170.4 S 8.92(aildir as speci\214ed in http://www)-32.5 F(.qmail.or)-.65 +E(g/qmail-manual-html/man5/maildir)-.18 E 8.92(.html and)-.55 F +(http://cr)144 182.4 Q(.yp.to/proto/maildir)-.55 E(.html.)-.55 E 32.5 +<8353>108 199.2 S (tandard Python 2.2.1 as implemented on POSIX-compliant systems.)-32.5 E -F1(NO)72 199.2 Q(TES)-.438 E/F2 10/Times-Bold@0 SF -(DELETING LOCAL FOLDERS)87 211.2 Q(Of\215ineIMAP)108 223.2 Q F0 .532 -(does a tw)3.032 F(o-w)-.1 E .532(ay synchronization.)-.1 F .532 -(That is, if you mak)5.532 F 3.032(eac)-.1 G .532 -(hange to the mail on the serv)-3.032 F(er)-.15 E 3.033(,i)-.4 G(t) --3.033 E .897(will be propog)108 235.2 R .897(ated to your local cop) --.05 F 2.197 -.65(y, a)-.1 H .897(nd vise-v).65 F 3.397(ersa. Some)-.15 -F .896(people might think that it w)3.397 F .896(ould be wise to)-.1 F -1.59(just delete all their local mail folders periodically)108 247.2 R -6.59(.I)-.65 G 4.09(fy)-6.59 G 1.59(ou do this with Of)-4.09 F -(\215ineIMAP)-.25 E 4.09(,r)-1.11 G 1.59(emember to also)-4.09 F(remo) -108 259.2 Q 1.67 -.15(ve y)-.15 H 1.37(our local status cache \(~/.of) -.15 F 1.37(\215ineimap by def)-.25 F 3.87(ault\). Otherwise,)-.1 F(Of) -3.87 E 1.37(\215ineIMAP will tak)-.25 F 3.87(et)-.1 G 1.37(his as an) --3.87 F .415(intentional deletion of man)108 271.2 R 2.915(ym)-.15 G -.416(essages and will interpret your action as requesting them to be de\ -leted from)-2.915 F(the serv)108 283.2 Q(er as well.)-.15 E -(\(If you don')5 E 2.5(tu)-.18 G(nderstand this, don')-2.5 E 2.5(tw)-.18 -G(orry; you probably w)-2.6 E(on')-.1 E 2.5(te)-.18 G -(ncounter this situation\))-2.5 E F2(COPYING MESSA)87 300 Q -(GES BETWEEN FOLDERS)-.55 E F0(Normally)108 312 Q 5.859(,w)-.65 G 3.359 -(hen you cop)-5.859 F 5.859(yam)-.1 G 3.359 +F1(NO)72 216 Q(TES)-.438 E/F2 10/Times-Bold@0 SF(DELETING LOCAL FOLDERS) +87 228 Q(Of\215ineIMAP)108 240 Q F0 .532(does a tw)3.032 F(o-w)-.1 E +.532(ay synchronization.)-.1 F .532(That is, if you mak)5.532 F 3.032 +(eac)-.1 G .532(hange to the mail on the serv)-3.032 F(er)-.15 E 3.033 +(,i)-.4 G(t)-3.033 E .897(will be propog)108 252 R .897 +(ated to your local cop)-.05 F 2.197 -.65(y, a)-.1 H .897(nd vise-v).65 +F 3.397(ersa. Some)-.15 F .896(people might think that it w)3.397 F .896 +(ould be wise to)-.1 F 1.59 +(just delete all their local mail folders periodically)108 264 R 6.59 +(.I)-.65 G 4.09(fy)-6.59 G 1.59(ou do this with Of)-4.09 F(\215ineIMAP) +-.25 E 4.09(,r)-1.11 G 1.59(emember to also)-4.09 F(remo)108 276 Q 1.67 +-.15(ve y)-.15 H 1.37(our local status cache \(~/.of).15 F 1.37 +(\215ineimap by def)-.25 F 3.87(ault\). Otherwise,)-.1 F(Of)3.87 E 1.37 +(\215ineIMAP will tak)-.25 F 3.87(et)-.1 G 1.37(his as an)-3.87 F .415 +(intentional deletion of man)108 288 R 2.915(ym)-.15 G .416(essages and\ + will interpret your action as requesting them to be deleted from)-2.915 +F(the serv)108 300 Q(er as well.)-.15 E(\(If you don')5 E 2.5(tu)-.18 G +(nderstand this, don')-2.5 E 2.5(tw)-.18 G(orry; you probably w)-2.6 E +(on')-.1 E 2.5(te)-.18 G(ncounter this situation\))-2.5 E F2 +(COPYING MESSA)87 316.8 Q(GES BETWEEN FOLDERS)-.55 E F0(Normally)108 +328.8 Q 5.859(,w)-.65 G 3.359(hen you cop)-5.859 F 5.859(yam)-.1 G 3.359 (essage between folders or add a ne)-5.859 F 5.859(wm)-.25 G 3.358 -(essage to a folder locally)-5.859 F(,)-.65 E F2(Of\215ineIMAP)108 324 Q -F0 .853(will just do the right thing.)3.352 F(Ho)5.853 E(we)-.25 E -.15 -(ve)-.25 G 1.653 -.4(r, s).15 H .853(ometimes this can be trick).4 F +(essage to a folder locally)-5.859 F(,)-.65 E F2(Of\215ineIMAP)108 340.8 +Q F0 .853(will just do the right thing.)3.352 F(Ho)5.853 E(we)-.25 E +-.15(ve)-.25 G 1.653 -.4(r, s).15 H .853(ometimes this can be trick).4 F 3.353(y-)-.15 G 3.353(-i)-3.353 G 3.353(fy)-3.353 G .853(our IMAP serv) --3.353 F(er)-.15 E .29(does not pro)108 336 R .29 +-3.353 F(er)-.15 E .29(does not pro)108 352.8 R .29 (vide the SEARCH command, or does not return something useful,)-.15 F F2 (Of\215ineIMAP)2.79 E F0 .29(cannot deter)2.79 F(-)-.2 E .173 -(mine the ne)108 348 R 2.673(wU)-.25 G .173(ID of the message.)-2.673 F -.173(So, in these rare instances, Of)5.173 F .174 -(\215ineIMAP will upload the message to the)-.25 F .64(IMAP serv)108 360 -R .64(er and delete it from your local folder)-.15 F 5.64(.T)-.55 G .64 -(hen, on your ne)-5.64 F .64(xt sync, the message will be re-do)-.15 F -(wn-)-.25 E 1.472(loaded with the proper UID.)108 372 R F2 +(mine the ne)108 364.8 R 2.673(wU)-.25 G .173(ID of the message.)-2.673 +F .173(So, in these rare instances, Of)5.173 F .174 +(\215ineIMAP will upload the message to the)-.25 F .64(IMAP serv)108 +376.8 R .64(er and delete it from your local folder)-.15 F 5.64(.T)-.55 +G .64(hen, on your ne)-5.64 F .64(xt sync, the message will be re-do) +-.15 F(wn-)-.25 E 1.472(loaded with the proper UID.)108 388.8 R F2 (Of\215ineIMAP)6.473 E F0(mak)3.973 E 1.473(es sure that the message w) -.1 F 1.473(as properly uploaded before)-.1 F -(deleting it, so there should be no risk of data loss.)108 384 Q F2 -(MAILING LIST)87 400.8 Q F0(There is an Of)108 412.8 Q +(deleting it, so there should be no risk of data loss.)108 400.8 Q F2 +(MAILING LIST)87 417.6 Q F0(There is an Of)108 429.6 Q (\215ineIMAP mailing list a)-.25 E -.25(va)-.2 G(ilable.).25 E 2.448 -.8 -(To s)108 429.6 T .847(ubscribe, send the te).8 F .847 +(To s)108 446.4 T .847(ubscribe, send the te).8 F .847 (xt "Subscribe" in the subject of a mail to of)-.15 F (\215ineimap-request@complete.or)-.25 E 3.347(g. T)-.18 F(o)-.8 E -(post, send the message to of)108 441.6 Q(\215ineimap@complete.or)-.25 E -(g.)-.18 E F1 -.11(BU)72 458.4 S(GS).11 E F0 4.419(Reports of b)108 -470.4 R 4.419(ugs should be sent via e-mail to the)-.2 F F2 +(post, send the message to of)108 458.4 Q(\215ineimap@complete.or)-.25 E +(g.)-.18 E F1 -.11(BU)72 475.2 S(GS).11 E F0 4.419(Reports of b)108 +487.2 R 4.419(ugs should be sent via e-mail to the)-.2 F F2 (Of\215ineIMAP)6.919 E F0 -.2(bu)6.92 G 4.42 -(g-tracking system \(BTS\) at).2 F(of)108 482.4 Q(\215ineimap@b)-.25 E +(g-tracking system \(BTS\) at).2 F(of)108 499.2 Q(\215ineimap@b)-.25 E (ugs.complete.or)-.2 E 3.397(go)-.18 G 3.397(rs)-3.397 G .897 (ubmitted on-line using the W)-3.397 F .896(eb interf)-.8 F .896 -(ace at http://b)-.1 F(ugs.complete.or)-.2 E(g/.)-.18 E(The W)108 494.4 +(ace at http://b)-.1 F(ugs.complete.or)-.2 E(g/.)-.18 E(The W)108 511.2 Q(eb site also lists all current b)-.8 E (ugs, where you can check their status or contrib)-.2 E -(ute to \214xing them.)-.2 E F1(COPYRIGHT)72 511.2 Q F0(Of)108 523.2 Q +(ute to \214xing them.)-.2 E F1(COPYRIGHT)72 528 Q F0(Of)108 540 Q (\215ineIMAP is Cop)-.25 E(yright \(C\) 2002 John Goerzen.)-.1 E .286 -(This program is free softw)108 540 R .286(are; you can redistrib)-.1 F -.287(ute it and/or modify it under the terms of the GNU General)-.2 F -.766(Public License as published by the Free Softw)108 552 R .766(are F) --.1 F .766(oundation; either v)-.15 F .766 -(ersion 2 of the License, or \(at your)-.15 F(option\) an)108 564 Q 2.5 -(yl)-.15 G(ater v)-2.5 E(ersion.)-.15 E .579(This program is distrib)108 -580.8 R .579(uted in the hope that it will be useful, b)-.2 F .58 +(This program is free softw)108 556.8 R .286(are; you can redistrib)-.1 +F .287(ute it and/or modify it under the terms of the GNU General)-.2 F +.766(Public License as published by the Free Softw)108 568.8 R .766 +(are F)-.1 F .766(oundation; either v)-.15 F .766 +(ersion 2 of the License, or \(at your)-.15 F(option\) an)108 580.8 Q +2.5(yl)-.15 G(ater v)-2.5 E(ersion.)-.15 E .579(This program is distrib) +108 597.6 R .579(uted in the hope that it will be useful, b)-.2 F .58 (ut WITHOUT ANY W)-.2 F(ARRANTY)-1.2 E 3.08(;w)-.92 G(ithout)-3.08 E --2.15 -.25(ev e)108 592.8 T 2.73(nt).25 G .23(he implied w)-2.73 F .229 +-2.15 -.25(ev e)108 609.6 T 2.73(nt).25 G .23(he implied w)-2.73 F .229 (arranty of MERCHANT)-.1 F .229(ABILITY or FITNESS FOR A P)-.93 F(AR) -.92 E .229(TICULAR PURPOSE.)-.6 F(See)5.229 E -(the GNU General Public License for more details.)108 604.8 Q -1.1(Yo) -108 621.6 S 2.77(us)1.1 G .27(hould ha)-2.77 F .57 -.15(ve r)-.2 H(ecei) +(the GNU General Public License for more details.)108 621.6 Q -1.1(Yo) +108 638.4 S 2.77(us)1.1 G .27(hould ha)-2.77 F .57 -.15(ve r)-.2 H(ecei) .15 E -.15(ve)-.25 G 2.77(dac).15 G(op)-2.77 E 2.77(yo)-.1 G 2.77(ft) -2.77 G .27 (he GNU General Public License along with this program; if not, write) --2.77 F(to:)108 633.6 Q(Free Softw)108 650.4 Q(are F)-.1 E -(oundation, Inc.)-.15 E(59 T)108 662.4 Q(emple Place)-.7 E(Suite 330)108 -674.4 Q(Boston, MA)108 686.4 Q(02111-1307)5 E(USA)108 698.4 Q -(John Goerzen)72 768 Q(July 12, 2002)151.655 E(8)201.915 E EP +-2.77 F(to:)108 650.4 Q(Free Softw)108 667.2 Q(are F)-.1 E +(oundation, Inc.)-.15 E(59 T)108 679.2 Q(emple Place)-.7 E(Suite 330)108 +691.2 Q(Boston, MA)108 703.2 Q(02111-1307)5 E(USA)108 715.2 Q +(John Goerzen)72 768 Q(July 12, 2002)151.655 E(8)201.915 E 0 Cg EP %%Page: 9 9 %%BeginPageSetup BP @@ -975,7 +985,8 @@ F 2.528(wnloaded using Sub)-.25 F -.15(ve)-.15 G 5.028 -3.217 F(\215ineIMAP)-.25 E(with Sub)108 194.4 Q -.15(ve)-.15 G (rsion, please visit:).15 E(http://svn.complete.or)108 211.2 Q(g/)-.18 E F1(SEE ALSO)72 228 Q F2(mutt)108 240 Q F0(\(1\),)A F2(python)2.5 E F0 -(\(1\).)A(John Goerzen)72 768 Q(July 12, 2002)151.655 E(9)201.915 E EP +(\(1\).)A(John Goerzen)72 768 Q(July 12, 2002)151.655 E(9)201.915 E 0 Cg +EP %%Trailer end %%EOF diff --git a/offlineimap/head/manual.txt b/offlineimap/head/manual.txt index 5bb03f9..fff6c7c 100644 --- a/offlineimap/head/manual.txt +++ b/offlineimap/head/manual.txt @@ -1,355 +1,312 @@ -OFFLINEIMAP(1) OfflineIMAP manual OFFLINEIMAP(1) +OFFLINEIMAP(1) OfflineIMAP manual OFFLINEIMAP(1) NAME - OfflineIMAP - Powerful IMAP/Maildir synchronization and - reader support + OfflineIMAP - Powerful IMAP/Maildir synchronization and reader support SYNOPSIS - offlineimap [ -1 ] [ -P profiledir ] [ -a accountlist ] [ - -c configfile ] [ -d debugtype[,debugtype...] ] [ -o ] [ - -u interface ] + offlineimap [ -1 ] [ -P profiledir ] [ -a accountlist ] [ -c configfile + ] [ -d debugtype[,debugtype...] ] [ -o ] [ -u interface ] offlineimap -h | --help DESCRIPTION - OfflineIMAP is a tool to simplify your e-mail reading. - With OfflineIMAP, you can read the same mailbox from mul- - tiple 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 pro- - vide disconnected operation. + 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 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 FAST; it synchronizes my two accounts with over 50 fold- + ers 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 synchro- + nization 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 fea- - tures are supported to ensure compatibility with the - widest variety of IMAP servers. + OfflineIMAP is FLEXIBLE; you can customize which folders are synced via + regular expressions, lists, or Python expressions; a versatile and com- + prehensive 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 sup- + ported; and esoteric IMAP features are supported to ensure compatibil- + ity with the widest variety of IMAP servers. - OfflineIMAP is SAFE; it uses an algorithm designed to pre- - vent 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. + OfflineIMAP is SAFE; it uses an algorithm designed to prevent mail loss + at all costs. Because of the design of this algorithm, even program- + ming 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. METHOD OF OPERATION - OfflineIMAP 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 com- - puter and bi-directionally synchronize them, copying, - marking, and deleting messages as necessary. + OfflineIMAP 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. INSTALLATION - If you are reading this document via the "man" command, it - is likely that you have no installation tasks to perform; - your system administrator has already installed it. If - you need to install it yourself, you have three options: a - system-wide installation with Debian, system-wide instal- - lation with other systems, and a single-user installation. - You can download the latest version of OfflineIMAP from + If you are reading this document via the "man" command, it is likely + that you have no installation tasks to perform; your system administra- + tor has already installed it. If you need to install it yourself, you + have three options: a system-wide installation with Debian, system-wide + installation with other systems, and a single-user installation. You + can download the latest version of OfflineIMAP from http://quux.org/devel/offlineimap/. PREREQUISITES - In order to use OfflineIMAP, you need to have these condi- - tions satisfied: + In order to use OfflineIMAP, you need to have these conditions satis- + fied: - o Your mail server must support IMAP. Most Internet - Service Providers and corporate networks do, and - most operating systems have an IMAP implementation - readily available. + o Your mail server must support IMAP. Most Internet Service + Providers and corporate networks do, and most operating systems + have an IMAP implementation readily available. - o You must have Python version 2.2.1 or above - installed. If you are running on Debian GNU/Linux, - this requirement will automatically be taken care - of for you. If you do not have Python already, - check with your system administrator or operating - system vendor; or, download it from - http://www.python.org/. If you intend to use the - Tk interface, you must have Tkinter (python-tk) - installed. If you intend to use the SSL interface, - your Python must have been built with SSL support. + o You must have Python version 2.2.1 or above installed. If you + are running on Debian GNU/Linux, this requirement will automati- + cally be taken care of for you. If you do not have Python + already, check with your system administrator or operating sys- + tem vendor; or, download it from http://www.python.org/. If you + intend to use the Tk interface, you must have Tkinter (python- + tk) installed. If you intend to use the SSL interface, your + Python must have been built with SSL support. - o Have a mail reader that supports the Maildir mail- - box format. Most modern mail readers have this - support built-in, so you can choose from a wide - variety of mail servers. This format is also known - as the "qmail" format, so any mail reader compati- - ble with it will work with OfflineIMAP. + o Have a mail reader that supports the Maildir mailbox format. + Most modern mail readers have this support built-in, so you can + choose from a wide variety of mail servers. This format is also + known as the "qmail" format, so any mail reader compatible with + it will work with OfflineIMAP. DEBIAN SYSTEM-WIDE INSTALLATION - If you are tracking Debian unstable, you may install - OfflineIMAP by simply running the following command as - root: + If you are tracking Debian unstable, you may install OfflineIMAP by + simply running the following command as root: apt-get install offlineimap - If you are not tracking Debian unstable, download the - Debian .deb package from the OfflineIMAP website and then - run dpkg -i to install the downloaded package. Then, go - to CONFIGURATION below. You will type offlineimap to - invoke the program. + If you are not tracking Debian unstable, download the Debian .deb pack- + age from the OfflineIMAP website and then run dpkg -i to install the + downloaded package. Then, go to CONFIGURATION below. You will type + offlineimap to invoke the program. OTHER SYSTEM-WIDE INSTALLATION - Download the tar.gz version of the package from the web- - site. Then run these commands: + Download the tar.gz version of the package from the website. Then run + these commands: tar -zxvf offlineimap-x.y.z.tar.gz cd offlineimap-x.y.z python2.2 setup.py - Some systems will need to use python instead of python2.2. - Next, proceed to configuration. You will type offlineimap - to invoke the program. + Some systems will need to use python instead of python2.2. Next, pro- + ceed to configuration. You will type offlineimap to invoke the pro- + gram. SINGLE-ACCOUNT INSTALLATION - Download the tar.gz version of the package from the web- - site. Then run these commands: + Download the tar.gz version of the package from the website. Then run + these commands: tar -zxvf offlineimap-x.y.z.tar.gz cd offlineimap-x.y.z - When you want to run OfflineIMAP, you will issue the cd - command as above and then type ./offlineimap; there is no - installation step necessary. + When you want to run OfflineIMAP, you will issue the cd command as + above and then type ./offlineimap.py; there is no installation step + necessary. CONFIGURATION - OfflineIMAP is regulated by a configuration file that is - normally stored in ~/.offlineimaprc. OfflineIMAP ships - with a file named offlineimap.conf that you should copy to - that location and then edit. This file is vital to proper - operation of the system; it sets everything you need to - run OfflineIMAP. Full documentation for the configuration - file is included within the sample file. + OfflineIMAP is regulated by a configuration file that is normally + stored in ~/.offlineimaprc. OfflineIMAP ships with a file named + offlineimap.conf that you should copy to that location and then edit. + This file is vital to proper operation of the system; it sets every- + thing you need to run OfflineIMAP. Full documentation for the configu- + ration file is included within the sample file. OPTIONS - Most configuration is done via the configuration file. - Nevertheless, there are a few options that you may set for - OfflineIMAP. + Most configuration is done via the configuration file. Nevertheless, + there are a few options that you may set for OfflineIMAP. - -1 Disable all multithreading operations and use - solely a single-thread sync. This effectively sets - the maxsyncaccounts and all maxconnections configu- - ration file variables to 1. + -1 Disable all multithreading operations and use solely a single- + thread sync. This effectively sets the maxsyncaccounts and all + maxconnections configuration file variables to 1. -P profiledir - Sets OfflineIMAP into profile mode. The program - will create profiledir (it must not already exist). - As it runs, Python profiling information about each - thread is logged into profiledir. Please note: - This option is present for debugging and optimiza- - tion only, and should NOT be used unless you have a - specific reason to do so. It will significantly - slow program performance, may reduce reliability, - and can generate huge amounts of data. You must - use the -1 option when you use -P. + Sets OfflineIMAP into profile mode. The program will create + profiledir (it must not already exist). As it runs, Python pro- + filing information about each thread is logged into profiledir. + Please note: This option is present for debugging and optimiza- + tion only, and should NOT be used unless you have a specific + reason to do so. It will significantly slow program perfor- + mance, may reduce reliability, and can generate huge amounts of + data. You must use the -1 option when you use -P. -a accountlist - Overrides the accounts section in the config file. - Lets you specify a particular account or set of - accounts to sync without having to edit the config - file. You might use this to exclude certain - accounts, or to sync some accounts that you nor- - mally prefer not to. + Overrides the accounts section in the config file. Lets you + specify a particular account or set of accounts to sync without + having to edit the config file. You might use this to exclude + certain accounts, or to sync some accounts that you normally + prefer not to. -c configfile - Specifies a configuration file to use in lieu of - the default, ~/.offlineimaprc. + Specifies a configuration file to use in lieu of the default, + ~/.offlineimaprc. -d debugtype[,debugtype...] - Enables debugging for OfflineIMAP. This is useful - if you are trying to track down a malfunction or - figure out what is going on under the hood. I sug- - gest that you use this with -1 in order to make the - results more sensible. + Enables debugging for OfflineIMAP. This is useful if you are + trying to track down a malfunction or figure out what is going + on under the hood. I suggest that you use this with -1 in order + to make the results more sensible. - -d now requires one or more debugtypes, separated - by commas. These define what exactly will be - debugged, and so far include two options: imap and - maildir. The imap option will enable IMAP protocol - stream and parsing debugging. Note that the output - may contain passwords, so take care to remove that - from the debugging output before sending it to any- - one else. The maildir option will enable debugging - for certain Maildir operations. + -d now requires one or more debugtypes, separated by commas. + These define what exactly will be debugged, and so far include + two options: imap and maildir. The imap option will enable IMAP + protocol stream and parsing debugging. Note that the output may + contain passwords, so take care to remove that from the debug- + ging output before sending it to anyone else. The maildir + option will enable debugging for certain Maildir operations. - -o Run only once, ignoring any autorefresh setting in - the config file. + -o Run only once, ignoring any autorefresh setting in the config + file. -h, --help Show summary of options. -u interface - Specifies an alternative user interface module to - use. This overrides the default specified in the - configuration file. The UI specified with -u will - be forced to be used, even if its isuable() method - states that it cannot be. Use this option with - care. The pre-defined options are listed in the - USER INTERFACES section. + Specifies an alternative user interface module to use. This + overrides the default specified in the configuration file. The + UI specified with -u will be forced to be used, even if its + isuable() method states that it cannot be. Use this option with + care. The pre-defined options are listed in the USER INTERFACES + section. USER INTERFACES - OfflineIMAP has a pluggable user interface system that - lets you choose how the program communicates information - to you. There are two graphical interfaces, one terminal - interface, and two noninteractive interfaces suitable for - scripting or logging purposes. The ui option in the con- - figuration file specifies the user interface preferences. - The -u command-line option can override the configuration - file. The available values for the configuration file or - command-line are describef in this section. + OfflineIMAP has a pluggable user interface system that lets you choose + how the program communicates information to you. There are two graphi- + cal interfaces, one terminal interface, and two noninteractive inter- + faces suitable for scripting or logging purposes. The ui option in the + configuration file specifies the user interface preferences. The -u + command-line option can override the configuration file. The available + values for the configuration file or command-line are describef in this + section. Tk.Blinkenlights - This 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. Tk.Blinkenlights contains, by - default, a small window with a row of LEDs and a row of - command buttons. The total size of the window is very - small, so it uses little desktop space, yet it is quite - functional. There is also an optional, toggable, log that - shows more detail about what is happening and is color- - coded to match the color of the lights. + This is an interface designed to be sleek, fun to watch, and informa- + tive of the overall picture of what OfflineIMAP is doing. I consider + it to be the best general-purpose interface in OfflineIMAP. + Tk.Blinkenlights contains, by default, a small window with a row of + LEDs and a row of command buttons. The total size of the window is + very small, so it uses little desktop space, yet it is quite func- + tional. There is also an optional, toggable, log that shows more + detail about what is happening and is color-coded to match the color of + the lights. - Tk.Blinkenlights is the only user interface that has con- - figurable parameters; see the example offlineimap.conf for - more details. + Tk.Blinkenlights is the only user interface that has configurable + parameters; see the example offlineimap.conf for more details. - Each light in the Tk.Blinkenlights interface represents a - thread of execution -- that is, a particular task that - OfflineIMAP is performing right now. The color indicates - what task the particular thread is performing, and are as - follows: + Each light in the Tk.Blinkenlights interface represents a thread of + execution -- that is, a particular task that OfflineIMAP is performing + right now. The color indicates what task the particular thread is per- + forming, and are as follows: - Black indicates that this light's thread has terminated; - it will light up again later when new threads start - up. So, black indicates no activity. + Black indicates that this light's thread has terminated; it will light + up again later when new threads start up. So, black indicates + no activity. Red (Meaning 1) - is the color of the main program's thread, which - basically does nothing but monitor the others. It - might remind you of HAL 9000 in 2001. + is the color of the main program's thread, which basically does + nothing but monitor the others. It might remind you of HAL 9000 + in 2001. - Gray indicates that the thread is establishing a new - connection to the IMAP server. + Gray indicates that the thread is establishing a new connection to + the IMAP server. - Purple is the color of an account synchronization thread - that is monitoring the progress of the folders in - that account (not generating any I/O). + Purple is the color of an account synchronization thread that is moni- + toring the progress of the folders in that account (not generat- + ing any I/O). Cyan indicates that the thread is syncing a folder. Green means that a folder's message list is being loaded. - Blue is the color of a message synchronization con- - troller thread. + Blue is the color of a message synchronization controller thread. Orange indicates that an actual message is being copied. Red (Meaning 2) indicates that a message is being deleted. - Yellow (bright orange) indicates that message flags are - being added. + Yellow (bright orange) indicates that message flags are being added. - Pink (bright red) indicates that message flags are being - removed. + Pink (bright red) indicates that message flags are being removed. Red / Black Flashing - corresponds to the countdown timer that runs - between synchronizations. + corresponds to the countdown timer that runs between synchro- + nizations. - The name of this interface derives from a bit of computer - science history. Eric Raymond's Jargon File defines - blinkenlights, in part, as: + The name of this interface derives from a bit of computer science his- + tory. Eric Raymond's Jargon File defines blinkenlights, in part, as: - Front-panel diagnostic lights on a computer, esp. a - dinosaur. Now that dinosaurs are rare, this term - usually refers to status lights on a modem, network - hub, or the like. + Front-panel diagnostic lights on a computer, esp. a dinosaur. + Now that dinosaurs are rare, this term usually refers to status + lights on a modem, network hub, or the like. - This term derives from the last word of the famous - blackletter-Gothic sign in mangled pseudo-German - that once graced about half the computer rooms in - the English-speaking world. One version ran in its - entirety as follows: + This term derives from the last word of the famous blackletter- + Gothic sign in mangled pseudo-German that once graced about half + the computer rooms in the English-speaking world. One version + ran in its entirety as follows: ACHTUNG! ALLES LOOKENSPEEPERS! - Das computermachine ist nicht fuer gefingerpoken - und mittengrabben. Ist easy schnappen der sprin- - genwerk, blowenfusen und poppencorken mit - spitzensparken. Ist nicht fuer gewerken bei das - dumpkopfen. Das rubbernecken sichtseeren keepen - das cotten-pickenen hans in das pockets muss; - relaxen und watchen das blinkenlichten. + Das computermachine ist nicht fuer gefingerpoken und mitten- + grabben. Ist easy schnappen der springenwerk, blowenfusen und + poppencorken mit spitzensparken. Ist nicht fuer gewerken bei + das dumpkopfen. Das rubbernecken sichtseeren keepen das cotten- + pickenen hans in das pockets muss; relaxen und watchen das + blinkenlichten. Tk.VerboseUI - This interface (formerly known as Tk.TkUI) is a graphical - interface that presents a variable-sized window. In the - window, each currently-executing thread has a section - where its name and current status are displayed. This - interface is best suited to people running on slower con- - nections, as you get a lot of detail, but for fast connec- - tions, the detail may go by too quickly to be useful. - People with fast connections may wish to use Tk.Blinken- - lights instead. + This interface (formerly known as Tk.TkUI) is a graphical interface + that presents a variable-sized window. In the window, each currently- + executing thread has a section where its name and current status are + displayed. This interface is best suited to people running on slower + connections, as you get a lot of detail, but for fast connections, the + detail may go by too quickly to be useful. People with fast connec- + tions may wish to use Tk.Blinkenlights instead. TTY.TTYUI - This interface is the default for people running in termi- - nals. It prints out basic status messages, has an inter- - ruptible timer like the graphical interfaces do, and is - generally friendly to use on a console or xterm. + This interface is the default for people running in terminals. It + prints out basic status messages, has an interruptible timer like the + graphical interfaces do, and is generally friendly to use on a console + or xterm. Noninteractive.Basic - This interface is designed for situations where - 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 con- - figuration file options. + This interface is designed for situations where 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. Noninteractive.Quiet - This interface 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 Noninteractive.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. + This interface 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 Noninteractive.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. EXAMPLES - Here is an example configuration for a particularly com- - plex situation; more examples will be added later. + Here is an example configuration for a particularly complex situation; + more examples will be added later. MULTIPLE ACCOUNTS WITH MUTT - This example shows you how to set up OfflineIMAP to syn- - chronize multiple accounts with the mutt mail reader. + This example shows you how to set up OfflineIMAP to synchronize multi- + ple accounts with the mutt mail reader. Start by creating a directory to hold your folders: mkdir ~/Mail @@ -357,9 +314,8 @@ EXAMPLES In your ~/.offlineimaprc, specify this: accounts = Personal, Work - Make sure that you have both a [Personal] and a [Work] - section, with different localfolder pathnames and enable - [mbnames]. + Make sure that you have both a [Personal] and a [Work] section, with + different localfolder pathnames and enable [mbnames]. In each account section, do something like this: localfolders = ~/Mail/Personal @@ -375,14 +331,12 @@ EXAMPLES 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 mail- - boxes, specifying a reference of "~/Mail" or "#mh/" - depending on the configuration. The below configuration - 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. + 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 + 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. [Gerf] localfolders = ~/Mail @@ -404,10 +358,9 @@ EXAMPLES 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. + 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 ~/.offlineimap.rc, he adds these options: @@ -430,164 +383,142 @@ EXAMPLES def test_mycmp(): import os, os.path - folders=os.list- + folders=os.list- dir(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 python- - file to always synchronize certain folders first. + This code snippet illustrates how the foldersort option can be cus- + tomized with a Python function from the pythonfile to always synchro- + nize certain folders first. ERRORS - If you get one of some frequently-encountered or confusing - errors, please check this section. + If you get one of some frequently-encountered or confusing errors, + please check this section. UID validity problem for folder - IMAP servers use a unique ID (UID) to refer to a specific - message. This number is guaranteed to be unique to a par- - ticular message FOREVER. No other message in the same - folder will ever get the same UID. UIDs are an integral - part of OfflineIMAP's synchronization scheme; they are - used to match up messages on your computer to messages on - the server. + IMAP servers use a unique ID (UID) to refer to a specific message. + This number is guaranteed to be unique to a particular message FOREVER. + No other message in the same folder will ever get the same UID. UIDs + are an integral part of OfflineIMAP's synchronization scheme; they are + used to match up messages on your computer to messages on the server. - Sometimes, the UIDs on the server might get reset. Usu- - ally this will happen if you delete and then recreate a - folder. When you create a folder, the server will often - start the UID back from 1. But OfflineIMAP might still - have the UIDs from the previous folder by the same name - stored. OfflineIMAP will detect this condition and skip - the folder. This is GOOD, because it prevents data loss. + Sometimes, the UIDs on the server might get reset. Usually this will + happen if you delete and then recreate a folder. When you create a + folder, the server will often start the UID back from 1. But + OfflineIMAP might still have the UIDs from the previous folder by the + same name stored. OfflineIMAP will detect this condition and skip the + folder. This is GOOD, because it prevents data loss. - You can fix it by removing your local folder and cache - data. For instance, if your folders are under ~/Folders - and the folder with the problem is INBOX, you'd type this: + You can fix it by removing your local folder and cache data. For + instance, if your folders are under ~/Folders and the folder with the + problem is INBOX, you'd type this: rm -r ~/Folders/INBOX rm ~/.offlineimap/AccountName/INBOX - (replacing AccountName with the account name as specified - in ~/.offlineimaprc) + (replacing AccountName with the account name as specified in + ~/.offlineimaprc) - Next time you run OfflineIMAP, it will re-download the - folder with the new UIDs. Note that the procedure speci- - fied above will lose any local changes made to the folder. + Next time you run OfflineIMAP, it will re-download the folder with the + new UIDs. Note that the procedure specified above will lose any local + changes made to the folder. - Some IMAP servers are broken and do not support UIDs prop- - erly. If you continue to get this error for all your - folders even after performing the above procedure, it is - likely that your IMAP server falls into this category. - OfflineIMAP is incompatible with such servers. Using - OfflineIMAP with them will not destroy any mail, but at - the same time, it will not actually synchronize it either. - (OfflineIMAP will detect this condition and abort prior to - synchronization) + Some IMAP servers are broken and do not support UIDs properly. If you + continue to get this error for all your folders even after performing + the above procedure, it is likely that your IMAP server falls into this + category. OfflineIMAP is incompatible with such servers. Using + OfflineIMAP with them will not destroy any mail, but at the same time, + it will not actually synchronize it either. (OfflineIMAP will detect + this condition and abort prior to synchronization) OTHER FREQUENTLY ASKED QUESTIONS - There are some other FAQs that might not fit into another - section of this document, and they are enumerated here. + There are some other FAQs that might not fit into another section of + this document, and they are enumerated here. What platforms does OfflineIMAP run on? - It should run on most platforms supported by - Python, which are quite a few. + It should run on most platforms supported by Python, which are + quite a few. - I'm using Mutt. Other IMAP sync programs require me to use - set maildir_trash=yes . Do I need to do that with - OfflineIMAP? - No. OfflineIMAP is smart enough to figure out mes- - sage deletion without this extra crutch. You'll - get the best results if you don't use this setting, - in fact. + I'm using Mutt. Other IMAP sync programs require me to use set + maildir_trash=yes . Do I need to do that with OfflineIMAP? + No. OfflineIMAP is smart enough to figure out message deletion + without this extra crutch. You'll get the best results if you + don't use this setting, in fact. How do I specify the names of my folders? - You do not need to. OfflineIMAP is smart enough to - automatically figure out what folders are present - on the IMAP server and synchronize them. You can - use the folderfilter and foldertrans configuration - file options to request certain folders and rename + You do not need to. OfflineIMAP is smart enough to automati- + cally figure out what folders are present on the IMAP server and + synchronize them. You can use the folderfilter and foldertrans + configuration file options to request certain folders and rename them as they come in if you like. How can I prevent certain folders from being synced? - Use the folderfilter option in the configuration - file. + Use the folderfilter option in the configuration file. How can I add or delete a folder? - OfflineIMAP does not currently provide this fea- - ture, but if you create a new folder on the IMAP - server, it will be created locally automatically. + OfflineIMAP does not currently provide this feature, but if you + create a new folder on the IMAP server, it will be created + locally automatically. Are there any other warnings that I should be aware of? Yes; see the NOTES section below. What is the mailbox name recorder (mbnames) for? - The Mutt mail reader is not capable of automati- - cally determining the names of your mailboxes. - OfflineIMAP can help it (or many other) programs - out be writing these names out in a format you - specify. See the example offlineimap.conf file for - details. + The Mutt mail reader is not capable of automatically determining + the names of your mailboxes. OfflineIMAP can help it (or many + other) programs out be writing these names out in a format you + specify. See the example offlineimap.conf file for details. Can I synchronize multiple accounts with OfflineIMAP? - Sure. Just name them all in the accounts line in - the general section of the config file, and add a - per-account section for each one. + Sure. Just name them all in the accounts line in the general + section of the config file, and add a per-account section for + each one. Does OfflineIMAP support POP? - No. POP is not robust enough to do a completely - reliable multi-machine synchronization like - OfflineIMAP can do. OfflineIMAP will not support - it. + No. POP is not robust enough to do a completely reliable multi- + machine synchronization like OfflineIMAP can do. OfflineIMAP + will not support it. Do you support mailbox formats other than Maildir? - Not at present. There is no technical reason not - to; just no demand yet. Maildir is a superior for- - mat anyway. + Not at present. There is no technical reason not to; just no + demand yet. Maildir is a superior format anyway. - [technical] Why are your Maildir message filenames so - huge? - OfflineIMAP has two relevant principles: 1) never - modifying your messages in any way and 2) ensuring - 100% reliable synchronizations. In order to do a - reliable sync, OfflineIMAP must have a way to - uniquely identify each e-mail. Three pieces of - information are required to do this: your account - name, the folder name, and the message UID. The - account name can be calculated from the path in - which your messages are. The folder name can usu- - ally be as well, BUT some mail clients move mes- - sages between folders by simply moving the file, - leaving the name intact. + [technical] Why are your Maildir message filenames so huge? + OfflineIMAP has two relevant principles: 1) never modifying your + messages in any way and 2) ensuring 100% reliable synchroniza- + tions. In order to do a reliable sync, OfflineIMAP must have a + way to uniquely identify each e-mail. Three pieces of informa- + tion are required to do this: your account name, the folder + name, and the message UID. The account name can be calculated + from the path in which your messages are. The folder name can + usually be as well, BUT some mail clients move messages between + folders by simply moving the file, leaving the name intact. - So, OfflineIMAP must store both a UID folder ID. - The folder ID is necessary so OfflineIMAP can - detect a message moved to a different folder. - OfflineIMAP stores the UID (U= number) and an - md5sum of the foldername (FMD5= number) to facili- - tate this. + So, OfflineIMAP must store both a UID folder ID. The folder ID + is necessary so OfflineIMAP can detect a message moved to a dif- + ferent folder. OfflineIMAP stores the UID (U= number) and an + md5sum of the foldername (FMD5= number) to facilitate this. What is the speed of OfflineIMAP's sync? - OfflineIMAP versions 2.0 and above contain a multi- - threaded system. A good way to experiment is by - setting maxsyncaccounts to 3 and maxconnections to - 3 in each account clause. + OfflineIMAP versions 2.0 and above contain a multithreaded sys- + tem. A good way to experiment is by setting maxsyncaccounts to + 3 and maxconnections to 3 in each account clause. - This lets OfflineIMAP open up multiple connections - simultaneously. That will let it process multiple - folders and messages at once. In most cases, this - will increase performance of the sync. + This lets OfflineIMAP open up multiple connections simultane- + ously. That will let it process multiple folders and messages + at once. In most cases, this will increase performance of the + sync. - Don't set the number too high. If you do that, - things might actually slow down as your link gets - saturated. Also, too many connections can cause - mail servers to have excessive load. Administra- - tors might take unkindly to this, and the server - might bog down. There are many variables in the - optimal setting; experimentation may help. + Don't set the number too high. If you do that, things might + actually slow down as your link gets saturated. Also, too many + connections can cause mail servers to have excessive load. + Administrators might take unkindly to this, and the server might + bog down. There are many variables in the optimal setting; + experimentation may help. - An informal benchmark yields these results for my - setup: + An informal benchmark yields these results for my setup: 10 minutes with MacOS X Mail.app "manual cache" 5 minutes with GNUS agent sync @@ -597,77 +528,70 @@ OTHER FREQUENTLY ASKED QUESTIONS 2 seconds with OfflineIMAP 3.x "held connection" CONFORMING TO - o Internet Message Access Protocol version 4rev1 - (IMAP 4rev1) as specified in RFC2060 + o Internet Message Access Protocol version 4rev1 (IMAP 4rev1) as + specified in RFC2060 - o Maildir as specified in http://www.qmail.org/qmail- - manual-html/man5/maildir.html and - http://cr.yp.to/proto/maildir.html. + o CRAM-MD5 as specified in RFC2195 - o Standard Python 2.2.1 as implemented on POSIX-com- - pliant systems. + o Maildir as specified in http://www.qmail.org/qmail-manual- + html/man5/maildir.html and http://cr.yp.to/proto/maildir.html. + + o Standard Python 2.2.1 as implemented on POSIX-compliant systems. NOTES DELETING LOCAL FOLDERS - OfflineIMAP does a two-way synchronization. That is, if - you make a change to the mail on the server, it will be - propogated to your local copy, and vise-versa. Some peo- - ple might think that it would be wise to just delete all - their local mail folders periodically. If you do this - with OfflineIMAP, remember to also remove your local sta- - tus cache (~/.offlineimap by default). Otherwise, - OfflineIMAP will take this as an intentional deletion of - many messages and will interpret your action as requesting - them to be deleted from the server as well. (If you don't - understand this, don't worry; you probably won't encounter - this situation) + OfflineIMAP does a two-way synchronization. That is, if you make a + change to the mail on the server, it will be propogated to your local + copy, and vise-versa. Some people might think that it would be wise to + just delete all their local mail folders periodically. If you do this + with OfflineIMAP, remember to also remove your local status cache + (~/.offlineimap by default). Otherwise, OfflineIMAP will take this as + an intentional deletion of many messages and will interpret your action + as requesting them to be deleted from the server as well. (If you + don't understand this, don't worry; you probably won't encounter this + situation) COPYING MESSAGES BETWEEN FOLDERS - Normally, when you copy a message between folders or add a - new message to a folder locally, OfflineIMAP will just do - the right thing. However, sometimes this can be tricky -- - if your IMAP server does not provide the SEARCH command, - or does not return something useful, OfflineIMAP cannot - determine the new UID of the message. So, in these rare - instances, OfflineIMAP will upload the message to the IMAP - server and delete it from your local folder. Then, on - your next sync, the message will be re-downloaded with the - proper UID. OfflineIMAP makes sure that the message was - properly uploaded before deleting it, so there should be - no risk of data loss. + Normally, when you copy a message between folders or add a new message + to a folder locally, OfflineIMAP will just do the right thing. How- + ever, sometimes this can be tricky -- if your IMAP server does not pro- + vide the SEARCH command, or does not return something useful, + OfflineIMAP cannot determine the new UID of the message. So, in these + rare instances, OfflineIMAP will upload the message to the IMAP server + and delete it from your local folder. Then, on your next sync, the + message will be re-downloaded with the proper UID. OfflineIMAP makes + sure that the message was properly uploaded before deleting it, so + there should be no risk of data loss. MAILING LIST There is an OfflineIMAP mailing list available. - To subscribe, send the text "Subscribe" in the subject of - a mail to offlineimap-request@complete.org. To post, send - the message to offlineimap@complete.org. + To subscribe, send the text "Subscribe" in the subject of a mail to + offlineimap-request@complete.org. To post, send the message to + offlineimap@complete.org. BUGS - Reports of bugs should be sent via e-mail to the - OfflineIMAP bug-tracking system (BTS) at - offlineimap@bugs.complete.org or submitted on-line using - the Web interface at http://bugs.complete.org/. The Web - site also lists all current bugs, where you can check - their status or contribute to fixing them. + Reports of bugs should be sent via e-mail to the OfflineIMAP bug-track- + ing system (BTS) at offlineimap@bugs.complete.org or submitted on-line + using the Web interface at http://bugs.complete.org/. The Web site + also lists all current bugs, where you can check their status or con- + tribute to fixing them. COPYRIGHT OfflineIMAP is Copyright (C) 2002 John Goerzen. - This program is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; - either version 2 of the License, or (at your option) any - later version. + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. - This program is distributed in the hope that it will be - useful, but WITHOUT ANY WARRANTY; without even the implied - warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the GNU General Public License for more - details. + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MER- + CHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + Public License for more details. - You should have received a copy of the GNU General Public - License along with this program; if not, write to: + You should have received a copy of the GNU General Public License along + with this program; if not, write to: Free Software Foundation, Inc. 59 Temple Place @@ -676,22 +600,20 @@ COPYRIGHT USA AUTHOR - OfflineIMAP, its libraries, documentation, and all - included files, except where noted, was written by John - Goerzen and copyright is held as - stated in the COPYRIGHT section. + OfflineIMAP, its libraries, documentation, and all included files, + except where noted, was written by John Goerzen + and copyright is held as stated in the COPYRIGHT section. - OfflineIMAP may be downloaded, and information found, from - its homepage via either Gopher or HTTP: + OfflineIMAP may be downloaded, and information found, from its homepage + via either Gopher or HTTP: gopher://quux.org/1/devel/offlineimap http://quux.org/devel/offlineimap - OfflineIMAP may also be downloaded using Subversion. - Additionally, the distributed tar.gz may be updated with a - simple "svn update" command; it is ready to go. For - information on getting OfflineIMAP with Subversion, please - visit: + OfflineIMAP may also be downloaded using Subversion. Additionally, the + distributed tar.gz may be updated with a simple "svn update" command; + it is ready to go. For information on getting OfflineIMAP with + Subversion, please visit: http://svn.complete.org/ @@ -700,4 +622,4 @@ SEE ALSO -John Goerzen July 12, 2002 OFFLINEIMAP(1) +John Goerzen July 12, 2002 OFFLINEIMAP(1) diff --git a/offlineimap/head/offlineimap.1 b/offlineimap/head/offlineimap.1 index ab58832..df54cd1 100644 --- a/offlineimap/head/offlineimap.1 +++ b/offlineimap/head/offlineimap.1 @@ -728,6 +728,8 @@ An informal benchmark yields these results for my setup: Internet Message Access Protocol version 4rev1 (IMAP 4rev1) as specified in RFC2060 .IP \(bu +CRAM-MD5 as specified in RFC2195 +.IP \(bu Maildir as specified in .UR http://www.qmail.org/qmail-manual-html/man5/maildir.html http://www.qmail.org/qmail-manual-html/man5/maildir.html diff --git a/offlineimap/head/offlineimap.py b/offlineimap/head/offlineimap.py index 1dad327..e075f9e 100644 --- a/offlineimap/head/offlineimap.py +++ b/offlineimap/head/offlineimap.py @@ -18,4 +18,4 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA from offlineimap import init -init.startup('3.99.1') +init.startup('3.99.2') diff --git a/offlineimap/head/offlineimap/imapserver.py b/offlineimap/head/offlineimap/imapserver.py index 3011bad..7843057 100644 --- a/offlineimap/head/offlineimap/imapserver.py +++ b/offlineimap/head/offlineimap/imapserver.py @@ -19,7 +19,7 @@ from offlineimap import imaplib, imaputil, threadutil from offlineimap.ui import UIBase from threading import * -import thread, hmac, base64 +import thread, hmac class UsefulIMAPMixIn: @@ -91,17 +91,14 @@ class IMAPServer: self.semaphore.release() def md5handler(self, response): - print "md5handler: got", response - response = response.strip() - challenge = base64.decodestring(response).strip() + challenge = response.strip() msg = self.password while len(msg) < 64: msg += "\0" reply = hmac.new(challenge, msg) - retval = base64.encodestring(self.username + ' ' + \ - reply.hexdigest()) - print "md5handler: returning", retval + retval = self.username + ' ' + \ + reply.hexdigest() return retval def acquireconnection(self): @@ -147,9 +144,13 @@ class IMAPServer: imapobj = UsefulIMAP4(self.hostname, self.port) if not self.tunnel: - try: + if 'AUTH=CRAM-MD5' in imapobj.capabilities: + UIBase.getglobalui().debug('imap', + 'Attempting CRAM-MD5 authentication') imapobj.authenticate('CRAM-MD5', self.md5handler) - except: + else: + UIBase.getglobalui().debug('imap', + 'Attempting plain authentication') imapobj.login(self.username, self.password) if self.delim == None: diff --git a/offlineimap/head/offlineimap/version.py b/offlineimap/head/offlineimap/version.py index 8799b01..0e412a0 100644 --- a/offlineimap/head/offlineimap/version.py +++ b/offlineimap/head/offlineimap/version.py @@ -1,8 +1,8 @@ productname = 'OfflineIMAP' -versionstr = "3.99.1" -revno = long('$Rev: 269 $'[6:-2]) +versionstr = "3.99.2" +revno = long('$Rev: 276 $'[6:-2]) revstr = "Rev %d" % revno -datestr = '$Date: 2002-10-09 19:38:55 -0500 (Wed, 09 Oct 2002) $' +datestr = '$Date: 2002-11-02 10:30:41 -0600 (Sat, 02 Nov 2002) $' versionlist = versionstr.split(".") major = versionlist[0]