Powerful Email API

Simple, reliable REST API to send emails from any application. Get started in minutes with comprehensive documentation and code examples.

RESTful API

Clean, modern REST API with JSON responses

Full Documentation

Comprehensive guides and API reference

Quick Integration

Send your first email in under 5 minutes

Secure Authentication

API key authentication with HTTPS encryption

Quick Start Code Examples

Get started quickly with code examples in your favorite programming language

Send Your First Email

Here's how to send an email using our API with cURL, PHP, Python, and Node.js:

cURL
# Send a simple email curl -X POST https://api.dingomail.com.au/api/v5/email \ -H "Content-Type: application/json" \ -d '{ "key-id": "YOUR_KEY_ID", "key-secret": "YOUR_KEY_SECRET", "SenderEmail": "sender@yourdomain.com", "Recipient": "recipient@example.com", "SenderName": "Your Name", "Subject": "Hello from Dingo Mail", "Text": "Welcome! Your email content here", "Html": "<h1>Welcome!</h1><p>Your email content here</p>" }'
PHP
// Send email using PHP $ch = curl_init('https://api.dingomail.com.au/api/v5/email'); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json' ]); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([ 'key-id' => 'YOUR_KEY_ID', 'key-secret' => 'YOUR_KEY_SECRET', 'SenderEmail' => 'sender@yourdomain.com', 'Recipient' => 'recipient@example.com', 'SenderName' => 'Your Name', 'Subject' => 'Hello from Dingo Mail', 'Text' => 'Welcome! Your email content here', 'Html' => '<h1>Welcome!</h1>' ])); $response = curl_exec($ch);
Python
# Send email using Python requests import requests url = "https://api.dingomail.com.au/api/v5/email" headers = { "Content-Type": "application/json" } data = { "key-id": "YOUR_KEY_ID", "key-secret": "YOUR_KEY_SECRET", "SenderEmail": "sender@yourdomain.com", "Recipient": "recipient@example.com", "SenderName": "Your Name", "Subject": "Hello from Dingo Mail", "Text": "Welcome! Your email content here", "Html": "<h1>Welcome!</h1>" } response = requests.post(url, json=data, headers=headers) print(response.json())
Node.js
// Send email using Node.js with axios const axios = require('axios'); const emailData = { "key-id": "YOUR_KEY_ID", "key-secret": "YOUR_KEY_SECRET", "SenderEmail": "sender@yourdomain.com", "Recipient": "recipient@example.com", "SenderName": "Your Name", "Subject": "Hello from Dingo Mail", "Text": "Welcome! Your email content here", "Html": "<h1>Welcome!</h1><p>Your email content here</p>" }; const response = await axios.post( 'https://api.dingomail.com.au/api/v5/email', emailData, { headers: { 'Content-Type': 'application/json' } } ); console.log(response.data);

API Features

Everything you need to build sophisticated email functionality into your application

Transactional Emails

Send password resets, receipts, notifications, and more with guaranteed delivery

Bulk Sending

Send to thousands of recipients with a single API call using contact lists and templates

Templates

Create reusable email templates with variable substitution and conditional content

Attachments

Send files, documents, and PDFs with your emails via base64 encoding or URLs

Custom Headers

Add custom email headers for advanced tracking and routing requirements

Sandbox Mode

Test your integration without sending real emails using our sandbox environment

Enterprise-Grade Bulk Email Sending

Send millions of personalized emails with advanced features designed for high-volume senders

Bulk Email Features

Send up to 50,000 emails per API call
  • Batch processing with intelligent rate limiting
  • Automatic retry logic for failed sends
  • Progress tracking via webhook callbacks
Dynamic Template Variables
  • Personalize each email with recipient-specific data
  • Supports nested variables and conditional content
  • Handlebars-style syntax: {{firstName}}, {{orderTotal}}
List Management Integration
  • Import contacts via CSV (up to 1M rows)
  • API-driven list updates (add/remove/update)
  • Automatic duplicate detection and suppression
  • Unsubscribe list management (automatic exclusion)
Advanced Segmentation
  • Send to filtered segments within lists
  • Dynamic recipient selection via API parameters
  • A/B testing support (split send to different segments)
Delivery Rate Optimization
  • Intelligent throttling to respect ISP limits
  • Automatic IP rotation for high-volume sends
  • Reputation-based sending from dedicated IPs
Bulk Send Analytics
  • Real-time delivery tracking dashboard
  • Per-campaign open and click rates
  • Bounce and complaint monitoring
  • Export analytics to CSV or via API

Best Practices for High-Volume Sending

Warm Up Your Sending Domain
  • Start with low volumes (500-1000/day)
  • Gradually increase over 2-4 weeks
  • Monitor bounce and complaint rates
  • We provide automated warm-up schedules
Maintain Clean Lists
  • Remove hard bounces immediately
  • Suppress complainers and unsubscribes
  • Re-engage inactive subscribers before removing
  • Validate email addresses before sending
Respect Rate Limits
  • Gmail: 500-1000/hour per domain recommended
  • Microsoft: 1000-2000/hour per domain
  • We handle throttling automatically based on recipient domain
Monitor Your Sender Reputation
  • Check your domain reputation weekly
  • Maintain <0.1% complaint rate
  • Keep bounce rate below 5%
  • Use dedicated IPs for >100k emails/month
Segment Your Campaigns
  • Send different content to engaged vs. inactive users
  • Test subject lines on small segments first
  • Personalize content based on user behavior
Optimize Send Times
  • Australian recipients: 9-11am AEST for best open rates
  • B2B: Tuesday-Thursday mornings
  • B2C: Weekends for e-commerce
  • We provide send-time optimization analytics

Common Bulk Email Use Cases

Marketing Campaigns

Monthly newsletters, product announcements, promotional offers, event invitations

Features: Template variables, A/B testing, analytics

Transactional at Scale

Order confirmations, shipping notifications, invoice delivery, password resets

Features: High priority routing, delivery guarantees

Customer Re-Engagement

Win-back campaigns, cart abandonment sequences, subscription renewal reminders

Features: Segmentation, personalization, unsubscribe management

Internal Communications

Company-wide announcements, training materials distribution, policy update notifications

Features: Delivery tracking, read receipts

Reporting & Alerts

Daily/weekly automated reports, system monitoring alerts, compliance notifications

Features: Scheduled sending, templating, attachments

Real-Time Webhooks

Receive instant notifications when email events occur. Configure webhooks to receive real-time data about deliveries, opens, clicks, bounces, and spam complaints.

  • Delivery notifications when emails are successfully delivered
  • Open tracking events when recipients open your emails
  • Click tracking for every link clicked in your emails
  • Bounce notifications for failed deliveries
  • Spam complaint alerts to protect your reputation
Example Webhook Payload
{ "event": "delivered", "email": "recipient@example.com", "timestamp": "2025-01-15T10:30:00Z", "message_id": "abc123def456", "subject": "Welcome to our service", "metadata": { "user_id": "12345", "campaign": "welcome" } }

Configure webhook endpoints in your dashboard to receive real-time updates about your email delivery.

Receiving Emails (Inbound Email Handling)

Accept and process incoming emails via webhooks for support tickets, reply tracking, and email-based workflows

How Inbound Email Works

  1. Configure your domain's MX records to point to DingoMail
  2. Set up webhook URL in your DingoMail dashboard
  3. We parse incoming emails and POST to your webhook
  4. Your application receives structured JSON with email data
Inbound Email Features
  • Attachment storage (up to 25MB per attachment, 50MB total)
  • S3-hosted attachments with direct download URLs
  • Email parsing (HTML, plain text, multipart MIME)
  • Inline image handling (cid: references rewritten to S3 URLs)
  • Custom domain support (receive@yourdomain.com)
  • Reply-to parsing (EmailReplyParser integration)

Inbound Email Webhook Payload

When an inbound email is received, we POST to your configured webhook URL with the following payload:

POST https://your-app.com.au/webhooks/inbound-email { "EMAIL_ID": "67890abcdef123456", "FROM": "customer@example.com", "TO": "support@yourbusiness.com.au", "SUBJECT": "Question about my order", "TIMESTAMP": 1706425935, "TEXT": "Plain text content of the email...", "HTML": "<p>HTML content of the email...</p>", "ATTACHMENTS": [ { "filename": "receipt.pdf", "content_type": "application/pdf", "size": 45320, "url": "https://dingo-attachments.s3.amazonaws.com/...", "content_id": "", "is_inline": false } ] }

Inbound Email Use Cases

Support Ticket Systems

Convert emails to support tickets

Reply Tracking

Track customer replies to marketing campaigns

Email-to-SMS Gateway

Forward emails as SMS messages

Document Processing

Extract attachments from emails for processing

Webhook Events Overview

Configure webhook URLs in your dashboard to receive real-time POST requests when events occur

Available Webhook Events

Inbound Email Events

Triggered when an email is received at your configured domains. Includes full email content, attachments, and sender details.

Use for: Support tickets, reply tracking, email-to-SMS forwarding

AVAILABLE NOW
Delivery Status Events

Track when emails are successfully delivered to recipient servers. Useful for confirming message delivery and maintaining audit logs.

COMING SOON
Bounce Events

Notification when emails fail to deliver (hard or soft bounces). Use to maintain clean email lists and suppress invalid addresses.

COMING SOON
Engagement Events

Opens: Track when recipients open your emails
Clicks: Monitor link clicks within email content

COMING SOON
Complaint Events

Alerts when recipients mark emails as spam. Critical for maintaining sender reputation and list hygiene.

COMING SOON
Webhook Best Practices
  • Always use HTTPS endpoints for webhook URLs
  • Implement signature verification for security
  • Handle duplicate events with idempotency keys
  • Return 200 OK status quickly, process events asynchronously
  • Use retry logic for failed webhook processing
  • Test webhooks using ngrok for local development

Email Attachments - Complete Guide

Send and receive files with your emails using multiple methods for maximum flexibility

Sending Attachments

Method 1: Base64 Encoding (Recommended for small files <5MB)

Encode your file as base64 and include it directly in the API request:

POST /v5/email.php { "sender": "documents@yourbusiness.com.au", "recipient": "customer@example.com", "subject": "Your invoice #12345", "html": "<p>Please find your invoice attached.</p>", "attachments": [ { "filename": "invoice-12345.pdf", "content_type": "application/pdf", "content": "JVBERi0xLjQKJeLjz9MKNCAwIG9iago8PC9GaWx0ZXIvRm..." } ] }
Method 2: URL Reference (Recommended for large files >5MB)

Provide a URL and we'll download the file for you:

POST /v5/email.php { "sender": "reports@yourbusiness.com.au", "recipient": "customer@example.com", "subject": "Your monthly report", "html": "<p>Please find your report attached.</p>", "attachments": [ { "filename": "report-january-2026.pdf", "url": "https://yourbusiness.com.au/api/reports/generate/12345?token=abc123" } ] }

Note: We download the file from your URL, detect content type automatically (or you can specify), and attach it to the email. File must be accessible (public or with authentication token in URL).

Method 3: Pre-Upload to DingoMail (Best for large files)

Upload the file first, then reference it by attachment ID:

Step 1: Upload File
curl -X POST https://dingo.dingomail.com.au/api/v5/upload.php \ -H "X-API-Key: your_api_key" \ -F "file=@/path/to/large-file.pdf" # Response: { "error": "", "attachment_id": "att_xyz789", "filename": "large-file.pdf", "size": 15728640, "expires": "2026-01-29T14:32:15+10:00" }
Step 2: Reference in Email
POST /v5/email.php { "sender": "files@yourbusiness.com.au", "recipient": "customer@example.com", "subject": "Large file delivery", "html": "<p>Your file is attached.</p>", "attachment_ids": ["att_xyz789"] }

Attachment Limits & Best Practices

File Size Limits
  • Single attachment: 25MB maximum
  • Total attachments per email: 50MB maximum
  • Recommended: Keep under 10MB for best deliverability
  • Large files: Use cloud storage links instead (Google Drive, Dropbox, AWS S3)
Supported File Types
  • Documents: PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX, TXT, RTF
  • Images: JPG, PNG, GIF, BMP, SVG, WEBP
  • Archives: ZIP, RAR, 7Z, TAR, GZ
  • Other: CSV, JSON, XML, ICS (calendar), VCF (contacts)
Best Practices
  • Compress large files - Use ZIP compression to reduce size
  • Optimize images - Use image compression before attaching
  • Use descriptive filenames - "Invoice-12345-Jan2026.pdf" not "document.pdf"
  • Consider alternatives - For files >10MB, use cloud storage links
Blocked File Types (for security)

Executables: EXE, BAT, CMD, COM, SCR | Scripts: JS, VBS, WSF, JAR

These can be sent if inside a password-protected ZIP (include password in email body)

Inline Images (Embedded in HTML)

Use Content-ID (CID) attachments to embed images directly in your HTML email:

JSON Example
POST /v5/email.php { "sender": "marketing@yourbusiness.com.au", "recipient": "customer@example.com", "subject": "Our new product!", "html": "<html><body><p>Check out our new widget:</p><img src='cid:product-image'></body></html>", "inline_attachments": [ { "cid": "product-image", "filename": "widget-photo.jpg", "content_type": "image/jpeg", "content": "/9j/4AAQSkZJRgABAQEAYABgAAD..." } ] }
When to Use Inline vs. Hosted Images
Inline (CID)

Email clients show images even if "load images" is disabled. Best for transactional emails where reliability is critical.

Hosted (URL)

Smaller email size, can track image loads. Best for marketing emails where tracking is important.

Developer Use Cases & Examples

Real-world examples showing how to integrate DingoMail into your applications

Use Case 1: E-commerce Order Notifications

Send order confirmations when customers place orders on your e-commerce site.

PHP Example
// When customer places order function sendOrderConfirmation($order) { $api_key = getenv('DINGOMAIL_API_KEY'); $data = [ 'key-id' => $api_key, 'SenderEmail' => 'orders@myshop.com.au', 'Recipient' => $order['customer_email'], 'Subject' => 'Order Confirmation #' . $order['order_number'], 'Html' => '<h1>Thank you for your order!</h1> <p>Order #' . $order['order_number'] . '</p> <p>Total: $' . $order['total'] . '</p>', 'Text' => 'Thank you for your order #' . $order['order_number'] ]; $ch = curl_init('https://api.dingomail.com.au/api/v5/email'); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json' ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); return json_decode($response, true); }
Key Features Used
  • Transactional sending: Immediate delivery of order confirmations
  • Dynamic content: Include order number, total, customer name
  • HTML + Text: Provide both formats for better compatibility
  • Reliable delivery: Critical business emails with guaranteed delivery
Pro Tip

Store the email ID returned by the API in your order database to track delivery status and troubleshoot issues.

Use Case 2: SaaS Application Password Reset

Send secure password reset emails with time-limited tokens.

Node.js Example
// Password reset email with token async function sendPasswordReset(user, resetToken) { const resetUrl = `https://myapp.com.au/reset?token=${resetToken}`; const response = await fetch('https://api.dingomail.com.au/api/v5/email', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ 'key-id': process.env.DINGOMAIL_API_KEY, 'SenderEmail': 'noreply@myapp.com.au', 'Recipient': user.email, 'Subject': 'Reset your password', 'Html': ` <h2>Hi ${user.firstName},</h2> <p>You requested a password reset.</p> <p><a href="${resetUrl}" style="background: #5777ba; color: white; padding: 12px 30px; text-decoration: none; border-radius: 5px; display: inline-block;"> Reset Password</a></p> <p>This link expires in 1 hour.</p> <p>If you didn't request this, ignore this email.</p> `, 'Text': `Hi ${user.firstName}, reset your password: ${resetUrl}` }) }); return await response.json(); }
Security Best Practices
  • Time-limited tokens: Set expiry time (1 hour recommended)
  • Single-use tokens: Invalidate after password is reset
  • Plain text fallback: Always include text version with URL
  • Clear instructions: Tell users what to do if they didn't request it
Security Note

Never include the actual password in the email. Always use secure, time-limited reset tokens.

Use Case 3: Marketing Campaign with Segmentation

Send personalized marketing emails to segmented user lists.

Python Example
# Send segmented marketing campaign import requests import os def send_campaign_to_segment(segment_name): api_key = os.environ['DINGOMAIL_API_KEY'] # Get recipients from database recipients = db.users.find({ 'segment': segment_name, 'unsubscribed': False, 'email_valid': True }) # Send personalized emails results = [] for user in recipients: html_content = f""" <h2>Hi {user['first_name']},</h2> <p>Check out our new features!</p> <p>Your account: {user['account_type']}</p> <p><a href="https://myapp.com.au/features"> View Features</a></p> """ response = requests.post( 'https://api.dingomail.com.au/api/v5/email', headers={'Content-Type': 'application/json'}, json={ 'key-id': api_key, 'SenderEmail': 'marketing@myapp.com.au', 'Recipient': user['email'], 'Subject': f"Hi {user['first_name']}, new features!", 'Html': html_content } ) results.append(response.json()) return results
Campaign Best Practices
  • Personalization: Use recipient's name and account details
  • Segmentation: Send different content to different user groups
  • List hygiene: Exclude unsubscribed and invalid emails
  • Rate limiting: Respect ISP limits (we handle this automatically)
Track Performance

Use our analytics dashboard to track open rates, click rates, and optimize future campaigns.

Use Case 4: Automated Reports with Attachments

Send daily/weekly reports with CSV and PDF attachments.

PHP Example
// Daily report generation and delivery function sendDailyReport($recipient_email, $total_sales) { $api_key = getenv('DINGOMAIL_API_KEY'); // Generate CSV report $csv_data = generateSalesReport(date('Y-m-d')); $csv_base64 = base64_encode($csv_data); // Generate PDF chart $pdf_data = generateSalesChart(date('Y-m-d')); $pdf_base64 = base64_encode($pdf_data); $data = [ 'key-id' => $api_key, 'SenderEmail' => 'reports@mycompany.com.au', 'Recipient' => $recipient_email, 'Subject' => 'Daily Sales Report - ' . date('F d, Y'), 'Html' => ' <h2>Daily Sales Report</h2> <p>Total Sales: $' . number_format($total_sales, 2) . '</p> <p>Reports attached.</p> ', 'Attachments' => [ [ 'filename' => 'sales-data-' . date('Y-m-d') . '.csv', 'content_type' => 'text/csv', 'content' => $csv_base64 ], [ 'filename' => 'sales-chart-' . date('Y-m-d') . '.pdf', 'content_type' => 'application/pdf', 'content' => $pdf_base64 ] ] ]; // Send via API $ch = curl_init('https://api.dingomail.com.au/api/v5/email'); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json' ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); return json_decode(curl_exec($ch), true); }
Automation Tips
  • Scheduled sending: Use cron jobs or task schedulers
  • Multiple attachments: Include CSV for data, PDF for visualization
  • Consistent naming: Include date in filename for easy organization
  • Error handling: Log failures and retry if needed
Alternative: Large Files

For reports larger than 10MB, upload to S3 and include download links instead of attachments.

Use Case 5: Processing Inbound Emails (Support Tickets)

Convert incoming emails into support tickets in your system.

Node.js Webhook Handler
// Express.js webhook endpoint const express = require('express'); const app = express(); app.use(express.json()); app.post('/webhooks/inbound-email', async (req, res) => { const email = req.body; // Create support ticket const ticket = await db.tickets.create({ subject: email.SUBJECT, customer_email: email.FROM, message: email.TEXT, html_message: email.HTML, received_at: new Date(email.TIMESTAMP * 1000), status: 'open' }); // Download attachments if any if (email.ATTACHMENTS && email.ATTACHMENTS.length > 0) { for (const attachment of email.ATTACHMENTS) { // Download from S3 URL const response = await fetch(attachment.url); const buffer = await response.arrayBuffer(); // Store attachment await db.attachments.create({ ticket_id: ticket.id, filename: attachment.filename, content_type: attachment.content_type, size: attachment.size, data: buffer }); } } // Send auto-reply await sendAutoReply(email.FROM, ticket.id); // Return 200 OK quickly res.status(200).send('OK'); }); app.listen(3000);
Webhook Implementation Tips
  • Respond quickly: Return 200 OK immediately, process asynchronously
  • Download attachments: S3 URLs expire after 24 hours
  • Idempotency: Handle duplicate webhooks gracefully
  • Error handling: Log failures for debugging
  • Auto-replies: Send confirmation to sender
Testing Webhooks

Use ngrok to test webhooks locally before deploying to production.

Platform Integrations

Popular integrations and plugins for seamless email delivery

WordPress Plugin

Official WordPress plugin for seamless integration with your WordPress site. Send all WordPress emails through Dingo Mail with just a few clicks.

Shopify Integration

Send order confirmations, shipping notifications, and marketing emails directly from your Shopify store with our native integration.

SMTP Support

Use Dingo Mail as your SMTP server for any application. Compatible with all major email clients and applications that support SMTP.

Zapier Integration

Connect Dingo Mail to thousands of apps through Zapier. Automate your email workflows without writing any code.

Custom Integration Services

Need help integrating Dingo Mail into your application or platform? Our team can build custom integrations tailored to your specific requirements.

  • Custom plugin development for your platform
  • API integration consulting and implementation
  • Migration from other email service providers
  • Dedicated technical support during integration
  • Performance optimization and best practices

Ready to Integrate?

Get your API key and start sending emails in minutes

Get API Key View Documentation