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".