1
0
Fork 1
mirror of https://github.com/coddingtonbear/django-mailbox.git synced 2026-07-09 22:38:19 +02:00

Adding file-based transports including Maildir, Mbox, Babyl, MH, and MMDF.

This commit is contained in:
Adam Coddington 2012-06-30 22:30:13 -07:00
parent 6a0305f944
commit aa0b79b36f
13 changed files with 174 additions and 77 deletions

View file

@ -0,0 +1,7 @@
from django_mailbox.transports.imap import ImapTransport
from django_mailbox.transports.pop3 import Pop3Transport
from django_mailbox.transports.maildir import MaildirTransport
from django_mailbox.transports.mbox import MboxTransport
from django_mailbox.transports.babyl import BabylTransport
from django_mailbox.transports.mh import MHTransport
from django_mailbox.transports.mmdf import MMDFTransport

View file

@ -0,0 +1,5 @@
from mailbox import Babyl
from django_mailbox.transports.generic import GenericFileMailbox
class BabylTransport(GenericFileMailbox):
_variant = Babyl

View file

@ -0,0 +1,18 @@
class GenericFileMailbox(object):
_variant = None
_path = None
def __init__(self, path):
super(GenericFileMailbox, self).__init__()
self._path = path
def get_instance(self):
return self._variant(self._path)
def get_message(self):
repository = self.get_instance()
repository.lock()
for key, message in repository.items():
repository.remove(key)
yield message
repository.unlock()

View file

@ -0,0 +1,33 @@
import email
from imaplib import IMAP4, IMAP4_SSL
class ImapTransport(object):
def __init__(self, hostname, port=None, ssl=False):
self.hostname = hostname
self.port = port
if ssl:
self.transport = IMAP4_SSL
if not self.port:
self.port = 993
else:
self.transport = IMAP4
if not self.port:
self.port = 143
def connect(self, username, password):
self.server = self.transport(self.hostname, self.port)
typ, msg = self.server.login(username, password)
self.server.select()
def get_message(self):
typ, inbox = self.server.search(None, 'ALL')
for key in inbox[0].split():
try:
typ, msg_contents = self.server.fetch(key, '(RFC822)')
message = email.message_from_string(msg_contents[0][1])
yield message
except email.Errors.MessageParseError:
continue
self.server.store(key, "+FLAGS", "\\Deleted");
self.server.expunge()
return

View file

@ -0,0 +1,8 @@
from mailbox import Maildir
from django_mailbox.transports.generic import GenericFileMailbox
class MaildirTransport(GenericFileMailbox):
_variant = Maildir
def get_instance(self):
return self._variant(self._path, None)

View file

@ -0,0 +1,5 @@
from mailbox import mbox
from django_mailbox.transports.generic import GenericFileMailbox
class MboxTransport(GenericFileMailbox):
_variant = mbox

View file

@ -0,0 +1,5 @@
from mailbox import MH
from django_mailbox.transports.generic import GenericFileMailbox
class MHTransport(GenericFileMailbox):
_variant = MH

View file

@ -0,0 +1,5 @@
from mailbox import MMDF
from django_mailbox.transports.generic import GenericFileMailbox
class MMDFTransport(GenericFileMailbox):
_variant = MMDF

View file

@ -0,0 +1,33 @@
import email
from poplib import POP3, POP3_SSL
class Pop3Transport(object):
def __init__(self, hostname, port=None, ssl=False):
self.hostname = hostname
self.port = port
if ssl:
self.transport = POP3_SSL
if not self.port:
self.port = 995
else:
self.transport = POP3
if not self.port:
self.port = 110
def connect(self, username, password):
self.server = self.transport(self.hostname, self.port)
self.server.user(username)
self.server.pass_(password)
def get_message(self):
message_count = len(self.server.list()[1])
for i in range(message_count):
try:
msg_contents = "\r\n".join(self.server.retr(i + 1)[1])
message = email.message_from_string(msg_contents)
yield message
except email.Errors.MessageParseError:
continue
self.server.dele(i + 1)
self.server.quit()
return