Sending Bulk Emails - Step by Step
Author: Shaurya Sharma
This guide walks you through sending bulk emails using the Email Service.
Prerequisites
-
Run the Flask Server
- Make sure you have installed all required Python packages (e.g.,
Flask
,pymongo
,brevo-python
,jinja2
,requests
,python-dotenv
,premailer
). - Ensure you have a proper
.env
file containingMONGODB_URI
,MONGODB_DB_EMAIL_SERVICE
,BREVO_API_KEY
,BREVO_SENDER_EMAIL
, andBREVO_SENDER_NAME
. - Start the server, typically with:
python app.py
- The server should be running on the configured port (default is
5001
in the code).
- Make sure you have installed all required Python packages (e.g.,
-
Confirm Your Topic Setup
- Before sending an email, you need a valid topic in your database (
topics
collection). - Each topic typically references a template.
- If your topic supports sub-options (e.g., countries), ensure corresponding
reports
documents exist.
- Before sending an email, you need a valid topic in your database (
-
Test the API
- You can use cURL, Postman, or any other REST client to interact with the endpoints.
Sending Bulk Emails
Use the bulk endpoint to send emails to multiple subscribers at once, typically used for daily or weekly distributions.
Step 1: Prepare the Request
- Endpoint:
/send-bulk-emails
- Method:
POST
Step 2: Craft the JSON Body
The exact format depends on your design, but a common example is:
{
"topic_id": "64a888c0aaaabbbbccccddd1"
}
The service will look up all subscriptions
for the given topic_id
, gather those subscriber emails, then send out an email to each of them.
Step 3: Send the Request
Using cURL as an example:
curl -X POST \
http://localhost:5001/send-bulk-emails \
-H "Content-Type: application/json" \
-d '{
"topic_id": "64a888c0aaaabbbbccccddd1"
}'
Step 4: Check the Response
A successful bulk send typically returns:
{
"message": "Bulk email sending started",
"report_id": "64a888c0aaaabbbbccccmmm4"
}
If errors occur partway through sending, the service may continue for other recipients or halt, depending on how error handling is implemented.
Step 5: Verify the Bulk Delivery
- Each email is typically logged in the database (e.g.,
email_reports
collection) with a status of"success"
or"failed"
. - Confirm that multiple recipients have indeed received the email.
Troubleshooting
- Topic or Template Not Found: Ensure
topic_id
is valid and that the topic references an existingtemplate
(if required). - PDF Links Failing: Verify the PDF URLs are correct and publicly accessible.
- Email Not Delivered: Double-check your Brevo API Key, sender email, and that your domain is verified in Brevo.
- Server Errors (500): Inspect the Flask logs or the console output for Python traceback details.