Emails von einem Pop3-Server holen und weiterschicken
Verfasst: Montag 11. Dezember 2006, 11:01
Hi!
Da am Wochenende die Emails bei uns in der Firma nicht korrekt weitergeleitet wurden, habe ich auf die Schnelle etwas mit Python programmiert. Es ist für mich immer wieder erstaunlich, wie einfach viele Probleme mit Python gelöst werden können.
Folgendes Programm holt Emails von einem POP3-Server und schickt diese an einen SMTP-Server weiter. Bei uns in der Firma wird dieses Programm seit heute dazu eingesetzt, um Emails von mehreren externen und internen POP3-Servern abzuholen und an unseren internen Exchange-Server weiterzuleiten.
lg
Gerold

Da am Wochenende die Emails bei uns in der Firma nicht korrekt weitergeleitet wurden, habe ich auf die Schnelle etwas mit Python programmiert. Es ist für mich immer wieder erstaunlich, wie einfach viele Probleme mit Python gelöst werden können.
Folgendes Programm holt Emails von einem POP3-Server und schickt diese an einen SMTP-Server weiter. Bei uns in der Firma wird dieses Programm seit heute dazu eingesetzt, um Emails von mehreren externen und internen POP3-Servern abzuholen und an unseren internen Exchange-Server weiterzuleiten.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
"""
simplemailgate.py
Holt Emails von einem POP3-Server und sendet diese unverändert an einen
SMTP-Server weiter.
Beispielaufruf:
simplemailgate.py <pop3server> <benutzername> <passwort> <smtpserver> <zieladresse>
"""
import sys
import poplib
import smtplib
POPSERVERPORT = 110
SMTPSERVERPORT = 25
SMTPFROM = "postmaster@XXXX.XX"
def fetch_email(
popserverhost, popserverport, popuser, poppass,
smtpserverhost, smtpserverport, smtpfrom, smtpto
):
"""
Holt Emails ab und schickt diese weiter.
"""
pop3 = poplib.POP3(popserverhost, popserverport)
pop3.user(popuser)
pop3.pass_(poppass)
pop3.set_debuglevel(1)
maillist = pop3.list()[1]
mailcount = len(maillist)
print "Anzahl:", mailcount
if maillist:
smtp = smtplib.SMTP(smtpserverhost, smtpserverport)
for i in range(1, mailcount + 1):
# Email abholen
mailtext = "\n".join(pop3.retr(i)[1])
# Email senden
smtp.sendmail(smtpfrom, smtpto, mailtext)
# Email löschen
pop3.dele(i)
smtp.quit()
smtp.close()
pop3.quit()
return True
def main():
"""
Beispielaufruf:
simplemailgate.py <pop3server> <benutzername> <passwort> <smtpserver> <zieladresse>
"""
if len(sys.argv) <> 6:
print "Falsche Parameteranzahl"
sys.exit(1)
popserverhost = sys.argv[1]
popserverport = POPSERVERPORT
popuser = sys.argv[2]
poppass = sys.argv[3]
smtpserverhost = sys.argv[4]
smtpserverport = SMTPSERVERPORT
smtpfrom = SMTPFROM
smtpto = sys.argv[5]
if fetch_email(
popserverhost, popserverport, popuser, poppass,
smtpserverhost, smtpserverport, smtpfrom, smtpto
):
print "OK"
print
sys.exit(0)
else:
print "FEHLER"
print
sys.exit(1)
if __name__ == "__main__":
main()
Gerold
