Merge commit 'v6.3.4-rc4'
This commit is contained in:
		| @@ -25,4 +25,3 @@ Pending for the next major release | ||||
| ================================== | ||||
|  | ||||
| * UIs get shorter and nicer names. (API changing) | ||||
| * Implement IDLE feature. (delayed until next major release) | ||||
|   | ||||
| @@ -12,6 +12,26 @@ ChangeLog | ||||
|   releases announces. | ||||
|  | ||||
|  | ||||
| OfflineIMAP v6.3.4-rc4 (2011-07-27) | ||||
| =================================== | ||||
|  | ||||
| Notes | ||||
| ----- | ||||
|  | ||||
| There is nothing exciting in this release. This is somewhat expected due to the | ||||
| late merge on -rc3. | ||||
|  | ||||
| New Features | ||||
| ------------ | ||||
|  | ||||
| * Support maildir for Windows. | ||||
|  | ||||
| Changes | ||||
| ------- | ||||
|  | ||||
| * Manual improved. | ||||
|  | ||||
|  | ||||
| OfflineIMAP v6.3.4-rc3 (2011-07-07) | ||||
| =================================== | ||||
|  | ||||
| @@ -58,6 +78,12 @@ information about his bug here: | ||||
|  | ||||
|   http://permalink.gmane.org/gmane.mail.imap.offlineimap.general/3803 | ||||
|  | ||||
| The IDLE support is merged as experimental feature. | ||||
|  | ||||
| New Features | ||||
| ------------ | ||||
|  | ||||
| * Implement experimental IDLE feature. | ||||
|  | ||||
| Changes | ||||
| ------- | ||||
|   | ||||
							
								
								
									
										119
									
								
								docs/MANUAL.rst
									
									
									
									
									
								
							
							
						
						
									
										119
									
								
								docs/MANUAL.rst
									
									
									
									
									
								
							| @@ -251,9 +251,9 @@ Quiet | ||||
|  | ||||
| Quiet is designed for non-attended running in situations where normal | ||||
| status messages are not desired.  It will output nothing except errors | ||||
| and serious warnings.  Like 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. | ||||
| and serious warnings.  Like Basic, this user interface is not capable | ||||
| of reading a password from the keyboard; account passwords must be | ||||
| specified using one of the configuration file options. | ||||
|  | ||||
| MachineUI | ||||
| --------- | ||||
| @@ -300,5 +300,114 @@ KNOWN BUGS | ||||
|   * IDLE may only work "once" per refresh.  If you encounter this bug, | ||||
|     please send a report to the list! | ||||
|  | ||||
| SEE ALSO | ||||
| ======== | ||||
| * Maildir support in Windows drive | ||||
|     Maildir uses colon caracter (:) in message file names. Colon is however | ||||
|     forbidden character in windows drives. There are several workarounds for | ||||
|     that situation: | ||||
|  | ||||
|    * Use "maildir-windows-compatible = yes" account OfflineIMAP configuration. | ||||
|       - That makes OfflineIMAP to use exclamation mark (!) instead of colon for | ||||
|         storing messages. Such files can be written to windows partitions. But | ||||
|         you will probably loose compatibility with other programs trying to | ||||
|         read the same Maildir. | ||||
|       - Exclamation mark was choosed because of the note in | ||||
|         http://docs.python.org/library/mailbox.html | ||||
|       - If you have some messages already stored without this option, you will | ||||
|         have to re-sync them again | ||||
|  | ||||
|    * Enable file name character translation in windows registry (not tested) | ||||
|       - http://support.microsoft.com/kb/289627 | ||||
|  | ||||
|    * Use cygwin managed mount (not tested) | ||||
|       - not available anymore since cygwin 1.7 | ||||
|  | ||||
|  | ||||
| Synchronization Performance | ||||
| =========================== | ||||
|  | ||||
| By default, we use fairly conservative settings that are good for | ||||
| syncing but that might not be the best performing one. Once you got | ||||
| everything set up and running, you might want to look into speeding up | ||||
| your synchronization. Here are a couple of hints and tips on how to | ||||
| achieve this. | ||||
|  | ||||
|  1) Use maxconnections > 1. By default we only use one connection to an | ||||
|     IMAP server. Using 2 or even 3 speeds things up considerably in most | ||||
|     cases. This setting goes into the [Repository XXX] section. | ||||
|  | ||||
|  2) Use folderfilters. The quickest sync is a sync that can ignore some | ||||
|     folders. I sort my inbox into monthly folders, and ignore every | ||||
|     folder that is more than 2-3 months old, this lets me only inspect a | ||||
|     fraction of my Mails on every sync. If you haven't done this yet, do | ||||
|     it :). See the folderfilter section the example offlineimap.conf. | ||||
|  | ||||
|  3) The default status cache is a plain text file that will write out | ||||
|     the complete file for each single new message (or even changed flag) | ||||
|     to a temporary file. If you have plenty of files in a folder, this | ||||
|     is a few hundred kilo to megabytes for each mail and is bound to | ||||
|     make things slower. I recommend to use the sqlite backend for | ||||
|     that. See the status_backend = sqlite setting in the example | ||||
|     offlineimap.conf. You will need to have python-sqlite installed in | ||||
|     order to use this. This will save you plenty of disk activity. Do | ||||
|     note that the sqlite backend is still considered experimental as it | ||||
|     has only been included recently (although a loss of your status | ||||
|     cache should not be a tragedy as that file can be rebuild | ||||
|     automatically) | ||||
|  | ||||
|  4) Use quick sync. A regular sync will request all flags and all UIDs | ||||
|     of all mails in each folder which takes quite some time. A 'quick' | ||||
|     sync only compares the number of messages in a folder on the IMAP | ||||
|     side (it will detect flag changes on the Maildir side of things | ||||
|     though). A quick sync on my smallish account will take 7 seconds | ||||
|     rather than 40 seconds. Eg, I run a cron script that does a regular | ||||
|     sync once a day, and does quick syncs inbetween. | ||||
|  | ||||
|  5) Turn off fsync. In the [general] section you can set fsync to True | ||||
|     or False. If you want to play 110% safe and wait for all operations | ||||
|     to hit the disk before continueing, you can set this to True. If you | ||||
|     set it to False, you lose some of that safety trading it for speed. | ||||
|  | ||||
| Security and SSL | ||||
| ================ | ||||
|  | ||||
| Some words on OfflineImap and its use of SSL/TLS. By default, we will | ||||
| connect using any method that openssl supports, that is SSLv2, SSLv3, or | ||||
| TLSv1. Do note that SSLv2 is notoriously insecure and deprecated. | ||||
| Unfortunately, python2 does not offer easy ways to disable SSLv2. It is | ||||
| recommended you test your setup and make sure that the mail server does | ||||
| not use an SSLv2 connection. Use e.g. "openssl s_client -host | ||||
| mail.server -port 443" to find out the connection that is used by | ||||
| default. | ||||
|  | ||||
| Certificate checking | ||||
| ^^^^^^^^^^^^^^^^^^^^ | ||||
|  | ||||
| Unfortunately, by default we will not verify the certificate of an IMAP | ||||
| TLS/SSL server we connect to, so connecting by SSL is no guarantee | ||||
| against man-in-the-middle attacks. While verifying a server certificate | ||||
| fingerprint is being planned, it is not implemented yet. There is | ||||
| currently only one safe way to ensure that you connect to the correct | ||||
| server in an encrypted manner: You can specify a 'sslcacertfile' setting | ||||
| in your repository section of offlineimap.conf pointing to a file that | ||||
| contains (among others) a CA Certificate in PEM format which validating | ||||
| your server certificate. In this case, we will check that: 1) The server | ||||
| SSL certificate is validated by the CA Certificate 2) The server host | ||||
| name matches the SSL certificate 3) The server certificate is not past | ||||
| its expiration date. The FAQ contains an entry on how to create your own | ||||
| certificate and CA certificate. | ||||
|  | ||||
| StartTLS | ||||
| ^^^^^^^^ | ||||
|  | ||||
| If you have not configured your account to connect via SSL anyway, | ||||
| OfflineImap will still attempt to set up an SSL connection via the | ||||
| STARTTLS function, in case the imap server supports it. Do note, that | ||||
| there is no certificate or fingerprint checking involved at all, when | ||||
| using STARTTLS (the underlying imaplib library does not support this | ||||
| yet). This means that you will be protected against passively listening | ||||
| eavesdroppers and they will not be able to see your password or email | ||||
| contents. However, this will not protect you from active attacks, such | ||||
| as Man-In-The-Middle attacks which cause you to connect to the wrong | ||||
| server and pretend to be your mail server. DO NOT RELY ON STARTTLS AS A | ||||
| SAFE CONNECTION GUARANTEEING THE AUTHENTICITY OF YOUR IMAP SERVER! | ||||
| ======= | ||||
|   | ||||
| @@ -239,6 +239,16 @@ remoterepository = RemoteExample | ||||
|  | ||||
| # maxage = 3 | ||||
|  | ||||
|  | ||||
| # Maildir format uses colon (:) separator between uniq name and info. | ||||
| # Unfortunatelly colon is not allowed character in windows file name. If you | ||||
| # enable maildir-windows-compatible option, offlineimap will be able to store | ||||
| # messages on windows drive, but you will probably loose compatibility with | ||||
| # other programs working with the maildir | ||||
|  | ||||
| # maildir-windows-compatible = no | ||||
|  | ||||
|  | ||||
| [Repository LocalExample] | ||||
|  | ||||
| # This is one of the two repositories that you'll work with given the | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| __all__ = ['OfflineImap'] | ||||
|  | ||||
| __productname__ = 'OfflineIMAP' | ||||
| __version__     = "6.3.4-rc3" | ||||
| __version__     = "6.3.4-rc4" | ||||
| __copyright__   = "Copyright 2002-2011 John Goerzen & contributors" | ||||
| __author__      = "John Goerzen" | ||||
| __author_email__= "john@complete.org" | ||||
|   | ||||
| @@ -31,7 +31,6 @@ except ImportError: | ||||
| from offlineimap import OfflineImapError | ||||
|  | ||||
| uidmatchre = re.compile(',U=(\d+)') | ||||
| flagmatchre = re.compile(':.*2,([A-Z]+)') | ||||
| timestampmatchre = re.compile('(\d+)'); | ||||
|  | ||||
| timeseq = 0 | ||||
| @@ -63,6 +62,17 @@ class MaildirFolder(BaseFolder): | ||||
|         self.messagelist = None | ||||
|         self.repository = repository | ||||
|         self.accountname = accountname | ||||
|  | ||||
|         self.wincompatible = self.config.getdefaultboolean( | ||||
|             "Account "+self.accountname, "maildir-windows-compatible", False) | ||||
|  | ||||
|         if self.wincompatible == False: | ||||
|             self.infosep = ':' | ||||
|         else: | ||||
|             self.infosep = '!' | ||||
|  | ||||
|         self.flagmatchre = re.compile(self.infosep + '.*2,([A-Z]+)') | ||||
|  | ||||
|         BaseFolder.__init__(self) | ||||
|         #self.ui is set in BaseFolder.init() | ||||
|         # Cache the full folder path, as we use getfullname() very often | ||||
| @@ -156,7 +166,7 @@ class MaildirFolder(BaseFolder): | ||||
|                     nouidcounter -= 1 | ||||
|                 else: | ||||
|                     uid = long(uidmatch.group(1)) | ||||
|             flagmatch = flagmatchre.search(messagename) | ||||
|             flagmatch = self.flagmatchre.search(messagename) | ||||
|             flags = [] | ||||
|             if flagmatch: | ||||
|                 flags = [x for x in flagmatch.group(1)] | ||||
| @@ -271,11 +281,12 @@ class MaildirFolder(BaseFolder): | ||||
|             dir_prefix = 'cur' | ||||
|         else: | ||||
|             dir_prefix = 'new' | ||||
|         infostr = ':' | ||||
|         infomatch = re.search('(:.*)$', newname) | ||||
|  | ||||
|         infostr = self.infosep | ||||
|         infomatch = re.search('(' + self.infosep + '.*)$', newname) | ||||
|         if infomatch:                   # If the info string is present.. | ||||
|             infostr = infomatch.group(1) | ||||
|             newname = newname.split(':')[0] # Strip off the info string. | ||||
|             newname = newname.split(self.infosep)[0] # Strip off the info string. | ||||
|         infostr = re.sub('2,[A-Z]*', '', infostr) | ||||
|         flags.sort() | ||||
|         infostr += '2,' + ''.join(flags) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Nicolas Sebrecht
					Nicolas Sebrecht