-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEmailProtocol.py
91 lines (74 loc) · 2.5 KB
/
EmailProtocol.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#import config
import imaplib
import smtplib
class AccountHandler(object):
def __init__(self, accounts=[]):
#accountConfig = config.Config("emails")
#accounts = accountConfig.config
self.accounts = [EmailAccount(account) for account in accounts]
class EmailAccount(object):
def __init__(self, data):
self.email = None
self.password = None
self.smtp = None
self.imap = None
for key, value in self.data:
self[key] = value
# Simplify the life of users of common protocols
if self.adress.endswith("@gmail.com"):
self.receiver = self.receiver or IMAP("imap.gmail.com:587")
self.sender = self.sender or SMTP("smtp.gmail.com:587")
def __setitem__(self, key, value):
if key == "email":
self.email = value
elif key == "password":
self.password = value
elif key == "smtp":
self.receiver = SMTP(self, value)
elif key == "imap":
self.sender = IMAP(self, value)
elif key == "pop":
raise Exception("pop is currently not supported")
else:
raise Warning("key %s is ignored" % key)
def getlabels(self):
return self.imap
class Sender(object):
def login():
pass
class Receiver(object):
def login():
pass
class SMTP(Sender):
def __init__(self, account, data):
self.account = account
server, port = parseServer(data)
self.server = smtplib.SMTP(server, port)
def sendmail(self, to, message):
server = self.server
server.starttls()
server.ehlo()
server.login(self.account.email, self.account.password)
server.sendmail(self.account.email, to, message)
return server.ehlo()
class IMAP(Receiver):
def __init__(self, account, data):
self.account = account
self.server, self.port = parseServer(data)
print self.login()
def login(self):
imaplib.IMAP4(self.server, self.port)
self.mail = imaplib.IMAP4_SSL(self.server)
return self.mail.login(self.account.email, self.account.password)
def getlabels(self):
return self.mail.list()
def parseServer(serverstr):
server = serverstr.split(":")
if len(server) == 1:
return (server, 25)
else:
return (server[0], int(server[1]))
# I don't plan on supporting Pop3 anytime soon, so you would have to program this yourself
#class Pop3(object):
#port = 110
#pass