Ostatnio pewien użytkownik nettempa z Kandy zgłosił się do mnie z problemem który dotyczył powiadomień mailowych. Nettemp do wysyłania powiadomień używa lekkiego klienta msmtp. Błąd jaki wyskakiwał to:

msmtp: cannot create socket: Address family not supported by protocol 
msmtp: could not send mail

Google podpowiadało to że może to być problem z ipv6 lub z konfiguracją klienta msmtp. Okazało się że to problem z zablokowanym portem SMTP 587.

Jak można sprawdzić czy port jest zablokowany?

jak zawsze telnetem :)

root@raspberrypi:/#telnet smtp.gmail.com 587
Trying 74.125.136.109...
telnet: Unable to connect to remote host: Address family not supported by protocol

Jak widać wyżej port jest zablokowany. Ale musiałem symulować sobie taką blokadę używając reguł iptables.

iptables -A OUTPUT -p tcp --dport 587 -j DROP

Po odblokowaniu portu przez „iptables -F” – czyli wyczyszczenie wszystkich reguł na firewallu maile przechodziły poprawnie.

Jak wysyłać maile przez msmtp?

Do testowania stworzyłem sobie mały skrypcik który ułatwia wysyłanie wiadomości. Trzeba tylko podmienić dane na swoje. Na końcu zapyta o hasło do konta.

#! /bin/bash -x
from="nettemp device"
reci="test@techfreak.pl"
subject="Testowy mail"
body="blablabla"
host="smtp.gmail.com"
port="587"
sender="test@gmail.com"
(echo "From: $from"; echo "To: $reci"; echo "Subject: $subject" ;echo -e "$body";) | msmtp \
--read-envelope-from \
--host=$host --port=$port --auth=on --user=$sender \
--tls=on --tls-starttls=on --tls-certcheck=on --tls-trust-file=/etc/ssl/certs/ca-certificates.crt \
--timeout=10 -t $reci

Wnioski

Tak więc zawsze trzeba sprawdzić czy na pewno nie blokują Cię żadne zapory. I nie jest to takie trudne. Mam nadzieje że komuś to pomoże. Dawać znać w komentarzach