Титла: Python Публикувано от: glam в Jan 11, 2007, 13:00 Помощ !!!
Започнах да уча прогрмиране с Питон и едно от упражненията е да допълня един скрипт които чете е-мейл от IMAP сървър и го доставя до локалната машина след което преглежда всяко от тях и ако е спам го записва в зададена папка, ако ли не го доставя до е-мейл кутията чрез smtp. За да бъде спам е-мейла скрипта чете всяка линия за HTML и ако повече от 60% в изреченията е HTML то саобщението е спам. От една седмица се мъча да реща проблема, но нестава и нестава. Ето и самия сцкрипт. #!/usr/bin/python import getpass, imaplib, string from StringIO import StringIO # getBody – сваля заглабницата от е-мейла # връща само тялото на е-мейла def getBody(message): body="" seenStart = 0 for line in StringIO(message).readlines(): l = string.strip(line) if (seenStart == 1): body = body + "\n" + l elif l == "": seenStart = 1 return body # getField – връща стоиноста на "field" във секцията на тялото def getField(message, field): for line in StringIO(message).readlines(): l = string.strip(line) if (string.find(l, field) != -1): words = string.split(l, field) return words[1] return "unknown" # containsTag - връща TRUE ако html тагове <'t' са намерени def containsTag(l, t): return ((string.find(l, "<" + t) != -1) or (string.find(l, "</" + t) != -1)) # isSpam - връща 1 ако саобщението изглежда като спам # връща 0 ако саобщението изглежда добре def isSpam(message): total = 0 htmlFound = 0 for line in StringIO(getBody(message)).readlines(): print line # тук скрипта е недовършен и връща всичко като добро return 0 # postEmail – изпрща саобщение до smtp порта def postEmail(message): print "message from", getField(message, "From:") print "subject is", getField(message, "Subject:") # недовършен отново # handleEmail – прави проверка дали саобщението е спам. # Ако е спам го прибавя към файл # ако не е го изпраща до smtp порта def handleEmail(message): if (isSpam(message)): print "message is spam" else: print "message is good" postEmail(message) # недовършен отново # collectEmail – събира е-мейлите от imap сървъра def collectEmail(): m = imaplib.IMAP4_SSL('uni-sofia.bg' m.login(getpass.getuser(), getpass.getpass()) m.select() typ, data = m.search(None, 'ALL' print data for num in string.split(data[0]): print num typ, data = m.fetch(num, '(RFC822)' handleEmail(data[0][1]) m.logout() collectEmail() Доста съм зле със програмирането. Ако ниакой има опит със Питон сриптове ще му/й бъда много благодарен за съвет или решение!! Благодая ви предварително!! |