zaklad mailoveho rozhrani
[krypto.git] / robot.py
1 #!/usr/bin/env python
2
3 """Mailove rozhrani pro sadu kryptoanalytickych nastroju."""
4
5 import os
6 import sys
7 import re
8 import smtplib
9 import email
10 from email.mime.text import MIMEText
11 from time import asctime
12 import pickle
13
14 from ocesavac import ocesat
15 from spolecne import ABECEDA
16
17 class settings:
18     pass
19
20 settings = pickle.load(open('./robot_settings'))
21 os.chdir(settings.path)
22
23 def posli_mail(komu, predmet, text, loguj=None):
24     msg = MIMEText(text)
25     msg['Subject'] = predmet
26     msg['From'] = settings.name + " <" + settings.mail  + ">"
27     msg['To'] = komu
28     smtplib.SMTP('localhost').sendmail(settings.mail, komu, msg.as_string())
29     if loguj:
30         soubor = open(loguj, 'w')
31         soubor.write(msg.as_string())
32         soubor.close()
33
34 # Cteni mailu
35 mail = email.message_from_file(sys.stdin)
36 predmet, _, opsny = mail['Subject'].strip().upper().partition(' ')
37 odesilatel = mail['From']
38 if predmet != settings.subject:
39     sys.exit()
40 if 'L' in opsny:
41     mail = pickle.load(open('./msg_last.tmp'))
42     m1 = re.match(r".*\<(.*)\>.*", mail['From'])
43     m2 = re.match(r".*\<(.*)\>.*", odesilatel)
44     if m1:
45         f1 = m1.group(1)
46     else:
47         f1 = mail['From']
48     if m2:
49         f2 = m2.group(1)
50     else:
51         f2 = odesilatel
52     if (f1 != f2):
53         posli_mail(odesilatel, "Omluva", "Omlouvam se,"
54                    " ale Vase zprava uz bohuzel neni na serveru ulozena.\n")
55         sys.exit()
56
57 if mail.is_multipart():
58     telo = mail.get_payload(0).get_payload().strip()
59 else:
60     telo = mail.get_payload().strip()
61
62 if len(ocesat(telo, False)) < 2:
63     posli_mail(odesilatel, "Omluva", "Omlouvam se,"
64                    " ale Vase zprava je prilis kratka.\n")
65     sys.exit()
66 zprava = telo.upper()
67
68 # TODO zpracovat zpravu a odeslat vysledek
69 #pridat "\nS pozdravem\nVas Robot"
70
71 posli_mail(odesilatel,
72            "Analyza Vasi zpravy",
73            "\n".join(analyza),
74            './robot_last.tmp')
75
76 f = open('./msg_last.tmp', 'w')
77 pickle.dump(mail, f)
78 f.close()
79
80 f = open('./robot.log', 'a')
81 m = re.match(r".*\<(.*)\>.*", odesilatel)
82 if m:
83     odesilatel2 = m.group(1)
84 else:
85     odesilatel2 = odesilatel
86 f.write(asctime() + " " +  odesilatel2 + " " + opsny + "\n")
87 f.close()