Test SMTP
Raggiungibilità, banner, STARTTLS e messaggio di prova.
Porta raggiungibile?
Verifica se la porta SMTP (25, 587 o 465) è aperta dalla posizione attuale.
SMTP (25)
- Host / server
-
mail.example.comModifica nel generatore →
PowerShell (Windows)
Test-NetConnection Integrato
Test-NetConnection -ComputerName mail.example.com -Port 25 nc / ncat Strumento aggiuntivo
ncat -vz mail.example.com 25 Shell Unix (bash)
bash /dev/tcp Integrato
timeout 5 bash -c "</dev/tcp/mail.example.com/25" && echo open || echo closed nc Strumento aggiuntivo
nc -vz mail.example.com 25 Submission (587)
- Host / server
-
mail.example.comModifica nel generatore →
PowerShell (Windows)
Test-NetConnection Integrato
Test-NetConnection -ComputerName mail.example.com -Port 587 nc / ncat Strumento aggiuntivo
ncat -vz mail.example.com 587 Shell Unix (bash)
bash /dev/tcp Integrato
timeout 5 bash -c "</dev/tcp/mail.example.com/587" && echo open || echo closed nc Strumento aggiuntivo
nc -vz mail.example.com 587 SMTPS (465)
- Host / server
-
mail.example.comModifica nel generatore →
PowerShell (Windows)
Test-NetConnection Integrato
Test-NetConnection -ComputerName mail.example.com -Port 465 nc / ncat Strumento aggiuntivo
ncat -vz mail.example.com 465 Shell Unix (bash)
bash /dev/tcp Integrato
timeout 5 bash -c "</dev/tcp/mail.example.com/465" && echo open || echo closed nc Strumento aggiuntivo
nc -vz mail.example.com 465 Banner + EHLO
Apre la connessione, legge il banner 220 e la risposta EHLO con le funzionalità offerte.
Eigener Mailserver
- Host / server
-
mail.example.comModifica nel generatore →
PowerShell (Windows)
TcpClient (.NET) Integrato
$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 Strumento aggiuntivo
"EHLO test.example.com`r`nQUIT`r`n" | ncat mail.example.com 25 Shell Unix (bash)
bash /dev/tcp Integrato
exec 3<>/dev/tcp/mail.example.com/25
printf 'EHLO test.example.com\r\nQUIT\r\n' >&3
cat <&3
exec 3<&- nc Strumento aggiuntivo
( printf 'EHLO test.example.com\r\nQUIT\r\n'; sleep 1 ) | nc mail.example.com 25 Microsoft 365
PowerShell (Windows)
TcpClient (.NET) Integrato
$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 Strumento aggiuntivo
"EHLO test.example.com`r`nQUIT`r`n" | ncat contoso-com.mail.protection.outlook.com 25 Shell Unix (bash)
bash /dev/tcp Integrato
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 Strumento aggiuntivo
( printf 'EHLO test.example.com\r\nQUIT\r\n'; sleep 1 ) | nc contoso-com.mail.protection.outlook.com 25 Testare STARTTLS
Stabilisce una connessione STARTTLS e mostra il certificato.
Submission (587)
- Host / server
-
mail.example.comModifica nel generatore →
PowerShell (Windows)
SslStream (.NET) Integrato
$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 Strumento aggiuntivo
openssl s_client -starttls smtp -crlf -connect mail.example.com:587 -servername mail.example.com Shell Unix (bash)
openssl Integrato
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 Strumento aggiuntivo
swaks --server mail.example.com:587 -tls --quit-after TLS Microsoft 365
- Host / server
-
smtp.office365.comModifica nel generatore →
PowerShell (Windows)
SslStream (.NET) Integrato
$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 Strumento aggiuntivo
openssl s_client -starttls smtp -crlf -connect smtp.office365.com:587 -servername smtp.office365.com Shell Unix (bash)
openssl Integrato
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 Strumento aggiuntivo
swaks --server smtp.office365.com:587 -tls --quit-after TLS In seguito si può continuare a digitare a mano (EHLO, poi QUIT). openssl è uno strumento aggiuntivo, disponibile su Windows ad es. tramite Git for Windows, e funziona anche in PowerShell.
TLS implicito (465)
Si connette subito in TLS sulla porta 465 (SMTPS, TLS implicito).
Impliztes TLS (465)
- Host / server
-
mail.example.comModifica nel generatore →
PowerShell (Windows)
SslStream (.NET) Integrato
$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 Strumento aggiuntivo
openssl s_client -connect mail.example.com:465 -servername mail.example.com Shell Unix (bash)
openssl Integrato
openssl s_client -connect mail.example.com:465 -servername mail.example.com </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates swaks Strumento aggiuntivo
swaks --server mail.example.com -p 465 --tlsc --quit-after BANNER Inviare un messaggio di prova (flusso SMTP)
Costruisce riga per riga la conversazione SMTP completa (EHLO, MAIL FROM, RCPT TO, DATA, QUIT) e invia un vero messaggio di prova: con strumenti integrati, senza strumenti aggiuntivi.
- Host / server
-
mail.example.comModifica nel generatore → - Destinatario
-
recipient@example.comModifica nel generatore →
PowerShell (Windows)
TcpClient (.NET) Integrato
$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 Strumento aggiuntivo
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)" Shell Unix (bash)
bash /dev/tcp Integrato
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 Strumento aggiuntivo
swaks --server mail.example.com:25 --from sender@example.com --to recipient@example.com Il flusso grezzo viaggia in chiaro sulla porta 25, adatto a un relay o all'MX senza autenticazione. Per la porta 587 con STARTTLS e AUTH usate swaks o openssl. Send-MailMessage è ufficialmente deprecato, ma funziona ancora.