diff --git a/django_mailbox/models.py b/django_mailbox/models.py index 9f7ffc21..49d0aad5 100644 --- a/django_mailbox/models.py +++ b/django_mailbox/models.py @@ -35,6 +35,7 @@ from django_mailbox.transports import Pop3Transport, ImapTransport, \ MaildirTransport, MboxTransport, BabylTransport, MHTransport, \ MMDFTransport, GmailImapTransport +from django_mailbox.transports.registry import registry logger = logging.getLogger(__name__) @@ -223,6 +224,8 @@ def get_connection(self): conn = MHTransport(self.location) elif self.type == 'mmdf': conn = MMDFTransport(self.location) + else: + conn = registry[self.type].from_url(self.uri) return conn def process_incoming_message(self, message): diff --git a/django_mailbox/transports/__init__.py b/django_mailbox/transports/__init__.py index 7aeef95e..b9952581 100644 --- a/django_mailbox/transports/__init__.py +++ b/django_mailbox/transports/__init__.py @@ -8,3 +8,4 @@ from django_mailbox.transports.mh import MHTransport from django_mailbox.transports.mmdf import MMDFTransport from django_mailbox.transports.gmail import GmailImapTransport +from django_mailbox.transports.registry import registry, register diff --git a/django_mailbox/transports/base.py b/django_mailbox/transports/base.py index d65ad35f..13eb8fba 100644 --- a/django_mailbox/transports/base.py +++ b/django_mailbox/transports/base.py @@ -17,3 +17,10 @@ def get_email_from_bytes(self, contents): message = email.message_from_string(contents) return message + + +class PluggableEmailTransport(EmailTransport): + @classmethod + def from_uri(cls, uri): + raise NotImplemented("The class does not implement {0}.from_uri, and it should. " + "Overwrite {0}.from_uri.".format(cls.__name__)) diff --git a/django_mailbox/transports/registry.py b/django_mailbox/transports/registry.py new file mode 100644 index 00000000..4ed847ec --- /dev/null +++ b/django_mailbox/transports/registry.py @@ -0,0 +1,8 @@ +registry = {} + + +def register(transport_type): + def decorator(f): + registry[transport_type] = f + return f + return decorator