#!/usr/bin/env python # Delete delivery failure email in my pop3 mailbox # which where created because some spammer used my # domain as from address. # After this script was run the catch all adress (*@thomas-guettler.de) # was deleted. import os import re import sys import time import poplib def get_config(): home=os.environ["HOME"] getmailrc=os.path.join(home, ".getmail", "getmailrc") fd=open(getmailrc) file=fd.readlines() fd.close() server=None username=None password=None server_regex=re.compile(r'^\s*server\s*=\s*"?(.*?)"?\s*$') user_regex=re.compile(r'^\s*username\s*=\s*"?(.*?)"?\s*$') password_regex=re.compile(r'^\s*password\s*=\s*"?(.*?)"?\s*$') servers=[] users=[] passwords=[] for line in file: match=server_regex.match(line) if match: servers.append(match.group(1).strip()) match=user_regex.match(line) if match: users.append(match.group(1).strip()) match=password_regex.match(line) if match: passwords.append(match.group(1).strip()) print servers, users, passwords len_s=len(servers) assert(len(users)==len_s) assert(len(passwords)==len_s) return (servers, users, passwords) (servers, users, passwords)=get_config() server=servers[0] user=users[0] password=passwords[0] print server, user, password if len(sys.argv)==2: skip=int(sys.argv[1]) else: skip=1 banned_headers=[ "User unknown", "Security Update", "undeliverable message", "Current Pack", "Internet Update", "Error Report", "Critical Update" "domains with a difference", "abnehmen ohne di", "turn your views into cash", "ihr gratis mega-gewinnlos", "virus warning", "New network patch", "YOUR BEST HOLIDAYS", "failure message", "keep praying eyes away", "latest net critical update", "Current Network Critical Pack", "internet critical patch", "newest microsoft pack", "will be glad to hear from you", "sie haben gewonnen"] new=[] for header in banned_headers: new.append(header.lower()) banned_headers=new header_file="header.out" i=0 if os.path.isfile(header_file): while 1: try: os.rename(header_file, "%s-%s" % (header_file, i)) print "OK", i break except: i+=1 fd_header=open(header_file, "wt") print "Start %s. Schreibe nach headers.out" % ( time.strftime("%Y-%m-%-d %H:%M")) s=poplib.POP3(server) s.user(user) s.pass_(password) num_messages, mailbox_size=s.stat() print "messages: %s size: %s" % (num_messages, mailbox_size) try: for i in range(skip, num_messages): response = s.list(i) match=re.match(r"^\+OK (\d*) (\d*)$", response) if not match: print "Error parsing: %s" % response continue octets=match.group(2) octets=int(octets) (response, headers, octets_headers)=s.top(i, 0) print "Message: %sv%s octets: %s" % (i, num_messages, octets) #print ("%s %s %s" % (response, headers, octets)) if octets>140000: print "%s Deleting since too big: %s bytes=%s" % ( time.strftime("%Y-%m-%d %H:%M:%S"), i, octets) print_headers=["from", "to", "cc", "subject"] for header in headers: header=header.lower() for print_h in print_headers: if header.startswith(print_h): print header s.dele(i) continue for header in headers: header=header.lower() if header.startswith("subject"): fd_header.write("%s %s %s\n" % (i, octets, header)) fd_header.flush() for banned in banned_headers: if header.find(banned)!=-1: print "Deleting: %s" % header s.dele(i) break except: s.quit() print "Quiting!" raise s.quit() fd_header.close()