Email Route Implementation in Coreflux MQTT Broker
Overview
The Email Route implementation in the Coreflux MQTT broker enables sending email notifications triggered by MQTT events. This powerful feature allows you to set up automated email alerts, notifications, and reports based on data flowing through your IoT system.
For practical examples of LOT Routes, check out the Routes examples in the LOT Samples Repository.
Syntax
The basic syntax for defining an Email Route is:
DEFINE ROUTE EmailRouteName AS EMAIL
WITH SERVER "smtp.example.com"
WITH PORT 587
WITH USERNAME "your_email@example.com"
WITH PASSWORD "your_password"
WITH FROM "your_email@example.com"
WITH TLS TRUE
WITH TRIGGER "topic/to/monitor"
WITH RECIPIENTS "recipient1@example.com, recipient2@example.com"
WITH SUBJECT "Alert: {payload.event_type}"
WITH BODY """
Dear Admin,
An important event has occurred:
Event: {payload.event_type}
Device: {payload.device_id}
Time: {payload.timestamp}
Value: {payload.value}
Please check the system.
Regards,
Coreflux Monitoring System
"""
Key Parameters
Parameter | Description | Required |
---|---|---|
SERVER |
SMTP server address | Yes |
PORT |
SMTP server port (usually 587 for TLS, 465 for SSL, or 25) | Yes |
USERNAME |
Email account username | Yes |
PASSWORD |
Email account password | Yes |
FROM |
Sender email address | Yes |
TLS |
Whether to use TLS encryption (TRUE/FALSE) | Yes |
TRIGGER |
MQTT topic that will trigger the email | Yes |
RECIPIENTS |
Comma-separated list of email recipients | Yes |
SUBJECT |
Email subject line (supports variables from payload) | Yes |
BODY |
Email body content (supports variables from payload) | Yes |
Variable Substitution
Both the SUBJECT
and BODY
parameters support variable substitution using payload data. Use curly braces to reference JSON payload values:
{payload.property}
- Access a property from the JSON payload{payload.nested.property}
- Access nested properties{topic}
- The full topic that triggered the email{topic[n]}
- Access specific segments of the topic (0-based index)
Example: Temperature Alert
DEFINE ROUTE TemperatureAlert AS EMAIL
WITH SERVER "smtp.gmail.com"
WITH PORT 587
WITH USERNAME "iot.monitor@example.com"
WITH PASSWORD "app_password_here"
WITH FROM "iot.monitor@example.com"
WITH TLS TRUE
WITH TRIGGER "sensors/temperature/+/hightemp"
WITH RECIPIENTS "admin@example.com, operations@example.com"
WITH SUBJECT "ALERT: High Temperature Detected in {topic[2]}"
WITH BODY """
<html>
<body>
<h2>Temperature Alert</h2>
<p>A high temperature reading has been detected:</p>
<ul>
<li><strong>Location:</strong> {topic[2]}</li>
<li><strong>Temperature:</strong> {payload.temperature}°C</li>
<li><strong>Timestamp:</strong> {payload.timestamp}</li>
<li><strong>Device ID:</strong> {payload.device_id}</li>
</ul>
<p>Please take appropriate action if this temperature exceeds safe operating conditions.</p>
</body>
</html>
"""
In this example, when a temperature sensor publishes to a topic like sensors/temperature/server-room/hightemp
, an email alert will be sent with the location extracted from the topic and details from the payload.
HTML Email Support
The BODY
parameter supports HTML formatting for rich email content. Use triple quotes ("""
) to define multi-line body content with HTML tags.
Security Considerations
- Store credentials securely and use app-specific passwords when supported
- Consider using environment variables or secrets management for passwords
- Use TLS encryption whenever possible
- Restrict the permissions of the email account used for sending
- Be cautious with the information included in email bodies to prevent data leakage
Implementation Notes
- The Email Route requires a valid SMTP server and credentials
- Test your email setup with non-critical notifications first
- Add appropriate error handling in your system for failed email deliveries
- Consider rate limiting to prevent excessive emails during event storms
The Email Route in Coreflux MQTT Broker provides a direct way to bridge your IoT system with email notifications, enabling timely alerts and reports based on your IoT data.