Point WordPress, your CRM, or any app that speaks SMTP at MailKite — no SDK, no rewrite. Same domains, same deliverability, and the same logs as our API.
Your password is your MailKite API key — no separate SMTP credential.
If it has an SMTP settings panel, it works with MailKite
Use the mail library you already have. The password is your API key; any username works.
import nodemailer from "nodemailer";
const tx = nodemailer.createTransport({
host: "smtp.mailkite.dev",
port: 587, // STARTTLS · use 465 for implicit TLS
auth: {
user: "mailkite", // any username works
pass: process.env.MAILKITE_API_KEY, // your mk_live_… key
},
});
await tx.sendMail({
from: "hello@myapp.ai", // an address on a verified domain
to: "ada@example.com",
subject: "Your invoice #1042",
html: "<p>Thanks! Receipt attached.</p>",
});import os, smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg["From"] = "hello@myapp.ai" # an address on a verified domain
msg["To"] = "ada@example.com"
msg["Subject"] = "Your invoice #1042"
msg.set_content("Thanks! Receipt attached.")
# Standard library — no dependency to install.
with smtplib.SMTP("smtp.mailkite.dev", 587) as s:
s.starttls()
s.login("mailkite", os.environ["MAILKITE_API_KEY"]) # password = your key
s.send_message(msg)<?php
use PHPMailer\PHPMailer\PHPMailer;
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtp.mailkite.dev';
$mail->SMTPAuth = true;
$mail->Username = 'mailkite'; // any username
$mail->Password = getenv('MAILKITE_API_KEY'); // your mk_live_… key
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587; // or 465 for implicit TLS
$mail->setFrom('hello@myapp.ai'); // an address on a verified domain
$mail->addAddress('ada@example.com');
$mail->Subject = 'Your invoice #1042';
$mail->Body = 'Thanks! Receipt attached.';
$mail->send();Properties p = new Properties();
p.put("mail.smtp.host", "smtp.mailkite.dev");
p.put("mail.smtp.port", "587"); // 465 for implicit TLS
p.put("mail.smtp.auth", "true");
p.put("mail.smtp.starttls.enable", "true");
Session s = Session.getInstance(p, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
// username = anything · password = your mk_live_… key
return new PasswordAuthentication("mailkite", System.getenv("MAILKITE_API_KEY"));
}
});
Message msg = new MimeMessage(s);
msg.setFrom(new InternetAddress("hello@myapp.ai")); // a verified domain
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse("ada@example.com"));
msg.setSubject("Your invoice #1042");
msg.setText("Thanks! Receipt attached.");
Transport.send(msg);auth := smtp.PlainAuth("", "mailkite", os.Getenv("MAILKITE_API_KEY"), "smtp.mailkite.dev")
msg := []byte("From: hello@myapp.ai\r\n" + // an address on a verified domain
"To: ada@example.com\r\n" +
"Subject: Your invoice #1042\r\n\r\n" +
"Thanks! Receipt attached.\r\n")
// STARTTLS on 587; SendMail upgrades the connection before AUTH.
err := smtp.SendMail("smtp.mailkite.dev:587", auth,
"hello@myapp.ai", []string{"ada@example.com"}, msg)require "mail"
Mail.defaults do
delivery_method :smtp, {
address: "smtp.mailkite.dev",
port: 587, # 465 for implicit TLS
user_name: "mailkite", # any username
password: ENV["MAILKITE_API_KEY"], # your mk_live_… key
enable_starttls_auto: true,
}
end
Mail.deliver do
from "hello@myapp.ai" # an address on a verified domain
to "ada@example.com"
subject "Your invoice #1042"
body "Thanks! Receipt attached."
end WP Mail SMTP → Settings → Other SMTP
Host smtp.mailkite.dev
Encryption TLS
Port 587
Auto TLS On
Authentication On
SMTP Username mailkite (any username works)
SMTP Password mk_live_… (your MailKite API key)
From Email you@your-verified-domain.dev swaks --server smtp.mailkite.dev:587 --tls \
--auth LOGIN --auth-user mailkite --auth-password "$MAILKITE_API_KEY" \
--from you@your-verified-domain.dev --to you@example.com \
--header "Subject: MailKite SMTP test" --body "It works." Most SMTP relays are a black box. Here, every message lands in your dashboard — delivered, bounced, opened — DKIM-signed and searchable, exactly like an API send. Nothing disappears into the void.
Your password is your MailKite API key. No separate SMTP username, no per-region secret, no “SMTP key vs API key” mix-up — the one key you already have sends over SMTP and the API.
Both run on the same infrastructure, the same domains, and the same sending reputation. Pick whichever fits how you build.
Same account, same domains, same keys — start on SMTP today and add the API whenever you want more. Nothing to migrate.
Grab a key, drop the settings into your app, and you're live — on your own verified domain.