Email marketing platform & SMTP server

Your email campaigns, written, sent and delivered

Sparrow Emailing brings together the campaign platform and the SMTP server: drag-and-drop editor, segmentation, automation, transactional sending via API, and real-time tracking of opens, clicks and unsubscribes.

Dedicated SMTP server, trusted IP SPF, DKIM and DMARC configured 24/7 high-availability infrastructure
Campaign — Spring sale
Authenticated sender · valid DKIM
DeYour brand <newsletter@your-domain.com>
Subject🌸 Your spring offers, up to −40%
Spring
Up to −40%
On selected departments, until Sunday
See the offers
48 300sent
99,2 %delivered
32,4 %opens
7,1 %clicks
What you can send

One channel, five ways to reach your contacts

Click a use case to see in detail how Sparrow Emailing sets it up for your business.

Campaigns that reach the inbox

Build your emails by drag and drop, without writing a line of code, then choose exactly who receives them. Segmentation draws on your own data: purchase history, location, recent activity, list membership.

  • Drag-and-drop editor and template library
  • Segmentation by behaviour, data and engagement
  • Content personalised to the recipient's name
  • A/B testing of subject and content before the full send
  • Scheduling for the date and time you choose
  • Compliant unsubscribe link, handled automatically
Scheduled campaign
Segment: customers active in the last 90 days
SubjectYour monthly selection has arrived
New arrivals
This month's selection
Chosen for you, based on your recent purchases
See the selection
12 480recipients
34,8 %opens
8,2 %clicks

The emails your customers actually wait for

Order confirmation, invoice, password reset, verification code: these messages are expected, opened and read. They go out via API or SMTP from your application, in a few hundred milliseconds.

  • Sending via REST API or authenticated SMTP server
  • Templates with variables, driven from your application
  • Queue separate from campaigns: never delayed
  • Attachments: PDF invoices, tickets, purchase orders
  • Webhooks on delivery, open, click, bounce and complaint
  • Searchable log of every message sent
Transactional email
Delivered in 420 ms
SubjectYour order #4521 is confirmed
Track my order
100 %delivered
0,42 slatency
68 %opens

Sequences that work while you sleep

A journey is triggered by an event — signup, purchase, birthday, inactivity — then runs its steps on its own, with delays and conditions you set once and for all.

  • Welcome sequence for every new subscriber
  • Abandoned cart follow-up, with a configurable delay
  • Birthday, join date, contract renewal
  • Re-engagement of contacts who have gone quiet
  • Conditions on open, click or purchase
  • The journey stops by itself once the goal is met
Journey — Abandoned cart
3 steps · active
1 Cart abandoned 1 hour ago → reminder
2 No purchase after 24 hours → −10%
3 Purchase completed → exit the journey
1 840triggers
19 %conversions

An SMTP server of your own, with no provider quota

Your applications — website, ERP, CRM, intranet — send through an authenticated SMTP server, on an IP address whose reputation belongs to you. Your recipients' mailboxes recognise your domain, not a third party's.

  • Dedicated IP address, reputation built for you alone
  • SPF, DKIM and DMARC configured and verified at setup
  • Ports 587 and 465, compatible with every application
  • Gradual warm-up of the new IP
  • Blacklist monitoring with immediate alerts
  • No sending quota imposed by a third-party provider
smtp.sparrowmessage.com
TLS · port 587
220 smtp.sparrowmessage.com ESMTP
EHLO app.yourcompany.com
250-STARTTLS
250 AUTH LOGIN PLAIN
STARTTLS
220 Ready to start TLS
AUTH LOGIN
235 Authentication successful
MAIL FROM:<facture@yourcompany.com>
250 OK
RCPT TO:<client@exemple.com>
250 Accepted
DATA
354 End data with .
250 Queued as 8F2C1A

Knowing what happens to every message

A sent email is not a read email. The dashboard separates what was delivered, opened, clicked, refused or reported — and tells you why, address by address.

  • Delivery, open, click and unsubscribe rates
  • Hard and soft bounces, with the reason for refusal
  • Spam complaints, reported in real time
  • Click map: which link, by whom, at what time
  • Campaign-to-campaign comparison and tracking over time
  • CSV export and webhook delivery to your own tool
Dashboard
Last 30 days
486 200sent
98,7 %delivered
29,4 %opens
6,3 %clicks
0,9 %bounces
0,04 %complaints
Features

Everything you need to send, and to be read

The platform and the sending server in one subscription, with no extra tool to plug in.

Drag-and-drop editor

Build a clean email in minutes, from a template or a blank page. It renders correctly on phone and desktop, with no adjustment on your side.

Contact management

Import your lists from a file or your CRM, deduplicate, segment, and let the platform remove invalid addresses and unsubscribes on its own.

Monitored deliverability

SPF, DKIM and DMARC authentication, IP warm-up, blacklist monitoring: the target is the inbox, not the spam folder.

Automated journeys

Welcome, birthday, abandoned cart, re-engagement: your sequences are triggered by an event and run on their own, with your delays and your conditions.

Real-time analytics

Opens, clicks, bounces, complaints and unsubscribes, campaign by campaign and contact by contact, with CSV export and webhook delivery.

API and SMTP server

A documented REST API and an authenticated SMTP server: your applications send directly, in the language you already use.

Integration

SMTP or API: your application sends in a few lines

No proprietary library to install. SMTP works with what you already use; the REST API is called from any language.

Authentication — a call to POST /api/v1/login with your credentials returns a token (api_token) that you then place in the Authorization: Bearer {api_token} header of every request. One account can hold several applications, each with its own token: statistics stay separate, application by application.
OperationMethodURL
Get a tokenPOSThttps://app.sparrowmessage.com/api/v1/login
Send an emailPOSThttps://app.sparrowmessage.com/api/v1/mail/send/one
Send in bulkPOSThttps://app.sparrowmessage.com/api/v1/mail/send/bulk
SMTP serverSMTPsmtp.sparrowmessage.com — port 587 (TLS) or 465 (SSL)
PHP Python Node.js .NET Java Ruby WordPress Odoo Salesforce HubSpot Shopify PrestaShop WooCommerce Zapier SEMS SEMS Amplitude HR Amplitude HR

1 — Get the token, then send an email.

<?php
$base = 'https://app.sparrowmessage.com/api/v1';

// ── Authentication: keep the token, don't request a new one for every send
$ch = curl_init("$base/login");
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Accept: application/json', 'Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode([
        'email'    => 'you@company.com',
        'password' => 'your-password',
    ]),
]);
$auth = json_decode(curl_exec($ch), true);
curl_close($ch);

if (($auth['code'] ?? '') !== 'OK') {
    throw new RuntimeException($auth['error'] ?? 'Authentication failed');
}
$token = $auth['user']['api_token'];

// ── Single send
$ch = curl_init("$base/mail/send/one");
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Accept: application/json',
        'Content-Type: application/json',
        "Authorization: Bearer $token",
    ],
    CURLOPT_POSTFIELDS     => json_encode([
        'email' => 'client@exemple.com',
        'subject' => 'Your order #4521 is confirmed',
        'html'  => '<p>Thank you for your order.</p>',
    ]),
]);
$msg = json_decode(curl_exec($ch), true);
curl_close($ch);

// $msg['message_id'] identifies the email for tracking

// ── Bulk send: “emails” is an array of addresses
$ch = curl_init("$base/mail/send/bulk");
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Accept: application/json',
        'Content-Type: application/json',
        "Authorization: Bearer $token",
    ],
    CURLOPT_POSTFIELDS     => json_encode([
        'emails' => ['client1@exemple.com', 'client2@exemple.com'],
        'subject'  => 'This month's offers',
        'html'   => '<h1>What's new</h1><p>Discover the selection.</p>',
    ]),
]);
$masse = json_decode(curl_exec($ch), true);
curl_close($ch);

// $masse['mails_error'] lists the rejected addresses, if any

With requests, the most common HTTP library.

import requests

BASE = 'https://app.sparrowmessage.com/api/v1'
HEADERS = {'Accept': 'application/json', 'Content-Type': 'application/json'}

# ── Authentication
auth = requests.post(f'{BASE}/login', headers=HEADERS, json={
    'email': 'you@company.com',
    'password': 'your-password',
}).json()

if auth.get('code') != 'OK':
    raise RuntimeError(auth.get('error', 'Authentication failed'))

token = auth['user']['api_token']
headers = {**HEADERS, 'Authorization': f'Bearer {token}'}

# ── Single send
msg = requests.post(f'{BASE}/mail/send/one', headers=headers, json={
    'email': 'client@exemple.com',
    'subject': 'Your order #4521 is confirmed',
    'html':  '<p>Thank you for your order.</p>',
}).json()
print(msg['message_id'])

# ── Bulk send
masse = requests.post(f'{BASE}/mail/send/bulk', headers=headers, json={
    'emails': ['client1@exemple.com', 'client2@exemple.com'],
    'subject':  'This month's offers',
    'html':   '<h1>What's new</h1><p>Discover the selection.</p>',
}).json()
print(masse['message_ids'], masse.get('mails_error'))

fetch is built in from Node 18 onwards.

const BASE = 'https://app.sparrowmessage.com/api/v1';
const JSON_HEADERS = { 'Accept': 'application/json', 'Content-Type': 'application/json' };

// ── Authentication
const auth = await (await fetch(`${BASE}/login`, {
  method: 'POST',
  headers: JSON_HEADERS,
  body: JSON.stringify({ email: 'you@company.com', password: 'your-password' })
})).json();

if (auth.code !== 'OK') throw new Error(auth.error || 'Authentication failed');

const headers = { ...JSON_HEADERS, Authorization: `Bearer ${auth.user.api_token}` };

// ── Single send
const msg = await (await fetch(`${BASE}/mail/send/one`, {
  method: 'POST',
  headers: headers,
  body: JSON.stringify({
    email: 'client@exemple.com',
    subject: 'Your order #4521 is confirmed',
    html:  '<p>Thank you for your order.</p>'
  })
})).json();

// ── Bulk send
const masse = await (await fetch(`${BASE}/mail/send/bulk`, {
  method: 'POST',
  headers: headers,
  body: JSON.stringify({
    emails: ['client1@exemple.com', 'client2@exemple.com'],
    subject:  'This month's offers',
    html:   '<h1>What's new</h1><p>Discover the selection.</p>'
  })
})).json();

HttpClient, with no external dependency.

using System.Net.Http.Json;

const string Base = "https://app.sparrowmessage.com/api/v1";
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("Accept", "application/json");

// ── Authentication
var auth = await (await http.PostAsJsonAsync($"{Base}/login", new {
    email    = "you@company.com",
    password = "your-password"
})).Content.ReadFromJsonAsync<JsonElement>();

if (auth.GetProperty("code").GetString() != "OK")
    throw new Exception(auth.GetProperty("error").GetString());

var token = auth.GetProperty("user").GetProperty("api_token").GetString();
http.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Bearer", token);

// ── Single send
var msg = await http.PostAsJsonAsync($"{Base}/mail/send/one", new {
    email = "client@exemple.com",
    subject = "Your order #4521 is confirmed",
    html  = "<p>Thank you for your order.</p>"
});

// ── Bulk send
var masse = await http.PostAsJsonAsync($"{Base}/mail/send/bulk", new {
    emails = new[] { "client1@exemple.com", "client2@exemple.com" },
    sujet  = "This month's offers",
    html   = "<h1>What's new</h1><p>Discover the selection.</p>"
});

java.net.http, included since Java 11.

String base = "https://app.sparrowmessage.com/api/v1";
HttpClient client = HttpClient.newHttpClient();

// ── Authentication
HttpRequest login = HttpRequest.newBuilder(URI.create(base + "/login"))
    .header("Accept", "application/json")
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString("""
        {"email":"you@company.com","password":"your-password"}"""))
    .build();

String reponse = client.send(login, HttpResponse.BodyHandlers.ofString()).body();
String token   = new JSONObject(reponse).getJSONObject("user").getString("api_token");

// ── Single send
HttpRequest msg = HttpRequest.newBuilder(URI.create(base + "/mail/send/one"))
    .header("Accept", "application/json")
    .header("Content-Type", "application/json")
    .header("Authorization", "Bearer " + token)
    .POST(HttpRequest.BodyPublishers.ofString("""
        {
          "email": "client@exemple.com",
          "subject": "Your order #4521 is confirmed",
          "html":  "<p>Thank you for your order.</p>"
        }"""))
    .build();

client.send(msg, HttpResponse.BodyHandlers.ofString());

// ── Bulk send: "emails" is an array
HttpRequest masse = HttpRequest.newBuilder(URI.create(base + "/mail/send/bulk"))
    .header("Accept", "application/json")
    .header("Content-Type", "application/json")
    .header("Authorization", "Bearer " + token)
    .POST(HttpRequest.BodyPublishers.ofString("""
        {
          "emails": ["client1@exemple.com", "client2@exemple.com"],
          "subject":  "This month's offers",
          "html":   "<h1>What's new</h1>"
        }"""))
    .build();

client.send(masse, HttpResponse.BodyHandlers.ofString());

To try it from a terminal, before writing a single line.

# ── 1. Get the token
curl -X POST https://app.sparrowmessage.com/api/v1/login \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"email":"you@company.com","password":"your-password"}'

# Response:
# { "code":"OK", "token":"…", "user":{ "api_token":"…" } }

# ── 2. Send an email
curl -X POST https://app.sparrowmessage.com/api/v1/mail/send/one \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer VOTRE_API_TOKEN" \
  -d '{
        "email": "client@exemple.com",
        "subject": "Your order #4521 is confirmed",
        "html":  "<p>Thank you for your order.</p>"
      }'

# ── 3. Send to several recipients
curl -X POST https://app.sparrowmessage.com/api/v1/mail/send/bulk \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer VOTRE_API_TOKEN" \
  -d '{
        "emails": ["client1@exemple.com", "client2@exemple.com"],
        "subject":  "This month's offers",
        "html":   "<h1>What's new</h1><p>Discover the selection.</p>"
      }'

If your application already sends email, there is nothing to code: just change the outgoing server settings.

Server      : smtp.sparrowmessage.com
Port        : 587 (STARTTLS)  ·  465 (SSL/TLS)  ·  2525 (fallback)
Security    : TLS required
Username    : provided when the account is opened
Password    : provided when the account is opened
Sender      : an address on your authenticated domain

# ── PHP example, using PHPMailer
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host       = 'smtp.sparrowmessage.com';
$mail->SMTPAuth   = true;
$mail->Username   = 'your-username';
$mail->Password   = 'your-key';
$mail->SMTPSecure = 'tls';
$mail->Port       = 587;
$mail->setFrom('facture@yourcompany.com', 'Your Company');
$mail->addAddress('client@exemple.com');
$mail->Subject = 'Your order #4521 is confirmed';
$mail->isHTML(true);
$mail->Body    = '<p>Thank you for your order.</p>';
$mail->send();

# ── Python example, no dependencies
import smtplib
from email.message import EmailMessage

msg = EmailMessage()
msg['From']    = 'facture@yourcompany.com'
msg['To']      = 'client@exemple.com'
msg['Subject'] = 'Your order #4521 is confirmed'
msg.set_content('Thank you for your order.')

with smtplib.SMTP('smtp.sparrowmessage.com', 587) as s:
    s.starttls()
    s.login('your-username', 'your-key')
    s.send_message(msg)

Every response carries a code field set to OK ou KO : on a KO, error gives the reason. Full documentation and a sandbox are provided when your account opens.

Customers

Trusted by

Enterprises, institutions and public bodies, in Morocco and abroad. The same organisations, whatever the channel.

Employee, supplier and customer communication

Customer and employee communication

Customer and employee communication

Supplier communication

Customer and employee communication

Candidate and employer communication

Member and partner communication

Member communication

Partner and donor communication

Customer communication

Customer notifications from the CRM

Customer communication

Candidate and employer communication

Member communication

Customer and partner communication

Supplier communication

Student and partner communication

Tourism industry communication

Customer communication

Member communication

Customer and user communication

Student and administration communication

Student and administration communication

Customer and store communication

Employee communication

Customer and prospect communication

Customer and prospect communication

Customer communication

Customer communication

Customer communication

Customer notifications and relations

Customer and supplier notifications

Customer notifications and campaigns

Industries

A channel built for every industry

Retail and distribution

Promotions, new arrivals, order confirmations and abandoned cart follow-ups.

Banking and insurance

Statements, payment reminders, loyalty campaigns and regulatory notices.

Education

Invitations, results, information for parents and recruitment campaigns.

Real estate

New listings sent to the right segment, case tracking, prospect follow-ups.

Transport and logistics

Shipping notices, delivery tracking, supplier information.

Associations and federations

Meeting notices, membership fee reminders, member newsletters.

Industry

Supplier communication, internal memos, recruitment campaigns.

Healthcare

Appointment reminders, results available, prevention campaigns.

Getting started

Your email platform up and running in 4 phases

From signature to first send, a mapped-out path and a single point of contact.

1Scoping and account opening
Plan chosen according to your contact volume
Payment and account creation
User access and roles created
2Domain authentication
SPF, DKIM and DMARC records to publish
Verification of the sending domain and subdomain
SMTP server and IP brought into service
3Contacts, templates and integration
Import and cleaning of your contact lists
Templates in your brand style, header and footer
Connection to your website, CRM or ERP
4First sends and support
Test campaign and rendering check
Gradual warm-up of the IP address
Training your teams and tracking results

Typical timeline: account opened within 24 hours, first send as soon as the DNS records propagate.

Pricing

Three plans, based on your number of contacts

The subscription covers the platform, the sending server and support. The number of emails included depends on the contact tier you choose.

Standard Pack

For companies starting out with campaigns, from 500 to 15,000 contacts.

  • Drag-and-drop editor and templates
  • Segmentation and personalisation
  • Campaign scheduling
  • Open and click analytics
  • Sending via SMTP and API
  • Email support
Estimate my budget

Enterprise Pack

Beyond 50,000 contacts, or with constraints specific to your organisation.

On request

volume, dedicated IP and service commitment defined with you

  • Everything in the Premium plan
  • Dedicated IP address and your own reputation
  • Sending volume defined to measure
  • Service and availability commitment
  • Integration with your information system
  • Dedicated commercial and technical contact
Request a quote

Payment in dirhams MAD

Bank transfer to E-solution, Casablanca. Moroccan invoice with tax ID, VAT applicable.

Bank transfer Cheque Cash

Payment in US dollars USD

Invoiced by E-SOLUTION TECHNOLOGIES LLC, New York — EIN 32-0781906. Useful if your accounting works in dollars, wherever you are.

Card payment (Stripe) PayPal Wire transfer / SWIFT

Bank details and the secure payment link are sent with the invoice, never published on this page.

Prices excluding tax. An annual commitment, paid in advance, receives a 10% discount on the subscription.

Calculator

Estimate your email budget

Choose your plan and your contact volume. The quote reflects exactly what you select here.

Your plan
Plan
Number of contacts
Billing period

Up to 7,000 emails per month included.

Options
Sending IP address
Number of sending domains 3 included
Team training
Integration with your information system 3 000 DH / J-H
IP and domain warm-up
Guided DNS configuration
Reputation and blacklist monitoring
Sending via API rather than SMTP
Webhooks (delivery, bounce, click)
User accounts 3 included
Rights and role management
Single sign-on (SSO)
Deliverability consulting 1,000 MAD / hour

Three sending domains are included; each additional domain is billed at 100 MAD per month. The shared IP is included and suits most volumes; a dedicated IP is billed at 100 MAD per month per address. Both options are taken with a one-year commitment.

Support package with SLA
Support levelBest effort, business hours, knowledge base and email — 0.5 person-day max/month

The support pack is billed annually.

Estimated cost
190 DH
monthly subscription, excluding one-off options

Indicative estimate excluding tax, based on our published rates.

Frequently asked questions

Everything about email marketing and the SMTP server

The SMTP server only carries your messages: you then have to compose the emails and manage the lists elsewhere. The plan brings both together — the platform to create, segment and measure, the server to send — in one subscription and one invoice.

The plan is chosen on the number of contacts stored in your database. Each tier includes a monthly email volume, enough to reach your contacts several times. A one-off overage does not block your sending: it is settled with you afterwards.

It is your emails' ability to reach the inbox rather than the spam folder. It depends on your domain authentication (SPF, DKIM, DMARC), the reputation of the sending IP address, how clean your lists are, and how your recipients behave. We work on all four.

Not necessarily. Below roughly 50,000 emails a month, a well-maintained shared IP performs better: its reputation is already established. A dedicated IP becomes worthwhile above that, or if you want sole control over your sender reputation.

Three records to publish: an SPF record authorising our servers to send for your domain, a DKIM key that signs your messages, and a DMARC policy telling mailboxes what to do with a non-compliant message. We provide the exact values and check that they propagate.

Yes, from a CSV or Excel file, or directly from your CRM. The import deduplicates, discards malformed addresses and preserves earlier unsubscribes. A purchased list, or one collected without consent, is another matter: it does lasting damage to your sender reputation.

Yes. Confirmations, invoices and verification codes use a queue separate from campaigns: a large campaign in progress never delays an email your customer is waiting for.

Yes — upwards at any time, with a pro-rata adjustment. Downwards, the change takes effect at the end of the current period.

In Morocco, personal data processing falls under Law 09-08 and the CNDP. Your contact file must be declared, and every commercial send requires the recipient's prior consent. The unsubscribe link appears on all our sends and is processed immediately; consents, collection dates and deletion requests are kept and exportable as evidence. We are not lawyers: have your setup and your CNDP declaration reviewed by your counsel.

In the United States, commercial email falls under the CAN-SPAM Act, enforced by the Federal Trade Commission. Three obligations fall on the sender: a valid physical postal address in every message, a subject line and header that do not mislead about the content or the sender's identity, and an unsubscribe mechanism processed within ten business days. The unsubscribe link appears on all our sends and is applied immediately; deletion requests are kept and exportable. We are not lawyers: have your setup reviewed by your counsel, particularly if you also address California, whose CCPA adds obligations of its own.

The unsubscribe link appears on every send and is processed immediately. Consents, collection dates and deletion requests are kept and exportable, ready to feed your record of processing activities. We are not lawyers: for your privacy notices and the legal basis of your sends, have your setup reviewed by your counsel.

Account opening, domain authentication and the first test campaign are guided. A training day can be added for your marketing teams, and integration with your information system is quoted in person-days.

Ready to launch your email campaigns?

A 30-minute demo is enough to see the platform, the editor and the analytics on a case close to yours.

Request a demo
Contact

Let's talk about your email project

Morocco

CAF OFFICE, 1er étage, N° 2
Casablanca 20000, Maroc

+212 662-583818

United States

224 W 35th St Ste 500 N 1018
New York, NY 10001, United States

+1 (347) 789-2280

Generate your quote

Enter the customer's details. The quote will automatically include the plan and options selected in the calculator.

All fields are required.