Email parser updated
This commit is contained in:
5
.gitignore
vendored
5
.gitignore
vendored
@@ -29,8 +29,5 @@ nosetests.xml
|
|||||||
# Translations
|
# Translations
|
||||||
*.mo
|
*.mo
|
||||||
|
|
||||||
# Mr Developer
|
example.*
|
||||||
.mr.developer.cfg
|
|
||||||
.project
|
|
||||||
.pydevproject
|
|
||||||
example.py
|
example.py
|
||||||
|
|||||||
13
example.py
13
example.py
@@ -1,13 +0,0 @@
|
|||||||
import sys
|
|
||||||
sys.path.insert(0, '/home/martin/mailbox')
|
|
||||||
|
|
||||||
from mailbox import MailBox
|
|
||||||
|
|
||||||
mailbox = MailBox('imap.gmail.com',
|
|
||||||
username='username',
|
|
||||||
password='password')
|
|
||||||
|
|
||||||
unread = mailbox.get_unread()
|
|
||||||
|
|
||||||
for message in unread:
|
|
||||||
print message.json()
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import email
|
||||||
from mailbox.imap import ImapTransport
|
from mailbox.imap import ImapTransport
|
||||||
|
|
||||||
class MailBox(object):
|
class MailBox(object):
|
||||||
@@ -8,5 +9,39 @@ class MailBox(object):
|
|||||||
self.connection = server.connect(username, password)
|
self.connection = server.connect(username, password)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def parse_email(self, raw_email):
|
||||||
|
|
||||||
|
email_message = email.message_from_string(raw_email)
|
||||||
|
headers = dict(email_message.items())
|
||||||
|
|
||||||
|
maintype = email_message.get_content_maintype()
|
||||||
|
|
||||||
|
message = []
|
||||||
|
|
||||||
|
if maintype == 'multipart':
|
||||||
|
for part in email_message.get_payload():
|
||||||
|
if part.get_content_maintype() == 'text':
|
||||||
|
message.append(part.get_payload(decode=True))
|
||||||
|
elif maintype == 'text':
|
||||||
|
message.append(email_message.get_payload(decode=True))
|
||||||
|
|
||||||
|
return {
|
||||||
|
'message': message,
|
||||||
|
'headers': headers,
|
||||||
|
'maintype': maintype
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def get_unread(self):
|
def get_unread(self):
|
||||||
|
|
||||||
|
result, data = self.connection.uid('search', None, "ALL") # search and return uids instead
|
||||||
|
latest_email_uid = data[0].split()[-1]
|
||||||
|
result, data = self.connection.uid('fetch', latest_email_uid, '(RFC822)')
|
||||||
|
|
||||||
|
raw_email = data[0][1]
|
||||||
|
|
||||||
|
print self.parse_email(raw_email)
|
||||||
|
|
||||||
|
|
||||||
return {}
|
return {}
|
||||||
@@ -17,8 +17,16 @@ class ImapTransport(object):
|
|||||||
if not self.port:
|
if not self.port:
|
||||||
self.port = 143
|
self.port = 143
|
||||||
|
|
||||||
|
|
||||||
|
def list_folders(self):
|
||||||
|
return self.server.list()
|
||||||
|
|
||||||
def connect(self, username, password):
|
def connect(self, username, password):
|
||||||
self.server = self.transport(self.hostname, self.port)
|
self.server = self.transport(self.hostname, self.port)
|
||||||
typ, msg = self.server.login(username, password)
|
typ, msg = self.server.login(username, password)
|
||||||
|
|
||||||
self.server.select()
|
self.server.select()
|
||||||
|
|
||||||
|
return self.server
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user