wie ich an anderer Stelle schon erwähnt habe, ist Python ziemliches Neuland für mich. Jetzt habe ich mich mal rangesetzt und angefangen mein erstes ernsthaftes Projekt damit zu machen.
Nunja, das Projekt existiert eigentlich schon, ist ein Programm das im Betrieb von qmail einige Hilfestellungen bietet und ist bislang in Perl geschrieben, leider aber über eine lange Zeit immer weiter organisch gewachsen (will heißen: eine neue Funktion einzubauen ist ein echter Krampf).
Da ich das ganze ohnehin neu auflegen wollte, tue ich das nun in Python statt in Perl (mal sehen, ob das eine Weise Entscheidung war ). So richtig weit bin ich heute erwartungsgemäß nicht gekommen, da ich mich mehr mit der Dokumentation etc. rumgeschlagen habe. Aber ich habe zumindest einiges das schon funktioniert.
Stellvertretend habe ich eine Methode ausgewählt, die dafür zuständig ist, zu checken ob eine Empfängeradresse auf dem Server ernst zu nehmen ist.
Nun möchte ich mal eure Meinung dazu hören, wissen was ich anders/besser/pythoniger machen sollte usw.
Ich befürchte, dass ich zu viele Klammern und Reguläre Ausdrücke (kommt halt aus Perl ) benutzt habe, um mich als Pythoner zu fühlen.
Code: Alles auswählen
def isValidRecipient(self, recipient):
addresses = recipient.split(",")
emailPattern = "[-_a-z0-9]+@[-.a-z0-9]+\.[a-z]{2,6}"
addrRE = re.compile("^&?" + emailPattern + "$")
longAddrRE = re.compile("^.*<(" + emailPattern + ")>")
for addr in addresses:
addr = addr.replace("&", "", 1)
addr = addr.strip()
# recipient might be in format "John Doe <j.doe@example.com>"
addr = longAddrRE.sub(r"\1", addr)
parts = addr.split("@")
localpart = parts[0]
domain = parts[1]
if(os.path.isdir("/var/vpopmail/domains/" + domain + "/" + localpart + "/Maildir")):
return True
# is this a forward-address?
aliasPath = "/var/vpopmail/domains/" + domain + "/.qmail-" + localpart
if(os.path.isfile(aliasPath)):
aliases = open(aliasPath)
for line in aliases:
line = line.strip()
if(addrRE.search(line) is not None):
if(self.isValidRecipient(line)):
return True
else:
return True
return False
# is this a forwared recipient in format "domain-localpart@domain?
aliasRE = re.compile("^" + domain + "-")
localForward = aliasRE.sub(r"", localpart)
if(localForward != localpart):
if(self.isValidRecipient(localForward + "@" + domain)):
return True
return False