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:
parent
6a0305f944
commit
aa0b79b36f
13 changed files with 174 additions and 77 deletions
7
django_mailbox/transports/__init__.py
Normal file
7
django_mailbox/transports/__init__.py
Normal 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
|
||||
5
django_mailbox/transports/babyl.py
Normal file
5
django_mailbox/transports/babyl.py
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
from mailbox import Babyl
|
||||
from django_mailbox.transports.generic import GenericFileMailbox
|
||||
|
||||
class BabylTransport(GenericFileMailbox):
|
||||
_variant = Babyl
|
||||
18
django_mailbox/transports/generic.py
Normal file
18
django_mailbox/transports/generic.py
Normal 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()
|
||||
33
django_mailbox/transports/imap.py
Normal file
33
django_mailbox/transports/imap.py
Normal 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
|
||||
8
django_mailbox/transports/maildir.py
Normal file
8
django_mailbox/transports/maildir.py
Normal 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)
|
||||
5
django_mailbox/transports/mbox.py
Normal file
5
django_mailbox/transports/mbox.py
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
from mailbox import mbox
|
||||
from django_mailbox.transports.generic import GenericFileMailbox
|
||||
|
||||
class MboxTransport(GenericFileMailbox):
|
||||
_variant = mbox
|
||||
5
django_mailbox/transports/mh.py
Normal file
5
django_mailbox/transports/mh.py
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
from mailbox import MH
|
||||
from django_mailbox.transports.generic import GenericFileMailbox
|
||||
|
||||
class MHTransport(GenericFileMailbox):
|
||||
_variant = MH
|
||||
5
django_mailbox/transports/mmdf.py
Normal file
5
django_mailbox/transports/mmdf.py
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
from mailbox import MMDF
|
||||
from django_mailbox.transports.generic import GenericFileMailbox
|
||||
|
||||
class MMDFTransport(GenericFileMailbox):
|
||||
_variant = MMDF
|
||||
33
django_mailbox/transports/pop3.py
Normal file
33
django_mailbox/transports/pop3.py
Normal 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue