En este post, vamos a integrar Gmail con la línea de comandos para poder enviar correos mediante la linea de comandos en una Raspberry. Muy similar al post que se hizo en anterioridad.
Realizaremos la instalación y configuración básica del servicio Postfix
export DEBIAN_PRIORITY=low
export DEBIAN_FRONTEND=noninteractive
debconf-set-selections <<< "postfix postfix/mailname string $(hostname -s)"
debconf-set-selections <<< "postfix postfix/main_mailer_type string 'Internet Site'"
dpkg-reconfigure debconf
apt-get install -y postfix sasl2-bin libsasl2-modules libsasl2-2 mailutils ca-certificates
service postfix stop
cat > /etc/postfix/main.cf << EOF
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
compatibility_level = 2
inet_interfaces = 127.0.0.1
inet_protocols = ipv4
mailbox_size_limit = 0
#mydestination = $myhostname, $(hostname -s), localhost.localdomain, , localhost
mydestination = localhost
myhostname = $(hostname -s)
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
readme_directory = no
recipient_delimiter = +
smtpd_banner = $myhostname ESMTP $mail_name
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
data_directory=/var/lib/postfix
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_scache
smtpd_use_tls=yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_use_tls = yes
relayhost = [smtp.gmail.com]:587
EOF
Ahora, accederemos a https://myaccount.google.com/security y seleccionaremos la opción Llaves de acceso y llaves de seguridad, para crear una llave. Es la llave que nos servirá para autenticar.
También será necesario activar Verificación en dos pasos, en el menú anterior
Si hemos realizado todos los pasos, deberíamos tener los siguientes puntos activos:
En este punto, añadiremos la llave de seguridad que anteriormente se nos ha proporcionado junto a nuestro email:
cat > /etc/postfix/sasl_passwd << EOF
[smtp.gmail.com]:587 [email protected]:123456abcdef
EOF
Forzamos a que Postfix recargue la configuración y aplicamos unos permisos mas restrictivos
chmod 0400 /etc/postfix/sasl_passwd
postmap /etc/postfix/sasl_passwd
chmod 640 /etc/postfix/main.cf /etc/postfix/
chown -R root:root /etc/postfix/
Configuraremos el envio de correos para que el "From" sea modificado evitando que aparezca el email
echo "/^From:[[:space:]]+(.*)/ REPLACE From: "System Raspberry - $(hostname -s)" " > /etc/postfix/header_checks
cd /etc/postfix
postmap header_checks
postconf -e 'smtp_header_checks = regexp:/etc/postfix/header_checks'
echo 'root: /dev/null' > /etc/aliases
postalias /etc/aliases
Evitaremos que crontab envie correos
chmod 600 /var/spool/cron/crontabs/root
echo 'MAILTO=""' >> /etc/crontab
sed -i '1i MAILTO=""' /var/spool/cron/crontabs/root
service cron restart
Finalmente, realizaremos un reinicio del servicio aplicando todas las configuraciones anteriores
postconf -n
service postfix restart
Ahora, vamos a probar el envío:
echo "mail" | mail -s "$(hostname -s)" [email protected]
Vemos en las trazas de los logs que el correo se ha enviado (status=sent)
May 2 19:06:48 node01 postfix/pickup[632]: 330815201: uid=0 from=
May 2 19:06:48 node01 postfix/cleanup[646]: 330815201: message-id=<20240502170648.330815201@rpi01>
May 2 19:06:48 node01 postfix/qmgr[634]: 330815201: from=, size=309, nrcpt=1 (queue active)
May 2 19:06:49 node01 postfix/smtp[648]: 330815201: replace: header From: root : From: System Raspberry - node01
May 2 19:06:50 node01 postfix/smtp[648]: 330815201: to=, relay=smtp.gmail.com[108.177.15.108]:587, delay=2.2, delays=0.26/0.46/0.83/0.68, dsn=2.0.0, status=sent (250 2.0.0 OK 1714669610 z16-20020a5d4c90000000b0034dfd6fbc96sm1682933wrs.63 - gsmtp)
May 2 19:06:50 node01 postfix/qmgr[634]: 330815201: removed
y comprobamos que en Gmail hemos recibido el correo: