Docs

Send with SMTP

Point any app that speaks SMTP at CARIO Mail. Every message gets the same checks, limits, screening, suppression list and delivery events as the REST API.

Connection

Host: smtp.csend.net
Username: cario (any value)
Port 587: STARTTLS (recommended)
Port 465: implicit TLS
Port 2525: STARTTLS fallback
Password: API key with emails:send

TLS 1.2+ is required: AUTH is refused before TLS. Create a dedicated key under API keys (scope "Send email") for each app, so you can revoke one without touching the others. The From address must be on a domain verified in your workspace.

Limits

  • Per second, minute, hour, day and month limits follow your plan (see Usage in the dashboard).
  • Up to 50 recipients (to + cc + bcc) and 10 MB per message including attachments.
  • Up to 10 connections per IP and 5 per API key at a time; idle connections close after 60 seconds.
  • New free accounts start in a sandbox: 50 emails a day, only to verified team members, until approved or upgraded.
  • Sending pauses automatically if bounces exceed 5% or complaints exceed 0.1% over 7 days.

Reply codes

250 2.0.0 Queued as msg_…Accepted. Track it in Messages or with GET /api/v1/emails/{id}.
421 4.7.0Too many connections from your IP or account. Retry shortly.
451 4.7.1Rate or daily/monthly limit reached, or sending temporarily paused. Retry later (temporary).
454 4.7.0Too many failed logins; your IP is temporarily banned.
530 5.7.0AUTH or STARTTLS required first.
535 5.7.8Invalid password (API key), revoked key or missing emails:send scope.
550 5.7.1Rejected: unverified sender domain, sandbox recipient, suppressed or reserved address.
552 5.3.4Message larger than 10 MB, or more than 50 recipients.

Examples

WordPress (WP Mail SMTP)
WordPress (WP Mail SMTP)
Mailer: Other SMTP
SMTP Host: smtp.csend.net
Encryption: TLS        (port 587)   — or SSL with port 465
SMTP Port: 587
Auto TLS: On
Authentication: On
SMTP Username: cario
SMTP Password: cm_live_xxxxxxxxxxxxxxxx   (API key with emails:send)
From Email: hello@yourdomain.com      (must be on a verified domain)
Node.js (Nodemailer)
Node.js (Nodemailer)
import nodemailer from "nodemailer";

const transport = nodemailer.createTransport({
  host: "smtp.csend.net", port: 587, secure: false, requireTLS: true,
  auth: { user: "cario", pass: process.env.CARIO_API_KEY },
});

await transport.sendMail({
  from: "Acme <hello@yourdomain.com>", to: "user@example.org",
  subject: "Welcome", text: "Hi!", html: "<p>Hi!</p>",
});
Python (smtplib)
Python (smtplib)
import os, smtplib
from email.message import EmailMessage

msg = EmailMessage()
msg["From"], msg["To"], msg["Subject"] = "hello@yourdomain.com", "user@example.org", "Welcome"
msg.set_content("Hi!")
msg.add_alternative("<p>Hi!</p>", subtype="html")

with smtplib.SMTP("smtp.csend.net", 587, timeout=30) as s:
    s.starttls()
    s.login("cario", os.environ["CARIO_API_KEY"])
    s.send_message(msg)
PHP (PHPMailer)
PHP (PHPMailer)
$mail = new PHPMailer\PHPMailer\PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtp.csend.net';
$mail->Port = 587;
$mail->SMTPSecure = PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS;
$mail->SMTPAuth = true;
$mail->Username = 'cario';
$mail->Password = getenv('CARIO_API_KEY');
$mail->setFrom('hello@yourdomain.com', 'Acme');
$mail->addAddress('user@example.org');
$mail->Subject = 'Welcome';
$mail->Body = '<p>Hi!</p>';
$mail->AltBody = 'Hi!';
$mail->send();
Laravel (.env)
Laravel (.env)
MAIL_MAILER=smtp
MAIL_HOST=smtp.csend.net
MAIL_PORT=587
MAIL_ENCRYPTION=tls
MAIL_USERNAME=cario
MAIL_PASSWORD=cm_live_xxxxxxxxxxxxxxxx
MAIL_FROM_ADDRESS=hello@yourdomain.com

Test from a terminal

swaks
swaks --server smtp.csend.net:587 --tls --auth LOGIN \
  --auth-user cario --auth-password "$CARIO_API_KEY" \
  --from hello@yourdomain.com --to you@gmail.com --header "Subject: CARIO SMTP test"

openssl s_client -connect smtp.csend.net:465 -quiet   # implicit TLS handshake check