example.com
✓ VerifiedDomain authentication
- SPF
- ✓ Confirmed
- DKIM
- ✓ Confirmed
- DMARC
- ✓ Confirmed
Your dashboard provides the DNS records for each domain.
Secure, encrypted, and privacy-guaranteed email service. The best API to reach humans instead of spam folders. Power your growth with WazobiaMail today.
| Domain | Delivered | Bounced | Failed |
|---|---|---|---|
| gmail.com | 9,000 | 120 | 0 |
| outlook.com | 2,000 | 30 | 0 |
| example.net | 1,312 | 18 | 0 |
Delivered, bounced and failed recipients by domain.
| Day | Emails sent |
|---|---|
| Sunday | 1,240 |
| Monday | 1,680 |
| Tuesday | 1,420 |
| Wednesday | 2,120 |
| Thursday | 1,760 |
| Friday | 1,940 |
| Saturday | 2,320 |
| Message | Recipient | Time | Status |
|---|---|---|---|
| Your order is confirmedorders@example.com | ada@example.net | 10:42 AM | ✓ Delivered |
| Welcome to the team, Tobihello@example.com | tobi@example.net | 10:38 AM | ✓ Delivered |
| Your account verification codeaccounts@example.com | sam@example.net | 10:31 AM | ✓ Delivered |
YOUR NAME. YOUR DOMAIN.
Your business identity, ready for email.
Domain authentication
Your dashboard provides the DNS records for each domain.
Domain authentication
Your dashboard provides the DNS records for each domain.
Follow the records in your dashboard to set up your business email.
Explore custom-domain email ↗AN INBOX FOR YOUR PEOPLE
Professional addresses for your team.
ada@example.com
support@example.com
orders@example.com
Read and reply in webmail, or connect a compatible email app with IMAP and SMTP.
Explore business mailboxes ↗A closer look
Watch the WazobiaMail product showcase.
Send an email straight to your inbox.
POST /api/v1/sending/messages · X-API-Key
{
"to": ["someone@example.com"],
"content": {
"from": "Your Brand <hello@yourbrand.com>",
"subject": "A good place to start.",
"htmlBody": "<p>Hello from your brand.</p>"
}
} Illustrative request · keep your API key on your server.
Built for the way you use email
Individuals who need their own address. Businesses that need staff inboxes. Developers who send from apps. Marketers who keep an audience informed. All of them tired of spam folders, missing analytics and overpriced subscriptions.
For businesses and teams
Staff using personal addresses makes your business look inconsistent and replies get lost.
Create an inbox for each staff member plus sales@ and support@. Customers see your brand and know where to reply.
ada@yourbusiness.com
Set up your team email ↗For developers and programmers
A delayed login code or missing receipt becomes your support problem. Other providers start at $20/month before you send one message.
Send from your app through HTTP or SMTP. Pay per 1,000 recipients from ₦250 / $0.50. Manage keys, domains and delivery activity in one place.
notifications@yourapp.com
Connect your application ↗For marketers and agencies
Sending to a few thousand contacts should not cost a monthly enterprise plan.
Send branded updates and campaigns to an opted-in audience on your own domain. Choose sending capacity for your volume, with credits that never expire.
news@yourbrand.com
Plan your email sending ↗For professionals and independent businesses
Sites reject generic addresses. Recruiters and clients take Gmail less seriously. Your name deserves its own domain.
Get you@yourname.com in minutes and receive messages in your own inbox. Keep your identity as your work grows.
you@yourname.com
Create your professional inbox ↗Give your messages a better chance
When a receipt or login code disappears into spam, people lose time and trust. Start with an authenticated domain, then check your sending activity when something needs attention.
Set up your sending domain ↗Authentication helps email avoid spam. Placement also depends on your reputation, content and the receiving service. No email provider can guarantee every message reaches the inbox.
For the builders.
And the businesses they build.
02A place for every message
Keep signups moving, reply to customers and give your team a professional address.
A missed login code can stop a signup. Send receipts, password resets and notifications from your backend with HTTP or SMTP.
Use you@yourname.com for your work, business enquiries or services that ask for a domain-based address.
Give every staff member an inbox on your business domain. Receive customer replies and send from an address people recognise.
For developers · One request from your backend
A signup needs its login code. An order needs its receipt. Send both from your backend with one HTTP request.
Use HTTP for new integrations or authenticated SMTP for tools you already use. Keep keys out of browser code and public repositories.
Follow the quickstart ↗A successful response means accepted for sending. Check delivery activity to see what happens next.
curl -X POST https://app.wazobiamail.com/api/v1/sending/messages \
-H 'Content-Type: application/json' \
-H "X-API-Key: $WAZOBIA_API_KEY" \
-d '{
"to": [
"you@example.com"
],
"content": {
"from": "Your Brand <hello@yourbrand.com>",
"subject": "Welcome to Your Brand",
"htmlBody": "<p>Your account is ready. Welcome aboard!</p>"
}
}'// Node.js 18+ · run on your server
const response = await fetch('https://app.wazobiamail.com/api/v1/sending/messages', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': process.env.WAZOBIA_API_KEY
},
body: JSON.stringify({
"to": [
"you@example.com"
],
"content": {
"from": "Your Brand <hello@yourbrand.com>",
"subject": "Welcome to Your Brand",
"htmlBody": "<p>Your account is ready. Welcome aboard!</p>"
}
})
});
const result = await response.json();
if (!response.ok || result.success !== true) throw new Error(result.message || 'Send failed');
console.log(result);// Node.js 18+ · run on your server
const key = process.env.WAZOBIA_API_KEY;
if (!key) throw new Error('Set WAZOBIA_API_KEY');
const message = {
"to": [
"you@example.com"
],
"content": {
"from": "Your Brand <hello@yourbrand.com>",
"subject": "Welcome to Your Brand",
"htmlBody": "<p>Your account is ready. Welcome aboard!</p>"
}
};
const response = await fetch('https://app.wazobiamail.com/api/v1/sending/messages', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-API-Key': key },
body: JSON.stringify(message)
});
const result = await response.json();
if (!response.ok || result.success !== true) throw new Error(result.message || 'Send failed');
console.log(result);<?php
// Requires the PHP cURL extension.
$key = getenv('WAZOBIA_API_KEY');
if (!$key) throw new RuntimeException('Set WAZOBIA_API_KEY');
$message = json_decode('{"to":["you@example.com"],"content":{"from":"Your Brand <hello@yourbrand.com>","subject":"Welcome to Your Brand","htmlBody":"<p>Your account is ready. Welcome aboard!</p>"}}', true, 512, JSON_THROW_ON_ERROR);
$curl = curl_init('https://app.wazobiamail.com/api/v1/sending/messages');
curl_setopt_array($curl, [
CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'X-API-Key: ' . $key],
CURLOPT_POSTFIELDS => json_encode($message, JSON_THROW_ON_ERROR)
]);
$body = curl_exec($curl);
if ($body === false) throw new RuntimeException(curl_error($curl));
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
$result = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
if ($status >= 300 || ($result['success'] ?? false) !== true) {
throw new RuntimeException($result['message'] ?? 'Send failed');
}
print_r($result);package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
"time"
)
func main() {
key := os.Getenv("WAZOBIA_API_KEY")
if key == "" { panic("Set WAZOBIA_API_KEY") }
payload := []byte(`{
"to": [
"you@example.com"
],
"content": {
"from": "Your Brand <hello@yourbrand.com>",
"subject": "Welcome to Your Brand",
"htmlBody": "<p>Your account is ready. Welcome aboard!</p>"
}
}`)
req, err := http.NewRequest("POST", "https://app.wazobiamail.com/api/v1/sending/messages", bytes.NewReader(payload))
if err != nil { panic(err) }
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-API-Key", key)
client := &http.Client{Timeout: 30 * time.Second}
res, err := client.Do(req)
if err != nil { panic(err) }
defer res.Body.Close()
var result map[string]any
if err := json.NewDecoder(res.Body).Decode(&result); err != nil { panic(err) }
if res.StatusCode >= 300 || result["success"] != true { panic(fmt.Sprint(result)) }
fmt.Println(result)
}// Cargo.toml: reqwest = { version = "0.12", features = ["blocking", "json"] }
// serde_json = "1"
use reqwest::blocking::Client;
use serde_json::{json, Value};
use std::{env, time::Duration};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let key = env::var("WAZOBIA_API_KEY")?;
let message = json!({
"to": [
"you@example.com"
],
"content": {
"from": "Your Brand <hello@yourbrand.com>",
"subject": "Welcome to Your Brand",
"htmlBody": "<p>Your account is ready. Welcome aboard!</p>"
}
});
let result: Value = Client::builder().timeout(Duration::from_secs(30)).build()?
.post("https://app.wazobiamail.com/api/v1/sending/messages")
.header("X-API-Key", key)
.json(&message).send()?.error_for_status()?.json()?;
if result["success"] != true { return Err(format!("Send failed: {result}").into()); }
println!("{result}");
Ok(())
}# Python 3 · standard library only
import json
import os
import urllib.request
message = {
"to": [
"you@example.com"
],
"content": {
"from": "Your Brand <hello@yourbrand.com>",
"subject": "Welcome to Your Brand",
"htmlBody": "<p>Your account is ready. Welcome aboard!</p>"
}
}
request = urllib.request.Request(
'https://app.wazobiamail.com/api/v1/sending/messages',
data=json.dumps(message).encode('utf-8'),
headers={
'Content-Type': 'application/json',
'X-API-Key': os.environ['WAZOBIA_API_KEY'],
},
method='POST',
)
# HTTP errors raise urllib.error.HTTPError.
with urllib.request.urlopen(request, timeout=30) as response:
result = json.load(response)
if result.get('success') is not True:
raise RuntimeError(result.get('message', 'Send failed'))
print(result)// .NET 6+ · run on your server
using System.Net.Http.Json;
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key",
Environment.GetEnvironmentVariable("WAZOBIA_API_KEY"));
var response = await client.PostAsJsonAsync(
"https://app.wazobiamail.com/api/v1/sending/messages",
new {
to = new[] { "you@example.com" },
content = new {
from = "Your Brand <hello@yourbrand.com>",
subject = "Welcome to Your Brand",
htmlBody = "<p>Your account is ready. Welcome aboard!</p>"
}
});
response.EnsureSuccessStatusCode();// Java 11+ · run on your server
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
var json = """
{
"to": ["you@example.com"],
"content": {
"from": "Your Brand <hello@yourbrand.com>",
"subject": "Welcome to Your Brand",
"htmlBody": "<p>Your account is ready. Welcome aboard!</p>"
}
}""";
var request = HttpRequest.newBuilder()
.uri(URI.create("https://app.wazobiamail.com/api/v1/sending/messages"))
.header("Content-Type", "application/json")
.header("X-API-Key", System.getenv("WAZOBIA_API_KEY"))
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
var response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() / 100 != 2) throw new RuntimeException("Send failed: " + response.body());Your domain. Your team. A proper home for your email, with hosted mailboxes and the mail clients you already use.
Explore business emailUse your own domain so every conversation carries your name.
Create mailboxes and manage credentials from one workspace.
Connect through IMAP and authenticated SMTP.
Create a mailbox on your verified domain, then read, write and reply in your browser. Sign in with your mailbox address and mailbox password.
Open webmail
Choose your verified domain and create an address for yourself or your team.
Launch webmail from the dashboard or sign in directly with your mailbox credentials.
Read incoming messages, send replies and compose new email from your own domain.
Find the right fit
Connect your domain, send from your applications, and open your hosted inbox in WazobiaMail Webmail.
Business email on your own domain, team inboxes, and email sending for your applications.
Businesses and teams that need staff inboxes. Marketers and agencies sending campaigns from a client domain. Developers sending receipts and login codes. Professionals who want an address on their own name.
Read, write and reply to your business email in your browser.
Teams and professionals with a hosted WazobiaMail mailbox on their own domain.
WazobiaMail is an email platform from Bonifade Technologies for developers, businesses and agencies. It brings email sending, custom domains and hosted mailboxes into one workspace.
Yes. Use the HTTP sending API from your server, or connect an application that supports authenticated SMTP. Your dashboard provides the credentials and domain settings for your account.
Yes. Add a domain in your dashboard and publish the DNS records provided for it. Domain verification, SPF, DKIM and DMARC help receiving servers identify your messages.
You can have both. Hosted mailboxes receive mail on your domain and connect to IMAP-capable mail apps. The sending API and SMTP connect your applications to outgoing email. Choose a plan with the mailbox and sending limits you need.
Sending 4,000 emails costs ₦1,000 or $2. The minimum credit purchase is ₦2,000 or $3. One email sent to one recipient uses one credit, so a message sent to three people uses three credits. Check the current price before paying.
Yes. Purchased sending credits stay in your account until you use them. Your plan’s included sending allowance resets monthly. The included allowance is used before purchased credits.
No. Free and pay-as-you-go cover sending only. Choose a plan that includes receiving if you want hosted inboxes such as hello@yourbusiness.com. The pricing table shows each plan’s mailbox and storage limits.
Open Test an email in the homepage walkthrough, enter an address you control, add a subject and message, and choose Send test email. You can use plain or rich text. The public sample allows three attempts, with up to three recipients each, and has a shared daily limit. To test your own verified domain, use your sending API key in the integrations guide.
A plan for your next chapter
Try email sending through the platform API or SMTP. No receiving or hosted inboxes.
Best for Individuals trying email sending
Total for the selected billing term.
Choose Free3,000 emails / month
Professional sending and receiving for individuals and small businesses.
Best for Individuals, freelancers and small businesses
Total for the selected billing term.
Choose Starter10,000 emails / month
Higher sending volume and more mailboxes for busy teams.
Best for Busy teams and applications sending regularly
Total for the selected billing term.
Choose Business40,000 emails / month
Prices and allowances come from the current active plans. Confirm your selection before payment.
Pay as you go
Choose your email volume or budget and see the credit cost. If you need a paid plan, select one with your credits at checkout.
Your selected plan determines workspace features and included allowances. Unused purchased credits carry over.
Buy 6,000 credits ↗Start pay as you go ↗Find your sending budget
$0.5
per 1,000 emails
Top up $3 for 6,000 email credits. Unused credits stay in your account.
Ideas worth opening
Your name belongs in your email
Custom domain inboxes for you and your team. Email sending for your apps.