X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=fetchmailconf.py;h=b4b0a1ae7facd4431a39b776e39cefb071b9ab5e;hb=98cfcef26048bba06975e68a1aad05a8bac0d65d;hp=73e06700fd855bcf3a4c91913c31d57e8c253643;hpb=0509664fabff71e61c295ba212bccd00ee41e467;p=~andy%2Ffetchmail diff --git a/fetchmailconf.py b/fetchmailconf.py index 73e06700..b4b0a1ae 100755 --- a/fetchmailconf.py +++ b/fetchmailconf.py @@ -5,7 +5,7 @@ # Matthias Andree # Requires Python with Tkinter, and the following OS-dependent services: # posix, posixpath, socket -version = "1.57" +version = "1.58" from Tkinter import * from Dialog import * @@ -88,7 +88,6 @@ class Server: self.interval = 0 # Skip interval self.protocol = 'auto' # Default to auto protocol self.service = None # Service name to use - self.uidl = FALSE # Don't use RFC1725 UIDLs by default self.auth = 'any' # Default to password authentication self.timeout = 300 # 5-minute timeout self.envelope = 'Received' # Envelope-address header @@ -106,6 +105,7 @@ class Server: self.esmtppassword = None # ESMTP 2554 password self.tracepolls = FALSE # Add trace-poll info to headers self.badheader = FALSE # Pass messages with bad headers on? + self.retrieveerror = 'abort' # Policy when message retrieval errors encountered self.users = [] # List of user entries for site Server.typemap = ( ('pollname', 'String'), @@ -114,7 +114,6 @@ class Server: ('interval', 'Int'), ('protocol', 'String'), ('service', 'String'), - ('uidl', 'Boolean'), ('auth', 'String'), ('timeout', 'Int'), ('envelope', 'String'), @@ -131,7 +130,8 @@ class Server: ('esmtppassword', 'String'), ('principal', 'String'), ('tracepolls','Boolean'), - ('badheader', 'Boolean')) + ('badheader', 'Boolean'), + ('retrieveerror', 'String')) def dump(self, folded): res = "" @@ -157,12 +157,9 @@ class Server: res = res + (" qvirtual " + str(self.qvirtual) + "\n"); if self.auth != ServerDefaults.auth: res = res + " auth " + self.auth - if self.dns != ServerDefaults.dns or self.uidl != ServerDefaults.uidl: - res = res + " and options" if self.dns != ServerDefaults.dns: + res = res + " and options" res = res + flag2str(self.dns, 'dns') - if self.uidl != ServerDefaults.uidl: - res = res + flag2str(self.uidl, 'uidl') if folded: res = res + "\n " else: res = res + " " @@ -200,9 +197,17 @@ class Server: res = res + " esmtppassword " + `self.esmtppassword` if self.interface or self.monitor or self.principal or self.plugin or self.plugout: if folded: - res = res + "\n" + res = res + "\n " + if self.badheader: res = res + "bad-header accept " + if self.retrieveerror == 'continue': + res = res + "retrieve-error continue " + if self.retrieveerror == 'markseen': + res = res + "retrieve-error markseen " + if self.badheader or self.retrieveerror != ServerDefaults.retrieveerror: + if folded: + res = res + "\n" if res[-1] == " ": res = res[0:-1] @@ -441,14 +446,13 @@ ianaservices = {"pop3":110, # fetchmail protocol to IANA service name defaultports = {"auto":None, "POP3":"pop3", - "APOP":"pop3", "KPOP":"1109", "IMAP":"imap", "ETRN":"smtp", "ODMR":"odmr"} authlist = ("any", "password", "gssapi", "kerberos", "ssh", "otp", - "msn", "ntlm") + "msn", "ntlm", "apop", "cram-md5") listboxhelp = { 'title' : 'List Selection Help', @@ -958,6 +962,13 @@ the normal operation of fetchmail when it is run with no arguments. If it is off, fetchmail will only query this host when it is given as a command-line argument. +The `Retrieve Error Policy' specifies how server errors during +message retrieval are handled. The default behaviour is to abort the +current session. Both the continue and markseen options will skip +the message with the error, but continue the session allowing for +downloading of subsequent messages. Additionally, the markseen +option will mark the skipped message as seen. + The `True name of server' box should specify the actual DNS name to query. By default this is the same as the poll name. @@ -1113,7 +1124,6 @@ class ServerEdit(Frame, MyWidget): # a custom port number you should be in expert mode and playing # close enough attention to notice this... self.service.set(defaultports[proto]) - if not proto in ("POP3", "APOP", "KPOP"): self.uidl.state = DISABLED def user_edit(self, username, mode): self.subwidgets[username] = UserEdit(username, self).edit(mode, Toplevel()) @@ -1135,6 +1145,9 @@ class ServerEdit(Frame, MyWidget): Checkbutton(ctlwin, text='Poll ' + host + ' normally?', variable=self.active).pack(side=TOP) Checkbutton(ctlwin, text='Pass messages with bad headers?', variable=self.badheader).pack(side=TOP) + retrieveerrorlist = ['abort', 'continue', 'markseen'] + Label(ctlwin, text="Retrieve Error Policy").pack(side=TOP) + ButtonBar(ctlwin, '', self.retrieveerror, retrieveerrorlist, 1, None) LabeledEntry(ctlwin, 'True name of ' + host + ':', self.via, leftwidth).pack(side=TOP, fill=X) LabeledEntry(ctlwin, 'Cycles to skip between polls:', @@ -1148,7 +1161,7 @@ class ServerEdit(Frame, MyWidget): # Compute the available protocols from the compile-time options protolist = ['auto'] if 'pop3' in feature_options: - protolist = protolist + ["POP3", "APOP", "KPOP"] + protolist = protolist + ["POP3", "KPOP"] if 'sdps' in feature_options: protolist.append("SDPS") if 'imap' in feature_options: @@ -1167,9 +1180,6 @@ class ServerEdit(Frame, MyWidget): LabeledEntry(protwin, 'On server TCP/IP service:', self.service, leftwidth).pack(side=TOP, fill=X) self.defaultPort() - Checkbutton(protwin, - text="POP3: track `seen' with client-side UIDLs?", - variable=self.uidl).pack(side=TOP) Button(protwin, text='Probe for supported protocols', fg='blue', command=self.autoprobe).pack(side=LEFT) Button(protwin, text='Help', fg='blue', @@ -1482,7 +1492,7 @@ recommend you upgrade to a non-broken IMAP server. if string.find(greetline, "Domino IMAP4") > 0: warnings = warnings + """ Your IMAP server appears to be Lotus Domino. This server, at least up -to version 4.6.2a, has a bug in its generation of MIME boundaries (see +to version 5.0.2, has a bug in its generation of MIME boundaries (see the details in the fetchmail FAQ). As a result, even MIME aware MUAs will see attachments as part of the message text. If your Domino server's POP3 facility is enabled, we recommend you fall back on it. @@ -1498,20 +1508,6 @@ It looks like you could use APOP on this server and avoid sending it your password in clear. You should talk to the mailserver administrator about this. -""" - if string.find(greetline, "IMAP2bis") > 0: - warnings = warnings + """ -IMAP2bis servers have a minor problem; they can't peek at messages without -marking them seen. If you take a line hit during the retrieval, the -interrupted message may get left on the server, marked seen. - -To work around this, it is recommended that you set the `fetchall' -option on all user entries associated with this server, so any stuck -mail will be retrieved next time around. - -To fix this bug, upgrade to an IMAP4 server. The fetchmail FAQ includes -a pointer to an open-source implementation. - """ if string.find(greetline, "IMAP4rev1") > 0: warnings = warnings + """