This is a showcase of a newsletter system I built with Django. It covers the full journey from signing up to creating and sending campaigns, while keeping the experience simple for subscribers and site owners.
- Let visitors subscribe, confirm their email, and unsubscribe easily.
- Manage newsletters for more than one website from the same Django project.
- Create, preview, schedule, and send email campaigns from Django Admin.
- Add reusable email designs and featured images.
- Show subscriber and campaign activity in a clear Admin dashboard.
- Keep delivery failures, retries, and privacy tools manageable behind the scenes.
The signup flow includes email confirmation, spam protection, secure links, and sensible rate limits. It does not keep raw visitor IP addresses, and subscriber data can be removed through the Admin when needed.
Campaign delivery stays disabled until the email provider and sender details are configured.
This is an implementation showcase, not a complete app you can run on its own. It contains the newsletter code, database migrations, templates, styles, tests, and documentation. The surrounding Django application is not included.
The example website names, domains, and email addresses are fictional. If you want to adapt the code for another project, you will need to connect it to that project's settings, templates, URLs, and site configuration.
The project uses Django, PostgreSQL, Pillow, Bleach, django-post-office, and django-otp. Mailtrap handles transactional and campaign email delivery.
More detail is available in the documentation:
- How the newsletter works
- Campaign delivery
- Email templates
- Featured images
- Admin dashboard
- Technical integration notes
- Tests
Start with .env.example if you are adapting the code. Keep delivery disabled until the sender, email provider, site settings, and templates have been checked.
Licensed under the MIT License.