Appearance
SMTP Setup
Configure your application to send emails through the Mail.td sandbox. Only SMTP credentials change — your application code stays the same.
Credentials
| Setting | Value |
|---|---|
| Host | smtp.mail.td |
| Port | 25 (or 587) |
| Auth method | PLAIN |
| Username | any value (e.g. sandbox) |
| Password | your Pro API token (tm_pro_...) |
TIP
Create an API token in Pro Dashboard → API Tokens. Use the full token string (starting with tm_pro_) as the SMTP password.
Code examples
Node.js (Nodemailer)
javascript
const nodemailer = require("nodemailer");
const transporter = nodemailer.createTransport({
host: "smtp.mail.td",
port: 25,
auth: {
user: "sandbox",
pass: process.env.MAILTD_TOKEN, // tm_pro_...
},
});
await transporter.sendMail({
from: "dev@yourapp.com",
to: "user@example.com",
subject: "Welcome to MyApp",
html: "<h1>Hello!</h1><p>Thanks for signing up.</p>",
});Python (smtplib)
python
import smtplib
from email.mime.text import MIMEText
import os
msg = MIMEText("<h1>Hello!</h1><p>Thanks for signing up.</p>", "html")
msg["Subject"] = "Welcome to MyApp"
msg["From"] = "dev@yourapp.com"
msg["To"] = "user@example.com"
with smtplib.SMTP("smtp.mail.td", 25) as server:
server.login("sandbox", os.environ["MAILTD_TOKEN"])
server.send_message(msg)Go (net/smtp)
go
package main
import (
"net/smtp"
"os"
)
func main() {
auth := smtp.PlainAuth("", "sandbox", os.Getenv("MAILTD_TOKEN"), "smtp.mail.td")
msg := []byte("From: dev@yourapp.com\r\n" +
"To: user@example.com\r\n" +
"Subject: Welcome to MyApp\r\n" +
"Content-Type: text/html\r\n\r\n" +
"<h1>Hello!</h1><p>Thanks for signing up.</p>")
smtp.SendMail("smtp.mail.td:25", auth, "dev@yourapp.com",
[]string{"user@example.com"}, msg)
}PHP (PHPMailer)
php
use PHPMailer\PHPMailer\PHPMailer;
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtp.mail.td';
$mail->SMTPAuth = true;
$mail->Username = 'sandbox';
$mail->Password = getenv('MAILTD_TOKEN');
$mail->Port = 25;
$mail->setFrom('dev@yourapp.com');
$mail->addAddress('user@example.com');
$mail->Subject = 'Welcome to MyApp';
$mail->isHTML(true);
$mail->Body = '<h1>Hello!</h1><p>Thanks for signing up.</p>';
$mail->send();Ruby (Net::SMTP)
ruby
require "net/smtp"
message = <<~MSG
From: dev@yourapp.com
To: user@example.com
Subject: Welcome to MyApp
Content-Type: text/html
<h1>Hello!</h1><p>Thanks for signing up.</p>
MSG
Net::SMTP.start("smtp.mail.td", 25, "localhost", "sandbox",
ENV["MAILTD_TOKEN"], :plain) do |smtp|
smtp.send_message(message, "dev@yourapp.com", ["user@example.com"])
endJava (Jakarta Mail)
java
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.mail.td");
props.put("mail.smtp.port", "25");
props.put("mail.smtp.auth", "true");
Session session = Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("sandbox",
System.getenv("MAILTD_TOKEN"));
}
});
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("dev@yourapp.com"));
msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("user@example.com"));
msg.setSubject("Welcome to MyApp");
msg.setContent("<h1>Hello!</h1><p>Thanks for signing up.</p>", "text/html");
Transport.send(msg);Framework configuration
Laravel (.env)
MAIL_MAILER=smtp
MAIL_HOST=smtp.mail.td
MAIL_PORT=25
MAIL_USERNAME=sandbox
MAIL_PASSWORD=tm_pro_your_token_here
MAIL_FROM_ADDRESS=dev@yourapp.comDjango (settings.py)
python
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = "smtp.mail.td"
EMAIL_PORT = 25
EMAIL_HOST_USER = "sandbox"
EMAIL_HOST_PASSWORD = os.environ["MAILTD_TOKEN"]Rails (config/environments/development.rb)
ruby
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: "smtp.mail.td",
port: 25,
user_name: "sandbox",
password: ENV["MAILTD_TOKEN"],
authentication: :plain,
}Environment variables
We recommend using environment variables to switch between sandbox (dev) and production SMTP:
bash
# Development / CI
export SMTP_HOST=smtp.mail.td
export SMTP_PORT=25
export SMTP_USER=sandbox
export SMTP_PASS=tm_pro_your_token_here
# Production
export SMTP_HOST=smtp.sendgrid.net
export SMTP_PORT=587
export SMTP_USER=apikey
export SMTP_PASS=SG.your_sendgrid_keyYour application reads these variables and the same code works in both environments.
Troubleshooting
Connection refused
Ensure your network allows outbound connections on port 25. Some cloud providers (AWS, GCP) block port 25 by default. Try port 587 as an alternative.
Authentication failed (535)
- Verify the token starts with
tm_pro_. - Check the token hasn't been revoked in Pro Dashboard → API Tokens.
- Ensure your Pro subscription is active (not downgraded).
Emails not appearing in dashboard
- Confirm you received
250 OKafter theDATAcommand. - Check the SMTP Sandbox page in Pro Dashboard — emails appear within seconds.
- If using a library that pools connections, ensure the AUTH happens on each new connection.