# There are four ways to specify the password for the remote IMAP
# server:
#
-# 1. No password at all specified in the config file. You will
-# be prompted for the password when OfflineIMAP starts.
+# 1. No password at all specified in the config file. If a matching
+# entry is found in ~/.netrc (see netrc (5) for information) the
+# password from the matching entry will be used. Otherwise you
+# will be prompted for the password when OfflineIMAP starts.
#
# 2. The remote password stored in this file with the remotepass
# option. Example:
from offlineimap import folder, imaputil, imapserver
from offlineimap.folder.UIDMaps import MappedIMAPFolder
from offlineimap.threadutil import ExitNotifyThread
-import re, types, os
+import re, types, os, netrc, errno
from threading import *
class IMAPRepository(BaseRepository):
user = self.getconf('remoteuser')
if user != None:
return user
+ try:
+ netrcentry = netrc.netrc().authentificator(self.gethost())
+ except IOError, inst:
+ if inst.errno != errno.ENOENT:
+ raise
+ else:
+ if netrcentry:
+ return netrcentry[0]
def getport(self):
return self.getconfint('remoteport', None)
password = fd.readline().strip()
fd.close()
return password
+ try:
+ netrcentry = netrc.netrc().authenticators(self.gethost())
+ except IOError, inst:
+ if inst.errno != errno.ENOENT:
+ raise
+ else:
+ if netrcentry:
+ user = self.getconf('remoteuser')
+ if user == None or user == netrcentry[0]:
+ return netrcentry[2]
return None
def getfolder(self, foldername):