{ "info": { "author": "Iacopo Spalletti", "author_email": "i.spalletti@nephila.it", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "======================\nDjango Maja Newsletter\n======================\n\nThe problematic was :\n\n *How to couple a contact base to a mailing list and sending newsletters throught Django ?*\n\nImagine that we have an application containing some kind of profiles or something like the **django.contrib.auth** and you want to send newsletters to them and tracking the activity.\n\n**This package is a fork of of emencia-django-newsletter with django 1.6 compatibility and other customizations**\n\n.. contents::\n\nFeatures\n========\n\nMore than a long speech, here the list of the main features :\n\n * Coupling capacities with another django model.\n * Variables can be used in the newsletter's templates.\n * Mailing list managements (merging, importing...).\n * Import/Export of the contact in VCard 3.0.\n * Configurable SMTP servers with flow limit management.\n * Working groups.\n * Can send newsletter previews.\n * Subscriptions and unsubscriptions to mailing list.\n * Attachments in newsletters.\n * Unique urls for an user.\n * Tracking statistics.\n\n\nArchitecture\n============\n\nAt the level of the application architecture, we can see 2 originalities who need to be explained.\n\nContent types\n-------------\n\nThe **content types** application is used to link any *Contact* model instance to another model instance.\nThis allow you to create different kinds of contact linked to differents application, and retrieve the association at anytime.\n\nThis is particulary usefull with the templates variables if certain informations are located in the model instance linked.\n\nCronjob/Command\n---------------\n\nThe maja_newsletter application will never send the newsletters registered in the site until you launch the **send_newsletter** command. ::\n\n $ python manage.py send_newsletter\n\nThis command will launch the newsletters who need to be launched accordingly to the credits of the SMTP server of the newsletter.\nThat's mean that not all newsletters will be expedied at the end of the command because if you use a public SMTP server you can be banished temporarly if you reach the sending limit.\nTo avoid banishment all the newsletters are not sended in the same time and immediately.\n\nSo it is recommanded to create a **cronjob** for launching this command every hours for example.\n\nInstallation\n============\n\nDependencies\n------------\n\nMake sure to install these packages prior to installation :\n\n * Django >= 1.2\n * html2text\n * BeautifulSoup\n * django-tagging\n * vobject\n * xlwt\n * xlrd\n\nThe package below is optionnal but handy for rendering a webpage in your newsletter.\n\n * lxml\n\nGetting the code\n----------------\n\nYou could retrieve the last sources from http://github.com/nephila/django-maja-newsletter and running the installation script ::\n\n $ python setup.py install\n\nor use pip ::\n\n $ pip install -e git://github.com/nephila/django-maja-newsletter.git#egg=maja_newsletter\n\nFor the latest stable version use easy_install ::\n\n $ easy_install django-maja-newsletter\n\nApplications\n------------\n\nThen register **maja_newsletter**, **admin**, **contenttypes** and **tagging** in the INSTALLED_APPS section of your project's settings. ::\n\n INSTALLED_APPS = (\n # Your favorites apps\n 'django.contrib.contenttypes',\n 'django.contrib.sites',\n 'django.contrib.admin',\n 'django.contrib.sessions',\n 'tagging',\n 'maja_newsletter',)\n\n\nUrls\n----\n\nIn your project urls.py adding this following line to include the newsletter's urls for serving the newsletters in HTML. ::\n\n url(r'^newsletters/', include('maja_newsletter.urls')),\n\nNote this urlset is provided for convenient usage, but you can do something like that if you want to customize your urls : ::\n\n url(r'^newsletters/', include('maja_newsletter.urls.newsletter')),\n url(r'^mailing/', include('maja_newsletter.urls.mailing_list')),\n url(r'^tracking/', include('maja_newsletter.urls.tracking')),\n url(r'^statistics/', include('maja_newsletter.urls.statistics')),\n\nMedia Files\n-----------\n\nYou have to make a symbolic link from maja_newsletter/media/edn/ directory to your media directory or make a copy named **edn**,\nbut if want to change this value, define NEWSLETTER_MEDIA_URL in the settings.py as appropriate.\n\nDon't forget to serve this url.\n\nSynchronization\n---------------\n\nNow you can run a *syncdb* for installing the models into your database.\n\nSettings\n--------\n\nYou have to add in your settings the email address used to send the newsletter : ::\n\n NEWSLETTER_DEFAULT_HEADER_SENDER = 'My NewsLetter '\n\n\nDBMS considerations\n===================\n\nIt's not recommended to use SQLite for production use. Because is limited to 999\nvariables into a SQL query, you can not create a Mailing List greater than this limitations\nin the Django's admin modules. Prefer MySQL ou PgSQL.\n\n\nHOWTO use TinyMCE for editing the newsletters\n=============================================\n\nIt can be usefull for the end user to have a WYSIWYG editor for the\ncreation of the newsletter. The choice of the WYSIWYG editor is free and\nthe described method can be applied for anything, but we will focus on\nTinyMCE because he has many features and a usefull plugin for loading\ntemplates within it.\n\nFirst of all install the `django-tinymce\n`_ application into your project.\n\nThat's done, enjoy !\n\n\nHOWTO couple your profile application with maja_newsletter\n==========================================================\n\nIf you wan to quickly import your contacts into a mailing list for example,\nyou can write an admin's action for your model.\n\nWe suppose that we have the fields *email*, *first_name* and *last_name* in a models name **Profile**.\n\nIn his AdminModel definition add this method and register it into the *actions* property. ::\n\n class ProfileAdmin(admin.ModelAdmin):\n\n def make_mailing_list(self, request, queryset):\n from maja_newsletter.models import Contact\n from maja_newsletter.models import MailingList\n\n subscribers = []\n for profile in queryset:\n contact, created = Contact.objects.get_or_create(email=profile.mail,\n defaults={'first_name': profile.first_name,\n 'last_name': profile.last_name,\n 'content_object': profile})\n subscribers.append(contact)\n new_mailing = MailingList(name='New mailing list',\n description='New mailing list created from admin/profile')\n new_mailing.save()\n new_mailing.subscribers.add(*subscribers)\n new_mailing.save()\n self.message_user(request, '%s succesfully created.' % new_mailing)\n make_mailing_list.short_description = 'Create a mailing list'\n\n actions = ['make_mailing_list']\n\nThis action will create or retrieve all the **Contact** instances needed for the mailing list creation.\n\nAfter this you can send a newsletter to this mailing list.\n\nDevelopment\n===========\n\nA `Buildout\n`_ script is provided to properly initialize the project\nfor anybody who wants to contribute.\n\nFirst of all, please use `VirtualEnv\n`_ to protect your system.\n\nFollow these steps to start the development : ::\n\n $ git clone git://github.com/nephila/django-maja-newsletter.git\n $ virtualenv --no-site-packages maja_newsletter\n $ cd maja_newsletter\n $ source ./bin/activate\n $ python bootstrap.py\n $ ./bin/buildout\n\nThe buildout script will resolve all the dependancies needed to develop the application.\n\nOnce these operations are done, you are ready to develop on the project.\n\nRun this command to launch the tests. ::\n\n $ ./bin/test\n\nOr you can also launch the demo. ::\n\n $ ./bin/demo syncdb\n $ ./bin/demo runserver\n\nPretty easy no ?\n\nDatabase Representation\n=======================\n\n.. image:: https://github.com/nephila/django-maja-newsletter/raw/master/docs/graph_model.png\n\n\nChangelog\n=========\n\n0.3\n---\n\n- Use UTM Tags\n- Demo in the package\n- Improving importation\n- Premailer for HTML page.\n- New importation capabilities\n- Compatibility with django 1.3.1\n- Unique key variable for newsletter's title\n- A lot of bug fixes\n\n\n0.2\n---\n\n- Plugin for django-cms\n- Multiple importation format\n- Compatibility with django 1.2\n- A lot of bug fixes\n\n\n0.1dev (unreleased)\n-------------------\n\n- Initial release", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://nephila.it/", "keywords": "django,newsletter,mailing", "license": "BSD License", "maintainer": null, "maintainer_email": null, "name": "django-maja-newsletter", "package_url": "https://pypi.org/project/django-maja-newsletter/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/django-maja-newsletter/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://nephila.it/" }, "release_url": "https://pypi.org/project/django-maja-newsletter/0.6.0/", "requires_dist": null, "requires_python": null, "summary": "A Django app for sending newsletter by email to a contact list.", "version": "0.6.0" }, "last_serial": 1844583, "releases": { "0.4": [ { "comment_text": "", "digests": { "md5": "905faf9d410d207dad3b666f672b53bb", "sha256": "02eb392857a770b16d882a14533f513afd3fddeae8a6fbbc470bce616a6832da" }, "downloads": -1, "filename": "django-maja-newsletter-0.4.tar.gz", "has_sig": false, "md5_digest": "905faf9d410d207dad3b666f672b53bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 579572, "upload_time": "2014-04-24T12:42:14", "url": "https://files.pythonhosted.org/packages/bf/b9/240f285171e15315f16c012b2069fb9ef6b2e15034c79b101beb236a304c/django-maja-newsletter-0.4.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "1b9c87452a57b741100ee548d544575d", "sha256": "4c4f707c7bb7e979d94a609d4eccc10dd676ce6a61753728797df8dcf94818e6" }, "downloads": -1, "filename": "django-maja-newsletter-0.4.1.tar.gz", "has_sig": false, "md5_digest": "1b9c87452a57b741100ee548d544575d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 581814, "upload_time": "2014-06-03T10:52:17", "url": "https://files.pythonhosted.org/packages/5a/da/683296ffbfa1bef63eb9154b304bcaa2e0eee7de4b0554b73538a7a93e36/django-maja-newsletter-0.4.1.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "0ef5221b2ec0832984d2a21e1848052e", "sha256": "0ed15a30a2ad9a9c89a2840079e96efbb50c0149730361958b4eecbc9529a7a5" }, "downloads": -1, "filename": "django-maja-newsletter-0.5.tar.gz", "has_sig": false, "md5_digest": "0ef5221b2ec0832984d2a21e1848052e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 583876, "upload_time": "2014-06-07T09:15:09", "url": "https://files.pythonhosted.org/packages/82/2a/9a905c4164856840c07c7ffccd0b32ad191c27c512435da917d9c187a1ee/django-maja-newsletter-0.5.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "bcf215053b25e7ed2497b70c998ff74e", "sha256": "85906061de5d350f3434d942d652d288577ac1509d415ec44521aba4eaf04042" }, "downloads": -1, "filename": "django-maja-newsletter-0.5.1.tar.gz", "has_sig": false, "md5_digest": "bcf215053b25e7ed2497b70c998ff74e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 578438, "upload_time": "2014-09-26T06:35:06", "url": "https://files.pythonhosted.org/packages/c5/13/273fb5b701a40b7ce59647713e2b9f9b81e1e1a6d98db97affba868adfed/django-maja-newsletter-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "3460165ecd5cab3fece8393566dcb77a", "sha256": "1dcdb7fc55c55cc2721b69ba6a8c6b52f34eeab23953b5ff4bd81e2d9b527957" }, "downloads": -1, "filename": "django-maja-newsletter-0.5.2.tar.gz", "has_sig": false, "md5_digest": "3460165ecd5cab3fece8393566dcb77a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 574764, "upload_time": "2014-11-22T23:05:28", "url": "https://files.pythonhosted.org/packages/2c/0e/04160fdd535be1645ebf44c01e811d0737bc60f93f104e2eb5ac17eef79e/django-maja-newsletter-0.5.2.tar.gz" } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "0e3a468863e5b8ab7895cf7344a423ca", "sha256": "4fb061af0568be6d4f16fa12bb883ecb1c1a08bb9d706396caa48d729d9d53f7" }, "downloads": -1, "filename": "django_maja_newsletter-0.5.3-py2-none-any.whl", "has_sig": false, "md5_digest": "0e3a468863e5b8ab7895cf7344a423ca", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 560826, "upload_time": "2015-06-26T22:30:53", "url": "https://files.pythonhosted.org/packages/a8/88/18f1bc7928ecc34c986fbd9803d53427efde21e69a761112db77b6b86ab1/django_maja_newsletter-0.5.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4bae7dea38c560ba631e780233596e61", "sha256": "12c6f1b074f328992d4b43f0b15d761d5a0dd247c4b388ff710928dab929b07a" }, "downloads": -1, "filename": "django-maja-newsletter-0.5.3.tar.gz", "has_sig": false, "md5_digest": "4bae7dea38c560ba631e780233596e61", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 584196, "upload_time": "2015-06-26T22:30:44", "url": "https://files.pythonhosted.org/packages/6f/97/1a1d87c9e6bb315870efe6ec28a8efb13aaaed78e89f5e23ac90378a6f58/django-maja-newsletter-0.5.3.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "d5f52b071fae1205b1c6fc1140cbd976", "sha256": "e9b90da272af67e0e2f81db73173e976ca085d05d20addd140d8d2ecaac700ed" }, "downloads": -1, "filename": "django_maja_newsletter-0.6.0-py2-none-any.whl", "has_sig": false, "md5_digest": "d5f52b071fae1205b1c6fc1140cbd976", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 563339, "upload_time": "2015-12-03T06:46:14", "url": "https://files.pythonhosted.org/packages/d1/8e/b8f4bbf47c3b00c8a6b1aef0fca038d5e959299d11985ee2b6d25b1a5415/django_maja_newsletter-0.6.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5d1f86f8343241254798ea681197bf88", "sha256": "93cac2edfbb517c4ac2646d0f4eccf694015133d4f08de3025f5b723f94c922e" }, "downloads": -1, "filename": "django-maja-newsletter-0.6.0.tar.gz", "has_sig": false, "md5_digest": "5d1f86f8343241254798ea681197bf88", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 580838, "upload_time": "2015-12-03T06:45:58", "url": "https://files.pythonhosted.org/packages/84/62/e21b32100538a3df582012d8d1e7bef2047ad37c28cf4f346d2f58dd11cb/django-maja-newsletter-0.6.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d5f52b071fae1205b1c6fc1140cbd976", "sha256": "e9b90da272af67e0e2f81db73173e976ca085d05d20addd140d8d2ecaac700ed" }, "downloads": -1, "filename": "django_maja_newsletter-0.6.0-py2-none-any.whl", "has_sig": false, "md5_digest": "d5f52b071fae1205b1c6fc1140cbd976", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 563339, "upload_time": "2015-12-03T06:46:14", "url": "https://files.pythonhosted.org/packages/d1/8e/b8f4bbf47c3b00c8a6b1aef0fca038d5e959299d11985ee2b6d25b1a5415/django_maja_newsletter-0.6.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5d1f86f8343241254798ea681197bf88", "sha256": "93cac2edfbb517c4ac2646d0f4eccf694015133d4f08de3025f5b723f94c922e" }, "downloads": -1, "filename": "django-maja-newsletter-0.6.0.tar.gz", "has_sig": false, "md5_digest": "5d1f86f8343241254798ea681197bf88", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 580838, "upload_time": "2015-12-03T06:45:58", "url": "https://files.pythonhosted.org/packages/84/62/e21b32100538a3df582012d8d1e7bef2047ad37c28cf4f346d2f58dd11cb/django-maja-newsletter-0.6.0.tar.gz" } ] }