¿Puerto accesible?

Comprueba si el puerto SMTP (25, 587 o 465) está abierto desde su ubicación actual.

SMTP (25)

PowerShell (Windows)

Test-NetConnection Integrado

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

nc / ncat Herramienta adicional

ncat -vz mail.example.com 25

Shell de Unix (bash)

bash /dev/tcp Integrado

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

nc Herramienta adicional

nc -vz mail.example.com 25

Submission (587)

PowerShell (Windows)

Test-NetConnection Integrado

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

nc / ncat Herramienta adicional

ncat -vz mail.example.com 587

Shell de Unix (bash)

bash /dev/tcp Integrado

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

nc Herramienta adicional

nc -vz mail.example.com 587

SMTPS (465)

PowerShell (Windows)

Test-NetConnection Integrado

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

nc / ncat Herramienta adicional

ncat -vz mail.example.com 465

Shell de Unix (bash)

bash /dev/tcp Integrado

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

nc Herramienta adicional

nc -vz mail.example.com 465

Banner + EHLO

Abre la conexión, lee el banner 220 y la respuesta EHLO con las capacidades ofrecidas.

Eigener Mailserver

PowerShell (Windows)

TcpClient (.NET) Integrado

$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 Herramienta adicional

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

Shell de Unix (bash)

bash /dev/tcp Integrado

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

nc Herramienta adicional

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

Microsoft 365

PowerShell (Windows)

TcpClient (.NET) Integrado

$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 Herramienta adicional

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

Shell de Unix (bash)

bash /dev/tcp Integrado

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 Herramienta adicional

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

Probar STARTTLS

Establece una conexión STARTTLS y muestra el certificado.

Submission (587)

PowerShell (Windows)

SslStream (.NET) Integrado

$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 Herramienta adicional

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

Shell de Unix (bash)

openssl Integrado

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 Herramienta adicional

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

Microsoft 365

PowerShell (Windows)

SslStream (.NET) Integrado

$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 Herramienta adicional

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

Shell de Unix (bash)

openssl Integrado

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 Herramienta adicional

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

Después puede seguir escribiendo a mano (EHLO, luego QUIT). openssl es una herramienta adicional, disponible en Windows p. ej. con Git for Windows, y también funciona dentro de PowerShell.

TLS implícito (465)

Se conecta directamente con TLS en el puerto 465 (SMTPS, TLS implícito).

Impliztes TLS (465)

PowerShell (Windows)

SslStream (.NET) Integrado

$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 Herramienta adicional

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

Shell de Unix (bash)

openssl Integrado

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

swaks Herramienta adicional

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

Enviar mensaje de prueba (flujo SMTP)

Construye línea a línea la conversación SMTP completa (EHLO, MAIL FROM, RCPT TO, DATA, QUIT) y envía un mensaje de prueba real: con herramientas integradas, sin herramientas adicionales.

PowerShell (Windows)

TcpClient (.NET) Integrado

$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 Herramienta adicional

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 de Unix (bash)

bash /dev/tcp Integrado

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 Herramienta adicional

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

El flujo en bruto viaja sin cifrar por el puerto 25, adecuado para un relay o el MX sin autenticación. Para el puerto 587 con STARTTLS y AUTH, use swaks u openssl. Send-MailMessage está oficialmente obsoleto, pero sigue funcionando.

Otras áreas