viernes, 31 de mayo de 2019

Linux Mandar correo desde la línea de comandos. mutt

Volver

Linux

Mandar correo desde la línea de comandos.

mutt


En un anterior artículo había mandado un correo desde la línea de comandos utilizando curl.
Ante la imposibílidad de mandar adjuntos mediante curl ( yo no lo he podido conseguir ) , he buscado otras soluciones, y he encontrado mutt que está bastante extendido.
Lo primero es instalar el paquete mutt.
    apt install mutt
Creamos los ficheros de configuración.
    mkdir -p ~/.mutt/cache/headers
    mkdir ~/.mutt/cache/bodies
     touch ~/.mutt/certificates
Creamos el archivo de configuración.
    touch ~/.mutt/muttrc
Editamos el fichero de configuración según nuestro servidor de correos.
En mi caso utilizo leafpad como editor.
     leafpad ~/.mutt/muttrc


En mi caso (GMAIL) la configuración del servidor es la siguiente
set ssl_starttls=yes
set ssl_force_tls=yes
 
set imap_user = 'CORREO_ORIGEN@gmail.com'
set imap_pass = 'CONTASEÑA'
 
set from='
CORREO_ORIGEN@gmail.com'
set realname='seta43'
 
set folder = imaps://imap.gmail.com/
set spoolfile = imaps://imap.gmail.com/INBOX
set postponed="imaps://imap.gmail.com/[Gmail]/Drafts"
 
set header_cache = "~/.mutt/cache/headers"
set message_cachedir = "~/.mutt/cache/bodies"
set certificate_file = "~/.mutt/certificates"
 
set smtp_url = 'smtps://
CORREO_ORIGEN@gmail.com:CONTASEÑA@smtp.gmail.com:465/'
 
set move = no
set imap_keepalive = 900




El correo mandado será desde un archivo de texto, que en este caso se llama tarea23_59.txt .
Además se mandan los 3 ficheros adjuntos  gra1.png , gra2.png y datos.txt.

El fichero modelo del correo tiene el siguiente formato:
tarea23_59.txt
ESTADISTICAS DEL DIA
vie may 31 08:37:58 CEST 2019





Se crea script donde a partir de un modelo de correo, solo cambio la última línea donde inserto la fecha.
/home/seta/tareas/tarea1.sh
#!/bin/bash
datecreated=`date`

cd $HOME/tareas

sed -i '$d' tarea23_59.txt
echo
$datecreated >> tarea23_59.txt

mutt -s "temperaturas"  CORREO_DESTINO.com < tarea23_59.txt -a $HOME/www/webcam/gra1.png  -a $HOME/www/webcam/gra2.png  -a $HOME/www/webcam/datos.txt


Ya tenemos el script creado, pero nos falta que el script se ejecute a las 23:59.
Para esta tarea utilizaremos cron.  El comando cron es un administrador regular de procesos en segundo plano que viene de serie en linux.
Para añadir el comando que se debe ejecutar en segundo plano, utilizaremos el comando crontab -e  .
Y editaremos de la siguiente forma:

59 23 * * * /home/seta/tareas/tarea23_59.sh >/dev/null 2>&1

De esta forma el script se ejecutará a las 23:59 .


Saludos
Juan Galaz

Bibliografía:
https://www.garron.me/es/gnu-linux/correo-linea-commands-gmail-mutt.html
https://ubunlog.com/mutt-cliente-correo-terminal/

viernes, 10 de mayo de 2019

Mandar correo desde la línea de comandos y averiguar la IP publica

Volver

Linux

Mandar correo desde la línea de comandos.

Averiguar la IP publica de nuestro router desde la línea de comandos.


En anteriores artículos había realizado un servidor web.
Al no disponer IP fija de mi operadora, al algún caso cuando se reiniciaba el router, se cambiaba la IP pública.
Esto me hacía imposible entrar en mi servidor desde el exterior al no saber la IP en ese momento.
La única forma era mandarme un correo cada cierto tiempo de la IP publica que tengo.
En este artículo explico como averiguar mi IP pública, y cada 12 horas mandar a mi correo personal un correo donde indico la IP publica en ese momento.
El programa que se utiliza para mandar el correo y averiguar la IP pública es curl.
El programa curl es una auténtica navaja suiza, puede trabajar con la mayoría de los protocolos de internet.

Para averiguar nuestra IP pública utilizamos el comando:  
    curl ifconfig.me 
Nos devolvera una dirección IP, que corresponde la IP externa de nuestro router.

Para mandar un correo desde la línea de comandos (el servidor de correos es GMAIL) se utiliza el programa curl con los comandos:
curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd   --mail-from 'correoOrigen@gmail.com' --mail-rcpt 'correoDestino@gmail.com'   --upload-file correo.txt --user 'correoOrigen@gmail.com:CONTRASEÑA' --insecure
Como podéis ver, para mandar un correo necesitamos una cuenta de correos de origen, y una cuenta de correos donde vamos a mandar el correo.
El correo mandado será desde un archivo de texto, que en este caso se llama correo.txt .

El fichero modelo del correo tiene el siguiente formato:
correo.txt
From: "SERVIDOR_PI" <correoOrigen@gmail.com>
To: "Otro Nombre" <
correoDestino@gmail.com>
Subject: AsuntoIP

Hola IP actual
vie may 10 00:00:01 CEST 2019
87.221.154.144


Todo lo anterior se junta en un script donde a partir de un modelo de correo, solo cambio las 2 últimas líneas donde inserto la fecha y la IP pública en ese momento.
/home/seta/tareas/tarea1.sh
#!/bin/bash
datecreated=`date`

cd /home/seta/tareas
echo "Mandando correo de la IP actual"
sed -i '$d' correo.txt
sed -i '$d' correo.txt

echo $datecreated >> correo.txt
curl ifconfig.me >> correo.txt

curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd   --mail-from 'correoOrigen@gmail.com' --mail-rcpt 'correoDestino@gmail.com'   --upload-file correo.txt --user 'correoOrigen@gmail.com:CONTRASEÑA' --insecure


Ya tenemos el script creado, pero nos falta que el script se ejecute cada 12 horas.
Para esta tarea utilizaremos cron.  El comando cron es un administrador regular de procesos en segundo plano que viene de serie en linux.
Para añadir el comando que se debe ejecutar en segundo plano, utilizaremos el comando crontab -e  .
Y editaremos de la siguiente forma:

0 */12 * * * /home/seta/tareas/tarea1.sh >/dev/null 2>&1

De esta forma el script se ejecutará cada 12 horas.


Espero que os sirva de algo este artículo.


Saludos
Juan Galaz