Stop guessing.
Start catching emails.

indev.email is an email testing platform for developers and QA teams. Point your app's SMTP at us, and instantly inspect every email your code sends — with per-domain isolation, team collaboration, and zero config.

A few lines of config. Any language.

Replace your production SMTP with indev.email. Emails land in your team's shared inbox instantly.

// npm install nodemailer const nodemailer = require('nodemailer'); const transporter = nodemailer.createTransport({ host: 'r.indev.email', port: 587, secure: false, auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASS, }, }); await transporter.sendMail({ from: 'app@yourapp.com', to: 'user@test.indev.email', subject: 'Welcome!', html: '<h1>Hello from your app</h1>', });
import smtplib from email.mime.text import MIMEText import os msg = MIMEText('<h1>Hello from your app</h1>', 'html') msg['Subject'] = 'Welcome!' msg['From'] = 'app@yourapp.com' msg['To'] = 'user@test.indev.email' with smtplib.SMTP('r.indev.email', 587) as server: server.starttls() server.login(os.environ['SMTP_USER'], os.environ['SMTP_PASS']) server.send_message(msg)
// Jakarta Mail (javax.mail) Properties props = new Properties(); props.put("mail.smtp.host", "r.indev.email"); props.put("mail.smtp.port", "587"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); Session session = Session.getInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication( System.getenv("SMTP_USER"), System.getenv("SMTP_PASS")); } }); Message msg = new MimeMessage(session); msg.setFrom(new InternetAddress("app@yourapp.com")); msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse("user@test.indev.email")); msg.setSubject("Welcome!"); msg.setContent("<h1>Hello from your app</h1>", "text/html"); Transport.send(msg);
# gem install mail require 'mail' Mail.defaults do delivery_method :smtp, { address: 'r.indev.email', port: 587, user_name: ENV['SMTP_USER'], password: ENV['SMTP_PASS'], authentication: 'plain', enable_starttls_auto: true, } end Mail.deliver do from 'app@yourapp.com' to 'user@test.indev.email' subject 'Welcome!' body '<h1>Hello from your app</h1>' end
import ( "net/smtp" "os" ) func main() { auth := smtp.PlainAuth("", os.Getenv("SMTP_USER"), os.Getenv("SMTP_PASS"), "r.indev.email", ) msg := []byte( "From: app@yourapp.com\r\n" + "To: user@test.indev.email\r\n" + "Subject: Welcome!\r\n" + "Content-Type: text/html\r\n\r\n" + "<h1>Hello from your app</h1>") smtp.SendMail("r.indev.email:587", auth, "app@yourapp.com", []string{"user@test.indev.email"}, msg) }
// cargo add lettre use lettre::{ Message, SmtpTransport, Transport, transport::smtp::authentication::Credentials, }; let email = Message::builder() .from("app@yourapp.com".parse().unwrap()) .to("user@test.indev.email".parse().unwrap()) .subject("Welcome!") .body("<h1>Hello from your app</h1>".into()) .unwrap(); let creds = Credentials::new( std::env::var("SMTP_USER").unwrap(), std::env::var("SMTP_PASS").unwrap(), ); SmtpTransport::starttls_relay("r.indev.email") .unwrap() .credentials(creds) .build() .send(&email) .unwrap();
# Send a test email via SMTP using curl curl --url 'smtp://r.indev.email:587' \ --ssl-reqd \ --user "$SMTP_USER:$SMTP_PASS" \ --mail-from 'app@yourapp.com' \ --mail-rcpt 'user@test.indev.email' \ -T email.txt # email.txt: # From: app@yourapp.com # To: user@test.indev.email # Subject: Welcome! # Content-Type: text/html # # <h1>Hello from your app</h1>

Everything you need for email testing

Built by developers, for developers. No more checking spam folders or asking "did you get the email?"

SMTP Catch-All Sink

Every address at your test domain is accepted. No mailbox setup needed — emails are grouped by recipient automatically.

STARTTLS + Auth

Encrypted transport with per-domain SMTP credentials. Your test emails never travel in plaintext.

Multi-Domain Isolation

Create unlimited .test domains. Each project gets its own sandbox with isolated credentials and inbox.

Real Inbox UI

Browse emails like Outlook — with sender info, subject, HTML preview, attachments, and raw source. Not just logs.

Team Collaboration

Multi-tenant by design. Share domains across your team. Everyone sees the same inbox in real time.

Private & Secure

Your email data stays private. Per-domain isolation, encrypted transport, and full team access control built in.

Up and running in 3 minutes

1

Sign up with a magic link

Enter your email, click the link we send you, and you're in. No passwords to remember, no OAuth flows to configure.

2

Create a test domain

Generate a .test domain with one click. You'll get unique SMTP credentials for that domain instantly.

3

Point your app & start testing

Set your app's SMTP host to r.indev.email:587 with the generated credentials. Every email your app sends lands in the inbox view, grouped by recipient.

Ready to stop losing test emails?

Join developers and QA teams who trust indev.email to catch every transactional email their apps send.

Simple, transparent pricing

Start free. Upgrade when you need more.

Free
$0/yr
  • 1 test domain
  • Up to 3 team members
  • SMTP catch-all
  • 7-day message retention
  • STARTTLS encryption
Get Started Free
Enterprise
Custom
  • Everything in Pro
  • Unlimited domains
  • Unlimited team members
  • Custom retention
  • SSO / SAML
  • SLA & dedicated support
Contact Sales

Contact Us

Have a question, feedback, or need support? Send us a message and we'll get back to you.