Är porten nåbar?

Kontrollerar om SMTP-porten (25, 587 eller 465) är öppen från din nuvarande plats.

SMTP (25)

PowerShell (Windows)

Test-NetConnection Inbyggt

Test-NetConnection -ComputerName mail.example.com -Port 25

nc / ncat Tilläggsverktyg

ncat -vz mail.example.com 25

Unix-skal (bash)

bash /dev/tcp Inbyggt

timeout 5 bash -c "</dev/tcp/mail.example.com/25" && echo open || echo closed

nc Tilläggsverktyg

nc -vz mail.example.com 25

Submission (587)

PowerShell (Windows)

Test-NetConnection Inbyggt

Test-NetConnection -ComputerName mail.example.com -Port 587

nc / ncat Tilläggsverktyg

ncat -vz mail.example.com 587

Unix-skal (bash)

bash /dev/tcp Inbyggt

timeout 5 bash -c "</dev/tcp/mail.example.com/587" && echo open || echo closed

nc Tilläggsverktyg

nc -vz mail.example.com 587

SMTPS (465)

PowerShell (Windows)

Test-NetConnection Inbyggt

Test-NetConnection -ComputerName mail.example.com -Port 465

nc / ncat Tilläggsverktyg

ncat -vz mail.example.com 465

Unix-skal (bash)

bash /dev/tcp Inbyggt

timeout 5 bash -c "</dev/tcp/mail.example.com/465" && echo open || echo closed

nc Tilläggsverktyg

nc -vz mail.example.com 465

Banner + EHLO

Öppnar anslutningen, läser 220-bannern och EHLO-svaret med de erbjudna funktionerna.

Eigener Mailserver

PowerShell (Windows)

TcpClient (.NET) Inbyggt

$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 Tilläggsverktyg

"EHLO test.example.com`r`nQUIT`r`n" | ncat mail.example.com 25

Unix-skal (bash)

bash /dev/tcp Inbyggt

exec 3<>/dev/tcp/mail.example.com/25
printf 'EHLO test.example.com\r\nQUIT\r\n' >&3
cat <&3
exec 3<&-

nc Tilläggsverktyg

( printf 'EHLO test.example.com\r\nQUIT\r\n'; sleep 1 ) | nc mail.example.com 25

Microsoft 365

PowerShell (Windows)

TcpClient (.NET) Inbyggt

$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 Tilläggsverktyg

"EHLO test.example.com`r`nQUIT`r`n" | ncat contoso-com.mail.protection.outlook.com 25

Unix-skal (bash)

bash /dev/tcp Inbyggt

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 Tilläggsverktyg

( printf 'EHLO test.example.com\r\nQUIT\r\n'; sleep 1 ) | nc contoso-com.mail.protection.outlook.com 25

Testa STARTTLS

Upprättar en STARTTLS-anslutning och visar certifikatet.

Submission (587)

PowerShell (Windows)

SslStream (.NET) Inbyggt

$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 Tilläggsverktyg

openssl s_client -starttls smtp -crlf -connect mail.example.com:587 -servername mail.example.com

Unix-skal (bash)

openssl Inbyggt

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 Tilläggsverktyg

swaks --server mail.example.com:587 -tls --quit-after TLS

Microsoft 365

PowerShell (Windows)

SslStream (.NET) Inbyggt

$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 Tilläggsverktyg

openssl s_client -starttls smtp -crlf -connect smtp.office365.com:587 -servername smtp.office365.com

Unix-skal (bash)

openssl Inbyggt

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 Tilläggsverktyg

swaks --server smtp.office365.com:587 -tls --quit-after TLS

Därefter kan du fortsätta skriva manuellt (EHLO, sedan QUIT). openssl är ett tilläggsverktyg, tillgängligt i Windows t.ex. via Git for Windows, och fungerar även i PowerShell.

Implicit TLS (465)

Ansluter direkt med TLS på port 465 (SMTPS, implicit TLS).

Impliztes TLS (465)

PowerShell (Windows)

SslStream (.NET) Inbyggt

$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 Tilläggsverktyg

openssl s_client -connect mail.example.com:465 -servername mail.example.com

Unix-skal (bash)

openssl Inbyggt

openssl s_client -connect mail.example.com:465 -servername mail.example.com </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates

swaks Tilläggsverktyg

swaks --server mail.example.com -p 465 --tlsc --quit-after BANNER

Skicka testmeddelande (SMTP-ström)

Bygger hela SMTP-dialogen rad för rad (EHLO, MAIL FROM, RCPT TO, DATA, QUIT) och skickar ett riktigt testmeddelande: med inbyggda verktyg, utan tilläggsverktyg.

PowerShell (Windows)

TcpClient (.NET) Inbyggt

$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 Tilläggsverktyg

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-skal (bash)

bash /dev/tcp Inbyggt

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 Tilläggsverktyg

swaks --server mail.example.com:25 --from sender@example.com --to recipient@example.com

Den råa strömmen går okrypterat på port 25, lämpligt för ett relä eller MX utan autentisering. För port 587 med STARTTLS och AUTH, använd swaks eller openssl. Send-MailMessage är officiellt föråldrat men fungerar fortfarande.

Andra områden