django_aws_ses/README.md

139 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Django AWS SES
*(Badge to be activated upon PyPI release)*
A Django email backend for sending emails via Amazon Simple Email Service (SES).
## Features
- Send emails using AWS SES with optional DKIM signing.
- Handle bounce, complaint, and delivery notifications via SNS webhooks.
- Filter recipients based on bounce/complaint history and domain validation.
- Admin dashboard for SES statistics and verified emails.
- Secure unsubscribe functionality with confirmation step.
## Installation
```bash
pip install django_aws_ses
```
## Requirements
- Python 3.8+
- Django 3.2+
- AWS SES account with verified domains/emails
## Quick Start
1. Install the package:
```bash
pip install django_aws_ses
```
2. Add to `INSTALLED_APPS` in `settings.py`:
```python
INSTALLED_APPS = [
...
'django_aws_ses',
]
```
3. Configure AWS SES settings in `settings.py`:
```python
AWS_SES_ACCESS_KEY_ID = 'your-access-key'
AWS_SES_SECRET_ACCESS_KEY = 'your-secret-key'
AWS_SES_REGION_NAME = 'us-east-1'
AWS_SES_REGION_ENDPOINT = 'email.us-east-1.amazonaws.com'
EMAIL_BACKEND = 'django_aws_ses.backends.SESBackend'
```
4. Apply migrations:
```bash
python manage.py migrate
```
5. Test email sending:
```python
from django.core.mail import send_mail
send_mail('Subject', 'Message', 'from@example.com', ['to@example.com'])
```
## Advanced Setup
### DKIM Signing (Optional)
To enable DKIM for email authentication:
1. Generate a DKIM key pair and configure in AWS SES.
2. Add to `settings.py`:
```python
DKIM_DOMAIN = 'example.com'
DKIM_PRIVATE_KEY = 'your-private-key'
DKIM_SELECTOR = 'ses'
```
### SNS Webhook for Notifications
To handle bounces, complaints, and deliveries:
1. Set up an SNS topic in AWS and subscribe the URL `your-domain.com/aws_ses/bounce/`.
2. Ensure the view is publicly accessible and CSRF-exempt (configured by default).
### Unsubscribe Functionality
- Users receive a secure unsubscribe link (`/aws_ses/unsubscribe/<uuid>/<hash>/`).
- A confirmation page prevents accidental unsubscribes (e.g., by email scanners).
- Re-subscribe option available on the same page.
## Usage
- **Send Emails**: Use Djangos `send_mail` or `EmailMessage` as usual.
- **View Statistics**: Access `/aws_ses/status/` (superuser only) for SES quotas and sending stats.
- **Manage Unsubscribes**: Users can unsubscribe or re-subscribe via the secure link.
## Development
### Running Tests
1. Install test dependencies:
```bash
pip install -r requirements-dev.txt
```
2. Run tests:
```bash
python manage.py test django_aws_ses
```
### Contributing
1. Clone the repo:
```bash
git clone https://git-vault.zeeksgeeks.com/zeeksgeeks/django_aws_ses
```
2. Install dependencies:
```bash
pip install -r requirements.txt
```
3. Create a feature branch and submit a pull request.
## License
MIT License. See [LICENSE](LICENSE) for details.
## Credits
Developed by Ray Jessop. Inspired by [django-ses](https://github.com/django-ses/django-ses).