Si usted es un desarrollador que trabaja sin parar en la línea de comandos de Linux o un administrador de servidor que desea registros u otros datos extraídos de los sistemas administrados, saber cómo enviar correo electrónico desde la línea de comandos es muy útil.
en este post, encontrarás ejemplos de cómo enviar correo electrónico desde el terminal. Veremos configuraciones personalizadas y veremos cómo configurar conexiones SMTP a cuentas de correo electrónico o proveedores de servicios de correo electrónico., Le mostraré cómo instalar los paquetes de correo de consola necesarios y proporcionar antecedentes para las opciones de línea de comandos basadas en los manuales del paquete.
configurar paquetes de correo de línea de órdenes
todos los paquetes de correo del tutorial están disponibles a través del gestor de paquetes avanzado de Debian, por lo que los pasos de instalación del ejemplo siguiente pueden usarse para todos los paquetes mostrados.,
tenga en cuenta que estas piezas de software pueden ser instaladas por otros administradores de paquetes predeterminados, como yum
o dnf
dependiendo de la distribución de su sistema Linux.
en la mayoría de los casos, sendmail
o postfix
está disponible en cada distribución de Linux fuera de la caja o al menos eso es lo que dicen publicaciones de blog similares. O tengo mala suerte o los demás estaban equivocados, pero tuve que instalar uno manualmente. Sin embargo, definitivamente necesita uno de ellos para la entrega de correo electrónico.,
configurando Sendmail con el paquete ssmtp
continuaré consendmail
y el paquete SSMTP. Ssmtp contiene el paquete sendmail
bajo el capó como verá y facilita la configuración, que es bastante difícil para sendmail
de lo contrario.
Paso 1., Compruebe si el paquete de correo de línea de comandos está instalado
escriba el nombre del paquete de correo de la misma manera que ejecutaría el comando, para comprobar si está disponible:
-
Si el paquete está instalado, el comando se ejecuta y el mensaje cambia — mientras intenta ejecutar el comando — y verá un cursor parpadeante seguido del mensaje
Recipient names must be specified
en el caso desendmail
. Conclusión: el paquete está instalado., -
Si el paquete NO está instalado, usted recibirá un mensaje de advertencia, y una sugerencia de cómo instalarlo:
En este ejemplo, he intentado si el sendmail
comando funciona. Después de agregar el paquete SSMTP, este comando y el comando ssmtp
funcionarán y cambiarán el símbolo del sistema en el terminal. ¡Veamos eso!
Paso 2., Instalación de Sendmail paquete de correo de línea de comandos
como la salida de terminal sugirió, necesitamos ejecutar el comando de instalación del administrador de paquetes avanzado-generalmente con permiso de root-para instalar el paquete necesario. Como se mencionó anteriormente, las configuraciones son mucho más simples para sendmail
cuando abstrae la complejidad de la configuración. Que se puede hacer con SSMTP:
sudo apt install ssmtp
Paso 3. Verifique la instalación
Después de completar la instalación, puede verificar si sendmail
puede reenviar mensajes., Escriba el siguiente código en el terminal:
echo "Subject: hello" | sendmail [email protected]
debería enviar el correo electrónico si todo funciona correctamente. Aquí la cadena "hello"
canalizada al comando sendmail
será el asunto del mensaje enviado, mientras que la dirección de correo electrónico definida es naturalmente el destinatario del correo electrónico.
ejecuta el comando… y, oops: sendmail: Cannot open mailhub:25
. La razón de esto es que no proporcionamos la configuración de mailhub en absoluto. Para reenviar mensajes, necesita un servidor SMTP configurado., Ahí es donde SSMTP Funciona realmente bien: solo necesita editar su archivo de configuración una vez, y ya está listo.
Paso 4. Configurando SSMTP
localicemos el archivo de configuración en /etc/ssmtp/ssmtp.conf
. Aquí, debe poner el código a continuación para configurar un relé SMTP:
esto significa que configura un servicio externo que realmente reenviará sus correos electrónicos. Cuando proporcionas credenciales a Gmail, por ejemplo, verás los mensajes enviados desde el terminal en el directorio de correo enviado de tu buzón. Las configuraciones se ven similares con otros servicios también.,
Esta fue la configuración básica para sendmail
y los pasos de instalación para cualquier paquete de correo de línea de comandos utilizado con frecuencia. A continuación, vamos a saltar en la instalación y probar varios otros paquetes.
enviar correo electrónico usando el comando ssmtp
Esta es una pequeña herramienta agradable que acabamos de configurar para la entrega de correo. Como sugiere su página man
, es un emulador minimalista de sendmail
. Como tal, ssmtp permite a los usuarios transferir correos electrónicos a través de un servidor SMTP desde la línea de comandos de Linux., Proporciona los medios para conectarse a un mailhub con un archivo de configuración adecuado. Si su archivo de configuración se configuró correctamente, todas sus preocupaciones con respecto al envío de correo electrónico de línea de comandos pueden desaparecer.
implementación básica del comando SSTMP:
si solo usa SSMTP, el comando debe verse de la siguiente manera:
ssmtp [email protected] < mail.txt
siguiendo el comando ssmtp
, debe poner la dirección del destinatario, luego puede incluir un archivo que se mostrará en el cuerpo del correo electrónico. Aquí puede definir encabezados para el mensaje, enumerar otros destinatarios y establecer el tipo de contenido., De esta manera puede enviar correos electrónicos HTML. Ssmtp interpretará su mensaje y utilizará los valores proporcionados correctamente. Aquí hay un ejemplo de un HTML que puede enviar:
realmente no puede dar más opciones con SSMTP ya que no son respetadas por su diseño minimalista.
solución de problemas:
en caso de que se encuentre con el siguiente error en la línea de comandos:
es probable que esto se deba a que Gmail no está tratando SSMTP como una aplicación segura. Para deshacerse de este error, debe cambiar la configuración de su cuenta de Gmail; también puede buscar más información sobre los riesgos potenciales allí.,
enviar correo electrónico usando el comando Sendmail
desde hace bastante tiempo sendmail es el agente de transferencia de correo clásico del mundo de UNIX. Se introdujo por primera vez en 1979 y su naturaleza altamente configurable y escalabilidad lo convirtieron en el destino predeterminado para los administradores de servidores.,
ya hemos visto cómo enviar correos electrónicos básicos con el comando ssmtp
, así que vamos a ver la diferencia usando sendmail
:
echo "Subject: hello" | sendmail -v [email protected] < mail.txt
añadí el argumento, que hará visible la comunicación entre el servidor de correo y su agente de transferencia de correo.
Hay muchas configuraciones que puede usar si configura su propio servidor de correo e implementa sendmail en él. Sin embargo, eso está fuera del alcance de este artículo. Volveremos al tema en una próxima. Estad atentos.,
enviar correo electrónico usando el comando CURL
esta herramienta también es tremendamente común para la transferencia de datos desde un servidor. Soporta muchos protocolos, como HTTP, FTP, POP3 o SMTP. El paquete CURL se usa ampliamente en todo el mundo, una razón principal es que tiene implementación nativa de PHP y PHP fue el lenguaje de scripting predeterminado del lado del servidor durante mucho tiempo.
Instalación:
Compruebe si el paquete ya está instalado., Si no ejecuta lo siguiente:
sudo apt install curl
Cuando haya terminado, puede acceder a la hoja de trucos para las opciones disponibles para CURL ejecutando curl -h
. La versión más detallada es accesible por cualquiera de man curl
o curl --manual
. Si quieres obtener un conocimiento profundo usando cURL, hay este práctico Ebook que contiene todo lo que siempre querrías saber.
implementación básica para el envío de correo electrónico con CURL:
para enviar un correo electrónico con CURL, debe configurar la conexión SMTP., La mayoría de las veces, los servidores de correo saliente de Google o Yahoo se utilizan para probar el envío de correo electrónico con SMTP. Tenga en cuenta que debe activar el acceso para aplicaciones menos seguras en la configuración de Gmail y ajustes de seguridad adicionales similares pueden aplicarse para Yahoo también.
en el fragmento de comando de terminal anterior, los parámetros --url
y --user
definen la configuración de conexión SMTP. La sección de contraseña para el parámetro --user
es la contraseña de su cuenta para la dirección de correo electrónico dada. Naturalmente, también podría utilizar proveedores de servicios de correo electrónico en la nube., Voy a mostrar que el uso de Mailgun en la siguiente sección.
implementación avanzada para el envío de correo electrónico con CURL:
Al trabajar con plataformas de entrega de correo electrónico, primero debe obtener una clave API. En este tutorial, te mostraré el ejemplo de envío de correo electrónico CURL usando Mailgun, por lo que si te quedas atascado durante el proceso de registro, sigue esta guía de configuración para ponerte en el camino correcto.
La sintaxis es bastante sencilla. Es posible que lo haya notado antes, pero debe terminar cada línea del comando con caracteres \
., Este es un carácter de continuación de línea, el comando se puede ejecutar sin todos ellos en una línea también. La otra cosa a recordar es la opción -F
. Un extracto de la página de manual:
-F, --form <name=content> (HTTP) This lets curl emulate a filled-in form in which a user has pressed the submit button. This causes curl to POST data using the Content-Type multipart/form-data according to RFC 2388. This enables uploading of binary files etc. To force the 'content' part to be a file, prefix the file name with an @sign.
como animé antes, es una buena práctica sumergirse en los manuales cuando se utilizan estos comandos de correo de línea de comandos. Como dice el manual de CURL, básicamente estás creando un formulario para enviar. Cada línea es una entrada dada como un par name=content
. Cuando adjunte archivos desde su máquina local, necesita un @
delante del nombre del archivo.,
así es como se verá el correo electrónico entregado:
usted podría hacer lo mismo usando la mayoría de las otras plataformas de entrega de correo electrónico, como Sendgrid, por ejemplo.
enviar correo electrónico HTML desde la línea de comandos con CURL:
Puede aplicar la misma lógica de construir un formulario en un archivo de texto, lo que le permite enviar mensajes HTML fácilmente:
Si ejecuta el comando simple del primer ejemplo…
solución de problemas:
es posible que necesite el interruptor --insecure
, que permite a CURL realizar conexiones y transferencias SSL «inseguras»., CURL devolverá un mensaje de error si el servidor remoto está utilizando un certificado autofirmado o si el certificado del servidor remoto no está firmado por una CA que figure en el archivo CA cert.
enviando correo electrónico usando el comando Swaks
como indica su documentación, Swaks es una herramienta de prueba SMTP flexible, programable y orientada a transacciones. Es capaz de manejar características y extensiones SMTP como TLS, autenticación y canalización y varias versiones de los protocolos SMTP. También es compatible con múltiples métodos de transporte, incluyendo sockets de dominio UNIX, sockets de dominio de internet y tuberías para procesos generados.,
instalación:
sudo apt install swaks
implementación básica para el envío de correo electrónico con Swaks:
para conectarse a una cuenta SMTP debe proporcionar el servidor -s
, el usuario -au
, la contraseña -ap
y la dirección -t
(donde desea enviar su correo) banderas. La bandera -tls
también es importante si se conecta en el puerto 587
.,
swaks --to [email protected] -s smtp.gmail.com:587 -tls -au <user-account> -ap <account-password>
las credenciales también se pueden proporcionar a través de las indicaciones de la línea de comandos, si solo especifica autenticar -a
, no rellenando el Usuario y la contraseña a través de las opciones de la línea de comandos.
implementación avanzada para el envío de correo electrónico con Swaks:
swaks --to [email protected] -s smtp.gmail.com:587 -tls -au <user-account> -ap <account-password> --attach -d ./mail.txt
hay otras opciones que no tocaremos ahora. Vamos a la cabeza a nuestro próximo paquete de correo!
enviar correo electrónico usando el comando Mutt
Mutt es diferente de los clientes de correo electrónico anteriores, ya que es un cliente de correo electrónico de línea de comandos rico en funciones., Puede usarlo para leer correos electrónicos desde el terminal Linux, conectarse a los buzones de correo de los usuarios locales o a los servidores POP/IMAP. Mutt soporta varios formatos de buzón como mbox, MH, maildir, MMDF, control total de los encabezados de los mensajes durante la composición del correo electrónico, y múltiples etiquetas de mensajes y colores para manejar los mensajes.
instalación:
sudo apt install mutt
implementación básica para el envío de correo electrónico con mutt:
en este momento no se sorprenderá por la estructura del comando., Puede proporcionar un cuerpo de mensaje vacío con < /dev/null
:
# mutt -s "Test Email" [email protected] < /dev/null
implementación avanzada para el envío de correo electrónico con mutt:
para enviar correo electrónico incluyendo archivos adjuntos, necesita la bandera -a
. De esta manera puede enviar archivos útiles, como registros del sistema, a una dirección especificada.
# mutt -s "System logs" -a /opt/backup.sql [email protected] < /dev/null
También puede enviar correo electrónico HTML si la extensión de archivo que agrega al cuerpo del mensaje está en formato HTML., Mutt reconocerá el tipo de archivo y lo resolverá para que no envíe su HTML como texto plano:
mutt -s "Email subject" [email protected] < email.html
esto es para el envío de correo electrónico con mutt. Si lo tiene en su máquina, le sugiero que pruebe cómo puede trabajar con la configuración entrante de su buzón y el manejo de los mensajes entrantes. Si lo hace, por favor comparta sus pensamientos en la sección de comentarios a continuación. Doy la bienvenida a cualquier opinión sobre los paquetes que se muestran en el tutorial.
enviar correo electrónico usando el comando Mailx
Mailutils es un paquete compuesto para múltiples casos de uso., Está diseñado para servir a usuarios regulares, administradores de sistemas y desarrolladores. Solo tocaremos sus funcionalidades básicas con respecto al reenvío de correo electrónico. Si está interesado en más funciones, consulte su página man
.
instalación:
sudo apt install mailutils
implementación básica para el envío de correo electrónico con mailx:
El paquete mailx tiene 2 sintaxis de comandos iguales (mail
y mailx
ambos funcionan exactamente de la misma manera)., El comando más simple consiste en el comando mail/mailx
y la dirección a la que enviar el correo, pero probablemente incluiría el asunto y al menos algún cuerpo del mensaje basado en texto. Este comando debería tener este aspecto:
echo "message body" | mail -s "subject" [email protected]
Usando el comando echo
y canalizando la salida al comando mail
, puede evitar las solicitudes adicionales de mailx para direcciones Cc y el cuerpo del mensaje.,
implementación avanzada para el envío de correo electrónico con mailx:
para el ejemplo avanzado, volveremos a enviar un correo electrónico HTML completo. Necesitamos proporcionar el archivo HTML de correo electrónico de nuestra elección con el carácter <
y agregar el «Agregar bandera» con el tipo de contenido. El código completo se ve como sigue:
mailx -a 'Content-Type: text/html' -s "This is advanced mailx indeed!" < email.html "[email protected], [email protected]"
También puede establecer una dirección de retorno con --return-address=<EMAIL-ADDRESS>
, que puede ser útil., Otra opción útil, que no pude resolver para trabajar con HTML email parallel, es proporcionar archivos adjuntos en el mismo mensaje: -A "mail.txt"
. Aunque puede enumerar varios destinatarios, solo se puede adjuntar un solo archivo adjunto. Puede configurar un servidor SMTP externo si le apetece.
Usando el comando openssl alternativo Telnet
Telnet es un protocolo de comunicación interactivo para la comunicación con otro host. Podría usarse para abrir una conexión SMTP a otro servidor y transferir mensajes de correo electrónico., Sin embargo, como el protocolo no está protegido, la mayoría de los servidores rechazarán este tipo de comunicación. Aquí es donde Openssl entra en escena, ya que está construido con seguridad SSL/TLS incluida. Se invoca de manera similar a telnet con un argumento host, y ejecuta un comando open implícitamente:
indenté las entradas que necesita proporcionar mientras el canal de comunicación está abierto. Estas entradas se explican por sí mismas, pero una cosa que necesito detallar es el hash de la contraseña. Puede ser un hash codificado en base64, que puede obtener con el siguiente comando: echo -en '\[email protected]\000gmailpassword' | base64
., Los caracteres de escape de la cadena no se pueden omitir. Si no tiene instalado el paquete base64, está disponible a través de los gestores de paquetes.
como se puede ver anteriormente, este medio de envío de correo electrónico solo proporciona una interfaz para mensajes basados en texto, por lo que tiene su limitación en casos de uso. Por otro lado, muestra toda la información intercambiada con el servidor de correo, lo que facilita la depuración.
solución de problemas de correo
compruebe los registros de correo
necesita localizar su archivo de registro navegando a la carpeta correspondiente. Prefiero usar mi editor de código (ej., Sublime Text) para esto, así que puedo tener los registros con resaltado de sintaxis:
$ sudo subl /var/log
dependiendo de su distribución actual de Linux, puede que necesite buscar diferentes fuentes.
el registro puede contener información útil sobre problemas de entregabilidad. En este punto, al desplazarse hasta la parte inferior de esto:
Puede inspeccionar si la entrega se realiza correctamente o comprender por qué el proceso falló.,
puede suceder que su consola no muestre errores, pero en el registro de correo puede ver que el mensaje estaba en cola para la entrega, por lo que el proceso no se detuvo en su máquina, sino que probablemente fue denegado por el servidor de correo al que estaba tratando de llegar.
ejecutar todos los comandos en una secuencia
por lo tanto, todo está listo para la prueba final. Todos los comandos de terminal de mailer están reunidos aquí en un archivo de script. Una vez que haya descargado la carpeta de trabajo con el archivo de script, vaya a la carpeta contenedora y haga que el script sea ejecutable: chmod u+x mail.sh
., Si tiene listos todos los archivos que proporcioné, puede comenzar a probar los comandos de mailer que se muestran en el tutorial. Solo necesita reemplazar el "<RECIPIENT ADDRESS>"
a su dirección de correo electrónico de prueba en el código y ejecutar ./mail.sh
en la línea de comandos.
una vez que el script termine de ejecutarse, su bandeja de entrada se llenará con los correos electrónicos de prueba.
¡Bien hecho!
resumen
en este artículo, te mostré muchas formas de enviar correos electrónicos desde la línea de comandos de Linux. Con suerte, basado en lo que vio, puede instalar y configurar estos servicios en su máquina usted mismo también.,
la publicación mostró los paquetes de correo de línea de comandos más utilizados y cómo enviar correos electrónicos con ellos, y al final, creé un script de shell que reúne todos los comandos utilizados en el artículo. Puede descargar los archivos de trabajo de los proyectos aquí, y si instala los paquetes introducidos en el tutorial y también rellena sus credenciales y los detalles del destinatario, puede ejecutar el script a su gusto.