GNU/Linux >> Tutoriales Linux >  >> Linux

9 ejemplos de comandos mail/mailx para enviar correos electrónicos desde la línea de comandos en Linux

Enviar correos desde la línea de comandos

El comando de correo es esencial y debe estar disponible en cualquier servidor Linux para que varios servicios y otras aplicaciones web puedan generar y transmitir correos electrónicos.

En una publicación anterior sobre el comando de correo, vimos cómo se puede usar el comando de correo para enviar correos electrónicos desde la línea de comandos en su servidor Linux.

En este tutorial usaremos una versión mejorada del comando de correo. Se llama mailx (o simplemente mail cuando está instalado), y puede hacer muchas más cosas que las que puede hacer el antiguo comando mail del paquete gnu mailutils.

¿Cómo funciona?

El comando mail/mailx necesita un servidor smtp local (MTA) en ejecución para entregar los correos electrónicos. La ruta tomada por el correo electrónico es algo así:

mail -> sendmail -> local MTA -> recipient MTA [Inbox]

El MTA del destinatario sería el servidor smtp de gmail si su destinatario es alguien en gmail.com, por ejemplo. Para el MTA local, debe instalar un servidor smtp como Postfix. Una instalación básica de Postfix con una configuración mínima funcionaría en la mayoría de los casos.

Instala el comando mailx

En los sistemas basados ​​en Ubuntu/Debian, el comando mailx está disponible en 2 paquetes diferentes -

1. reliquia-mailx
2. bsd-mailx

Usaremos el paquete heirloom-mailx porque tiene más características y opciones.
En los sistemas basados ​​en CentOS/Fedora, solo hay un paquete llamado "mailx" que es el paquete heirloom.

Para averiguar qué paquete mailx está instalado en su sistema, verifique la salida "man mailx" y desplácese hacia abajo hasta el final; debería ver información útil.

# ubuntu/debian
$ sudo apt-get install heirloom-mailx
# fedora/centos
$ sudo yum install mailx

Usando el comando mailx

Una vez instalado, se puede hacer referencia directa al comando mailx con el nombre mail, por lo que solo debe escribirlo en la línea de comando.

1. Correo sencillo

Ejecute el siguiente comando, y luego mailx esperará a que ingrese el mensaje del correo electrónico. Puede presionar enter para nuevas líneas. Cuando termine de escribir el mensaje, presione Ctrl+D y mailx mostrará EOT.

Luego, mailx envía automáticamente el correo electrónico al destino.

$ mail -s "This is the subject" [email protected]
Hi someone
How are you
I am fine
Bye
EOT

2. Tomar mensaje de un archivo

El cuerpo del mensaje del correo electrónico también se puede tomar de un archivo.

$ mail -s "This is Subject" [email protected] < /path/to/file

El mensaje también se puede canalizar usando el comando echo -

$ echo "This is message body" | mail -s "This is Subject" [email protected]

3. Múltiples destinatarios

Para enviar el correo a varios destinatarios, especifique todos los correos electrónicos separados por una coma

$ echo "This is message body" | mail -s "This is Subject" [email protected],[email protected]

4. CC y CCO

Las opciones "-c" y "-b" se pueden usar para agregar direcciones CC y BCC respectivamente.

$ echo "This is message body" | mail -s "This is Subject" -c [email protected] [email protected]

5. Especifique De nombre y dirección

Para especificar un nombre y una dirección "DE", utilice la opción "-r". El nombre debe ir seguido de la dirección entre "<>".

$ echo "This is message body" | mail -s "This is Subject" -r "Harry<[email protected]>" [email protected]

6. Especifique la dirección "Responder a"

La respuesta a la dirección se configura con la variable de opción interna "replyto" usando la opción "-S".

# replyto email
$ echo "This is message" | mail -s "Testing replyto" -S replyto="[email protected]" [email protected]
# replyto email with a name
$ echo "This is message" | mail -s "Testing replyto" -S replyto="Mark<[email protected]>" [email protected]

7. Adjuntos

Los archivos adjuntos se pueden agregar con la opción "-a".

$ echo "This is message body" | mail -s "This is Subject" -r "Harry<[email protected]>" -a /path/to/file [email protected]

8. Usar servidor SMTP externo

Esta es una característica exclusiva, que obtiene solo con heirloom mailx y no con bsd mailx, o el comando de correo de gnu mailutils o el comando mutt.

El comando mailx puede usar un servidor smtp externo para retransmitir el mensaje hacia adelante. La sintaxis es un poco larga pero tiene sentido.

$ echo "This is the message body and contains the message" | mailx -v -r "[email protected]" -s "This is the subject" -S smtp="mail.example.com:587" -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user="[email protected]" -S smtp-auth-password="abc123" -S ssl-verify=ignore [email protected]

Aquí hay un desglose

$ echo "This is the message body and contains the message" | mailx -v \
> -r "[email protected]" \
> -s "This is the subject" \
> -S smtp="mail.example.com:587" \
> -S smtp-use-starttls \
> -S smtp-auth=login \
> -S smtp-auth-user="[email protected]" \
> -S smtp-auth-password="abc123" \
> -S ssl-verify=ignore \
> [email protected]

Puede usar los servidores smtp de gmail y enviar correos electrónicos a través de su cuenta de gmail. ¡Eso es genial!
Para Gmail específicamente, necesitaría habilitar configuraciones de aplicaciones menos seguras antes de poder enviar correos como ese.

9. Verbose - ver comunicación SMTP

Cuando utilice servidores smtp externos, puede optar por ver toda la comunicación smtp que se realiza en segundo plano. Esto es especialmente útil al probar o depurar servidores smtp.

$ echo "This is the message body and contains the message from heirloom mailx" | mailx -v -s "This is the subject" -S smtp="smtp.gmail.com:587" -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user="[email protected]" -S smtp-auth-password="mypassword" -S ssl-verify=ignore [email protected]
Resolving host smtp.gmail.com . . . done.
Connecting to 74.125.68.109:587 . . . connected.
220 mx.google.com ESMTP je4sm32812877pbd.94 - gsmtp
>>> EHLO enlightened
250-mx.google.com at your service, [122.163.43.21]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
>>> STARTTLS
220 2.0.0 Ready to start TLS
>>> EHLO enlightened
250-mx.google.com at your service, [122.163.43.21]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
>>> AUTH LOGIN
334 VXNlcmU6
>>> YmnbWFpbC5jb20=
334 UGFzcmQ6
>>> KnJgzKg==
235 2.7.0 Accepted
>>> MAIL FROM:<[email protected]>
250 2.1.0 OK je4sm32812877pbd.94 - gsmtp
>>> RCPT TO:<[email protected]>
250 2.1.5 OK je4sm32812877pbd.94 - gsmtp
>>> DATA
354  Go ahead je4sm32812877pbd.94 - gsmtp
>>> .
250 2.0.0 OK 1417930703 je4sm32812877pbd.94 - gsmtp
>>> QUIT
221 2.0.0 closing connection je4sm32812877pbd.94 - gsmtp

Resolución de problemas

En caso de que los correos no se entreguen correctamente, debe verificar algunas cosas. Lo primero que debe verificar es que un servidor smtp (mta) se esté ejecutando localmente. El comando netstat puede decir que

$ sudo netstat -ltnp | grep 25
[sudo] password for enlightened:
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      2541/master
tcp6       0      0 :::25                   :::*                    LISTEN      2541/master

Si se está ejecutando un servidor stmp como Postfix y los correos aún no se envían, intente volver a configurar Postfix, por ejemplo. En los sistemas Ubuntu/Debian, esto se puede hacer con el comando dpkg-reconfigure

$ sudo dpkg-reconfigure postfix

Luego vuelva a intentarlo, el comando de correo y debería funcionar. Si aún no lo hace, intente ponerse en contacto con su proveedor de servidor.

No hay correos de sistemas locales

Si intenta enviar correos desde su computadora local a una dirección de Gmail, lo más probable es que su correo sea rechazado, así que no intente hacerlo.

Esto se debe a que las computadoras ordinarias conectadas a una dirección de Internet tienen una dirección IP que no está asociada con ningún dominio válido como tal, y Gmail verifica estrictamente dichas credenciales antes de aprobar el envío de cualquier correo.

Notas y recursos

Además de mailx, existen otras herramientas como Swaks y smtp-cli que se pueden usar para enviar correos desde la línea de comandos y admiten varias funciones, como especificar servidores smtp y agregar archivos adjuntos, etc.

Sin embargo, el comando mailx está disponible en los repositorios predeterminados de las distribuciones más comunes, por lo que se puede instalar fácilmente. Además, mantiene una sintaxis muy similar a la del comando de correo, lo que lo convierte en un reemplazo directo del comando de correo anterior.

El comando mailx incluso es capaz de leer correos electrónicos de servidores IMAP remotos, pero eso es algo que mantuvimos fuera de esta publicación y hablaremos más adelante. Para obtener más información, consulte la página de manual para el comando mailx con "man mailx".


Linux
  1. ¿Cómo enviar un correo electrónico Html usando el comando 'mail' de Linux?

  2. 15 ejemplos para dominar la historia de la línea de comandos de Linux

  3. Ejemplos de comandos mailq en Linux

  4. enviar correo desde la terminal de linux en una línea

  5. ¿Cómo envío un mensaje a mi socket.io websocket desde la línea de comando en Linux?

Programe hardware desde la línea de comandos de Linux

Comando Diff en Linux con ejemplos

Comando mailx en linux:enviar y recibir correo de Internet

Enviar correo electrónico en Linux desde la línea de comandos

Uso del comando sed de Linux con ejemplos

Mutt, Mail y Telnet:envíe correos electrónicos desde la línea de comando o terminal de Linux