SMTP tests
Reachability, banner, STARTTLS and test mail.
Port reachable?
Checks whether the SMTP port (25, 587 or 465) is open from your current location.
SMTP (25)
- Host / server
-
mail.example.comChange in the builder →
PowerShell (Windows)
Test-NetConnection Built-in
Test-NetConnection -ComputerName mail.example.com -Port 25 nc / ncat Add-on tool
ncat -vz mail.example.com 25 Unix shell (bash)
bash /dev/tcp Built-in
timeout 5 bash -c "</dev/tcp/mail.example.com/25" && echo open || echo closed nc Add-on tool
nc -vz mail.example.com 25 Submission (587)
- Host / server
-
mail.example.comChange in the builder →
PowerShell (Windows)
Test-NetConnection Built-in
Test-NetConnection -ComputerName mail.example.com -Port 587 nc / ncat Add-on tool
ncat -vz mail.example.com 587 Unix shell (bash)
bash /dev/tcp Built-in
timeout 5 bash -c "</dev/tcp/mail.example.com/587" && echo open || echo closed nc Add-on tool
nc -vz mail.example.com 587 SMTPS (465)
- Host / server
-
mail.example.comChange in the builder →
PowerShell (Windows)
Test-NetConnection Built-in
Test-NetConnection -ComputerName mail.example.com -Port 465 nc / ncat Add-on tool
ncat -vz mail.example.com 465 Unix shell (bash)
bash /dev/tcp Built-in
timeout 5 bash -c "</dev/tcp/mail.example.com/465" && echo open || echo closed nc Add-on tool
nc -vz mail.example.com 465 Banner + EHLO
Opens the connection, reads the 220 banner and the EHLO reply with the offered capabilities.
Eigener Mailserver
- Host / server
-
mail.example.comChange in the builder →
PowerShell (Windows)
TcpClient (.NET) Built-in
$h = "mail.example.com"; $p = 25
$c = New-Object Net.Sockets.TcpClient($h, $p)
$s = $c.GetStream()
$r = New-Object IO.StreamReader($s)
$w = New-Object IO.StreamWriter($s); $w.NewLine = "`r`n"; $w.AutoFlush = $true
Start-Sleep -Milliseconds 400; while ($c.Available) { $r.ReadLine() }
$w.WriteLine("EHLO test.example.com")
Start-Sleep -Milliseconds 400; while ($c.Available) { $r.ReadLine() }
$w.WriteLine("QUIT"); $c.Close() nc / ncat Add-on tool
"EHLO test.example.com`r`nQUIT`r`n" | ncat mail.example.com 25 Unix shell (bash)
bash /dev/tcp Built-in
exec 3<>/dev/tcp/mail.example.com/25
printf 'EHLO test.example.com\r\nQUIT\r\n' >&3
cat <&3
exec 3<&- nc Add-on tool
( printf 'EHLO test.example.com\r\nQUIT\r\n'; sleep 1 ) | nc mail.example.com 25 Microsoft 365
PowerShell (Windows)
TcpClient (.NET) Built-in
$h = "contoso-com.mail.protection.outlook.com"; $p = 25
$c = New-Object Net.Sockets.TcpClient($h, $p)
$s = $c.GetStream()
$r = New-Object IO.StreamReader($s)
$w = New-Object IO.StreamWriter($s); $w.NewLine = "`r`n"; $w.AutoFlush = $true
Start-Sleep -Milliseconds 400; while ($c.Available) { $r.ReadLine() }
$w.WriteLine("EHLO test.example.com")
Start-Sleep -Milliseconds 400; while ($c.Available) { $r.ReadLine() }
$w.WriteLine("QUIT"); $c.Close() nc / ncat Add-on tool
"EHLO test.example.com`r`nQUIT`r`n" | ncat contoso-com.mail.protection.outlook.com 25 Unix shell (bash)
bash /dev/tcp Built-in
exec 3<>/dev/tcp/contoso-com.mail.protection.outlook.com/25
printf 'EHLO test.example.com\r\nQUIT\r\n' >&3
cat <&3
exec 3<&- nc Add-on tool
( printf 'EHLO test.example.com\r\nQUIT\r\n'; sleep 1 ) | nc contoso-com.mail.protection.outlook.com 25 Test STARTTLS
Establishes a STARTTLS connection and shows the certificate.
Submission (587)
- Host / server
-
mail.example.comChange in the builder →
PowerShell (Windows)
SslStream (.NET) Built-in
$h = "mail.example.com"; $p = 587
$c = New-Object Net.Sockets.TcpClient($h, $p)
$s = $c.GetStream()
$r = New-Object IO.StreamReader($s)
$w = New-Object IO.StreamWriter($s); $w.NewLine = "`r`n"; $w.AutoFlush = $true
$r.ReadLine() | Out-Null
$w.WriteLine("EHLO test.example.com"); Start-Sleep -Milliseconds 200; while ($c.Available) { $r.ReadLine() | Out-Null }
$w.WriteLine("STARTTLS"); $r.ReadLine()
$ssl = New-Object Net.Security.SslStream($s, $false, ({ $true }))
$ssl.AuthenticateAsClient($h)
([Security.Cryptography.X509Certificates.X509Certificate2]$ssl.RemoteCertificate) | Format-List Subject, Issuer, NotBefore, NotAfter
$ssl.Dispose(); $c.Close() openssl Add-on tool
openssl s_client -starttls smtp -crlf -connect mail.example.com:587 -servername mail.example.com Unix shell (bash)
openssl Built-in
openssl s_client -starttls smtp -connect mail.example.com:587 -servername mail.example.com </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates swaks Add-on tool
swaks --server mail.example.com:587 -tls --quit-after TLS Microsoft 365
- Host / server
-
smtp.office365.comChange in the builder →
PowerShell (Windows)
SslStream (.NET) Built-in
$h = "smtp.office365.com"; $p = 587
$c = New-Object Net.Sockets.TcpClient($h, $p)
$s = $c.GetStream()
$r = New-Object IO.StreamReader($s)
$w = New-Object IO.StreamWriter($s); $w.NewLine = "`r`n"; $w.AutoFlush = $true
$r.ReadLine() | Out-Null
$w.WriteLine("EHLO test.example.com"); Start-Sleep -Milliseconds 200; while ($c.Available) { $r.ReadLine() | Out-Null }
$w.WriteLine("STARTTLS"); $r.ReadLine()
$ssl = New-Object Net.Security.SslStream($s, $false, ({ $true }))
$ssl.AuthenticateAsClient($h)
([Security.Cryptography.X509Certificates.X509Certificate2]$ssl.RemoteCertificate) | Format-List Subject, Issuer, NotBefore, NotAfter
$ssl.Dispose(); $c.Close() openssl Add-on tool
openssl s_client -starttls smtp -crlf -connect smtp.office365.com:587 -servername smtp.office365.com Unix shell (bash)
openssl Built-in
openssl s_client -starttls smtp -connect smtp.office365.com:587 -servername smtp.office365.com </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates swaks Add-on tool
swaks --server smtp.office365.com:587 -tls --quit-after TLS You can then keep typing manually (EHLO, then QUIT). openssl is an add-on tool, available on Windows e.g. via Git for Windows, and it also runs inside PowerShell.
Implicit TLS (465)
Connects with TLS straight away on port 465 (SMTPS, implicit TLS).
Impliztes TLS (465)
- Host / server
-
mail.example.comChange in the builder →
PowerShell (Windows)
SslStream (.NET) Built-in
$h = "mail.example.com"; $p = 465
$c = New-Object Net.Sockets.TcpClient($h, $p)
$ssl = New-Object Net.Security.SslStream($c.GetStream(), $false, ({ $true }))
$ssl.AuthenticateAsClient($h)
([Security.Cryptography.X509Certificates.X509Certificate2]$ssl.RemoteCertificate) | Format-List Subject, Issuer, NotAfter
$ssl.Dispose(); $c.Close() openssl Add-on tool
openssl s_client -connect mail.example.com:465 -servername mail.example.com Unix shell (bash)
openssl Built-in
openssl s_client -connect mail.example.com:465 -servername mail.example.com </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates swaks Add-on tool
swaks --server mail.example.com -p 465 --tlsc --quit-after BANNER Send test mail (SMTP stream)
Builds the complete SMTP conversation line by line (EHLO, MAIL FROM, RCPT TO, DATA, QUIT) and sends a real test message: with built-ins, no add-on tool.
- Host / server
-
mail.example.comChange in the builder →
PowerShell (Windows)
TcpClient (.NET) Built-in
$h = "mail.example.com"; $p = 25
$from = "sender@example.com"; $to = "recipient@example.com"
$c = New-Object Net.Sockets.TcpClient($h, $p)
$s = $c.GetStream()
$r = New-Object IO.StreamReader($s)
$w = New-Object IO.StreamWriter($s); $w.NewLine = "`r`n"; $w.AutoFlush = $true
function Talk($line) { if ($line) { $w.WriteLine($line) }; Start-Sleep -Milliseconds 300; while ($c.Available) { $r.ReadLine() } }
Talk $null
Talk "EHLO test.example.com"
Talk "MAIL FROM:<$from>"
Talk "RCPT TO:<$to>"
Talk "DATA"
$w.WriteLine("Subject: SMTP-Test")
$w.WriteLine("From: $from")
$w.WriteLine("To: $to")
$w.WriteLine("")
$w.WriteLine("Testnachricht via reinem SMTP-Stream.")
Talk "."
Talk "QUIT"
$c.Close() Send-MailMessage Add-on tool
Send-MailMessage -SmtpServer mail.example.com -Port 25 -From sender@example.com -To recipient@example.com -Subject "SMTP-Test" -Body "SMTP-Test $(Get-Date -Format o)" Unix shell (bash)
bash /dev/tcp Built-in
exec 3<>/dev/tcp/mail.example.com/25
send() { printf '%s\r\n' "$1" >&3; }
resp() { while IFS= read -r -t 3 line <&3; do printf '%s\n' "$line"; case $line in [0-9][0-9][0-9]" "*) break;; esac; done; }
resp
send "EHLO test.example.com"; resp
send "MAIL FROM:<sender@example.com>"; resp
send "RCPT TO:<recipient@example.com>"; resp
send "DATA"; resp
send "Subject: SMTP-Test"
send "From: sender@example.com"
send "To: recipient@example.com"
send ""
send "Testnachricht via reinem SMTP-Stream."
send "."; resp
send "QUIT"; resp
exec 3<&- swaks Add-on tool
swaks --server mail.example.com:25 --from sender@example.com --to recipient@example.com The raw stream runs unencrypted on port 25, suited to a relay or the MX without authentication. For port 587 with STARTTLS and AUTH, use swaks or openssl. Send-MailMessage is officially deprecated but still works.