¿Cómo mandar un correo por línea de comandos?

[Read this post in English]

 

Para enviar un correo por línea de comando se deben seguir exactamente los mismos pasos que los que se harían para enviarlo por un cliente de correo normal como Outlook. Esto quiere decir que se deben enviar al menos los siguientes comandos y en el orden especificados:

  1. EHLO
  2. MAIL
  3. RCPT
  4. DATA
  5. QUIT

Para comenzar con el envío de correo por línea de comando abrimos un CMD en Windows (Botón inicio -> Ejecutar y tecleamos “cmd” sin comillas y Enter). En Linux ó UNIX simplemente abrimos una terminal con nuestro usuario root ó cualquier otro. En nuestra línea de comandos escribimos la siguiente línea para comenzar la conexión:

telnet <IP_servidor_de_correo> 25

Por ejemplo:

telnet 192.168.0.10 25

Obtendremos una línea similar a esta:

220 hub.rskala.com Microsoft ESMTP MAIL Service, Version: 6.0.3790.3959

Lo importante de esta línea no es el texto sino el código numérico 220 que nos indica que el servidor de correo está listo para conversar con nosotros.

A continuación tecleamos el comando EHLO para identificarnos:

EHLO <FQDN>

Por ejemplo:

EHLO servidor.dominio.com

Obtendremos una línea similar a esta:

250-hub.rskala.com Hello [192.168.0.89]
250-TURN
250-SIZE
250-ETRN
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-8bitmime
250-BINARYMIME
250-CHUNKING
250-VRFY
250-X-EXPS GSSAPI NTLM LOGIN
250-X-EXPS=LOGIN
250-AUTH GSSAPI NTLM LOGIN
250-AUTH=LOGIN
250-X-LINK2STATE
250-XEXCH50
250 OK

Ahora estamos listos para comenzar con la transferencia así que comenzaremos por enviar el comando MAIL FROM para indicarle al servidor cuál es el buzón del remitente:

MAIL FROM:<buzón_de_remitente>

Por ejemplo:

MAIL FROM:<juan_perez@dominio.com>

Obtendremos una línea similar a esta:

250 2.1.0 juan_perez@dominio.com….Sender OK

Ahora debemos indicar cuáles son los buzones de los destinatarios uno por línea. Para esto enviaremos el comando RCPT TO por cada uno de los buzones a los que queremos enviar el correo:

RCPT TO:<buzón_de_destinatario1>
RCPT TO:<buzón_de_destinatario2>
RCPT TO:<buzón_de_destinatarion>

Por ejemplo:

RCPT TO:<usuario@rskala.com>

Obtendremos una línea similar a esta:

250 2.1.5 usuario@rskala.com

Después de que ya agregamos todos los usuarios el siguiente paso es enviar el comando DATA para comenzar a transferir el contenido del correo

DATA

Obtendremos una línea similar a esta:

354 Start mail input; end with <CRLF>.<CRLF>

Ahora comenzamos a escribir el correo. Aquí debemos tomar en cuenta que las primeras líneas que debemos mandar son los encabezados que serán visibles para el usuario como From, To, Cc, Subject, etc. Así que comenzamos por mandar estos encabezados:

From:’Juan Perez’<juan_perez@dominio.com>
To:’Usuario’<usuario@rskala.com>
Subject: Hola rskala este es un correo de prueba

En los encabezados From, To y Cc podemos colocar los encabezados en al menos tres formas. La primera es simplemente el nombre (por ejemplo From: usuario) pero si el nombre lleva un espacio es obligatorio ponerlo como ‘Juan Perez’ entre comillas simples. La segunda forma es poner el buzón del usuarios como From:<juan_perez@dominio.com> y la tercera es la combinación de los dos anteriores que es la sintaxis utilizada arriba. Existen más encabezados que se pueden colocar pero aquí sólo presentamos los básicos. Si necesitas mandar más encabezados los puedes agregar aquí antes de comenzar a mandar el texto del correo.

Ya que terminamos de mandar estos encabezados dejamos una línea en blanco y comenzamos a escribir el cuerpo del correo.

[encabezados]
[línea en blanco]
Este es el cuerpo del correo y es lo que será visible para los usuarios
Saludos desde RSkala!!!
.

Cabe notar que para indicar que el texto ha terminado hay que terminar la transferencia con la sentencia <ENTER>.<ENTER> en lo momento en el que ponemos un punto en una sola línea y tecleamos <ENTER> la transferencia termina y obtendremos una línea similar a esta:

250 2.6.0 <PQtt4VMW5ay00000001@hub.rskala.com> Queued mail for delivery

Con esto la transferencia ha terminado, aquí tenemos la posibilidad de mandar otro correo si volvemos a mandar el comando MAIL. Si ya se trata del último correo que vamos a mandar entonces mandamos el comando QUIT para cerrar la sesión.

QUIT

Obtendremos una línea similar a esta y la sesión terminará de inmediato.

221 2.0.0 hub.rskala.com Service closing transmission channel

Con estos sencillos pasos es posible mandar un correo en texto plano por ejemplo a través de un script automático, desde un script php, desde algún programa o sistema autónomo o simplemente a mano.

Por último presentamos toda la transferencia completa con sus comandos y respuestas:

220 hub.rskala.com Microsoft ESMTP MAIL Service, Version: 6.0.3790.3959
EHLO server.dominio.com
250-hub.rskala.com Hello [192.168.0.89]
250-TURN
250-SIZE
250-ETRN
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-8bitmime
250-BINARYMIME
250-CHUNKING
250-VRFY
250-X-EXPS GSSAPI NTLM LOGIN
250-X-EXPS=LOGIN
250-AUTH GSSAPI NTLM LOGIN
250-AUTH=LOGIN
250-X-LINK2STATE
250-XEXCH50
250 OK
MAIL FROM:<juan_perez@dominio.com>
250 2.1.0 juan_perez@dominio.com….Sender OK
RCPT TO:<usuario@rsakala.com>
250 2.1.5 usuario@rskala.com
DATA
354 Start mail input; end with <CRLF>.<CRLF>
From:’Juan Perez’<juan_perez@dominio.com>
To:’Usuario’<usuario@rskala.com>
Subject: Hola rskala este es un correo de prueba
 
Este es el cuerpo del correo y es lo que será visible para los usuarios
Saludos desde RSkala!!!
.
250 2.6.0 <pr7eIQZKt4jm00000002@rskala.com> Queued mail for delivery
QUIT
221 2.0.0 hub.rskala.com Service closing transmission channel

Para mayor información sobre el funcionamiento del correo electrónico te recomendamos nuestro libro Fundamentos de Correo Electrónico.

2 thoughts on “¿Cómo mandar un correo por línea de comandos?

  1. Pingback: ¿Cómo mandar un correo por línea de comando con sender nulo? | RedinSkala

  2. Pingback: How to manually send a mail using the command line? | RedinSkala

Comments are closed.