This repository has been archived by the owner on Sep 23, 2018. It is now read-only.
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Messing around with Tests so they run somehow. Added a README.rst
- Loading branch information
Showing
11 changed files
with
182 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
Develop Mailservices in Django | ||
============================== | ||
|
||
Django Mailserver is an application that lets you develop | ||
mail services in your Django projects/applications in a manner | ||
that handles messages as Django handles HTTP requests. | ||
|
||
That project was initialy conceived as an improvement over | ||
`django-smtpd`_ by Denis Laprise, then became an almost full rewrite | ||
and when I thought I had gone through almost every line of code it | ||
seemed far much more like a fork than improvement. | ||
|
||
NOTE: that this is really alpha software, don't use it in a production | ||
environment unless you expect it to break everything ;) | ||
|
||
.. _django-smtpd:: http://code.google.com/p/django-smtpd/ | ||
|
||
Example usage: | ||
============== | ||
|
||
First of all, you need to add "mailserver" in your INSTALLED_APPS, and | ||
you'll want the settings:: | ||
|
||
ROOT_MAILCONF = 'myproject.mailbox' # Just like ROOT_URLCONF, but for | ||
# resolving recipients. | ||
MAILER_DAEMON_ADDRESS = 'postmaster@mydomain.com' | ||
|
||
``ROOT_MAILCONF`` is just like an URLCONF, but it matches e-mail addresses | ||
instead of paths. An example ``myproject.mailbox`` ``mailbox.py`` file | ||
would be:: | ||
|
||
from django_mailserver.mailbox import * | ||
|
||
urlpatterns = patterns('', | ||
(r'@bugs.example.com', include('myapp.mailbox')), | ||
) | ||
|
||
Note, that when matching recipients, just as Django strips path elements | ||
as they get matches, ``mailserver`` strips already matched parts from | ||
the addresses until it reaches the views. | ||
|
||
Now you can start you mail service! You can either to:: | ||
|
||
./manage.py startmailapp <app_name> | ||
|
||
From your project directory to have a new app created with a sample mailbox.py | ||
file in it, or you can create a new mailbox.py file in your existing application:: | ||
|
||
from django_mailserver.mailbox import * | ||
|
||
urlpatterns = patterns('', | ||
(r'^onedest', 'myapp.mailers.reply'), | ||
) | ||
|
||
You have it, your ``mailers.py`` file would be just like a ``views.py``:: | ||
|
||
from mailserver import EmailResponse | ||
|
||
def reply(request): | ||
print "Got email %s, Reply!" % request | ||
return EmailResponse( | ||
from_email=request.get_recipient_display(), | ||
to=request['From'], | ||
body=request.get_body(), | ||
subject="Re: %s" % request['Subject']) | ||
You get the idea, if you return an EmailResponse it gets ``send()`` | ||
later by the Handler. You can also return EmailIgnoreResponse among others. | ||
|
||
Delivering mails | ||
**************** | ||
|
||
Right now the only possible way to deliver messages to this is through a | ||
pipe transport to the ``./manage.py readmail`` command. Which is mostly | ||
intended for testing. | ||
|
||
Further improvements should have a more performant pipe transport and a | ||
self-running SMTP server. | ||
|
||
TODO | ||
**** | ||
|
||
**WARNING:** Django Mailserver is still under development. It is believed to | ||
brake at any point ;) There are lots of things to do, like: | ||
|
||
* Documentation | ||
* More tests. | ||
* Better URL parsing (i.e: includes work on domains, others on addreses). | ||
* Handling address prefixes/suffixes | ||
* Handling of error responses (ie: pipe transport should bring the | ||
response status_code to the exit value of the process). | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
import os | ||
from setuptools import setup, find_packages | ||
|
||
def read(fname): | ||
return open(os.path.join(os.path.dirname(__file__), fname)).read() | ||
|
||
setup( | ||
name = "mailserver", | ||
version = "0.1alpha1", | ||
url = 'http://github.com/telenieko/django-mailserver', | ||
license = 'BSD', | ||
description = "Create mail services in Django.", | ||
long_description = read('README.rst'), | ||
author = 'Marc Fargas', | ||
author_email = 'telenieko@telenieko.com', | ||
packages = find_packages('src'), | ||
package_dir = {'': 'src'}, | ||
install_requires = ['setuptools'], | ||
classifiers = [ | ||
'Development Status :: 4 - Beta', | ||
'Framework :: Django', | ||
'Intended Audience :: Developers', | ||
'License :: OSI Approved :: BSD License', | ||
'Operating System :: OS Independent', | ||
'Programming Language :: Python', | ||
'Topic :: Internet :: WWW/HTTP', | ||
] | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
from mailserver.mailbox import * | ||
import sys | ||
import types | ||
|
||
testapp = types.ModuleType('testapp2') | ||
testappboxes = types.ModuleType('mailbox') | ||
testapp.mailbox = testappboxes | ||
sys.modules.setdefault('testapp2', testapp) | ||
sys.modules.setdefault('testapp2.mailbox', testappboxes) | ||
|
||
testpatterns = patterns('', | ||
(r'^onedest', 'testapp.mailers.reply'), | ||
(r'(?P<sender>.+)@(?P<domain>.*)', 'testapp.mailers.echo'), | ||
(r'(?P<sender>.+)', 'testapp.mailers.echo'), | ||
) | ||
testappboxes.urlpatterns = testpatterns | ||
|
||
urlpatterns = patterns('', | ||
(r'(\.?)example.net', include('testapp2.mailbox')), | ||
(r'@bugs.example.com', include('testapp2.mailbox')), | ||
) | ||
|
||
def echo(request, sender, domain=None): | ||
print 'received sender=%s domain=%s' % (sender, domain) | ||
resp = EmailResponseServer(from_email=request.get_recipient_display(), | ||
to=request['From'], body=sender, | ||
subject="Echo Echo") | ||
resp.sender = sender | ||
resp.domain = domain | ||
return resp |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
from mailserver import EmailResponse, EmailIgnoreResponse, EmailResponseServer | ||
|
||
def echo(request, sender, domain=None): | ||
print 'received sender=%s domain=%s' % (sender, domain) | ||
resp = EmailResponseServer(from_email=request.get_recipient_display(), | ||
to=request['From'], body=sender, | ||
subject="Echo Echo") | ||
resp.sender = sender | ||
resp.domain = domain | ||
return resp | ||
|
||
def reply(request): | ||
print "Got email %s, mirror-reply!" % request | ||
return EmailResponse(from_email=request.get_recipient_display(), | ||
to=request['From'], | ||
body=request.get_body(), | ||
subject="Re: %s" % request['Subject']) |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
DATABASE_ENGINE = 'sqlite3' | ||
DATABASE_NAME = ':memory:' | ||
INSTALLED_APPS = ['mailserver', 'mailserver.testapp'] | ||
ROOT_URLCONF = 'mailserver.urls' | ||
ROOT_MAILCONF = 'mailserver.testapp.mailbox' | ||
DEBUG_PROPAGATE_EXCEPTIONS = True |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.