Започнах да уча прогрмиране с Питон и едно от упражненията е
да допълня един скрипт които чете е-мейл от 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()
Доста съм зле със програмирането. Ако ниакой има опит със
Питон сриптове ще му/й бъда много благодарен за съвет или
решение!!
Благодая ви предварително!!