Turris Omnia’s notification emails are rejected

I have been using a Turris Omnia router for almost 3 years now. The Omnia works great and it has just been updated to Turris OS 5 which is based on a much more recent version of OpenWRT (19.07).

I fixed an issue a long time ago but the new OS version removed my fix, so here is a quick blog post to remember how to do it again next time so I don’t have to find out again.

Here is the issue: my email server (postfix) rejects emails from senders not giving a fully-qualified hostname when issuing the HELO command and Turris OS provides localhost when sending notification emails, resulting in errors like this:

NOQUEUE: reject: RCPT from unknown[]: 504 5.5.2 <localhost>: Helo command rejected: need fully-qualified hostname; from=<foo@example.com> to=<bar@example.com> proto=ESMTP helo=<localhost>

The notification system uses msmtp to send emails but it uses a configuration generated on the fly by the /usr/bin/notifier script. An easy solution is to hardcode msmtp’s domain option directly in that script in function get_user_server_settings, starting on line 108:

get_user_server_settings() {
        local username=`uci -q get user_notify.smtp.username`
        local password=`uci -q get user_notify.smtp.password`
        local server=`uci -q get user_notify.smtp.server`
        local port=`uci -q get user_notify.smtp.port`
        local security=`uci -q get user_notify.smtp.security`

        echo "domain example.com"
        echo "from $mail_from"
        echo "host $server"
        echo "port $port"

        if [ "$security" = "ssl" ]; then
                echo "tls on"
                echo "tls_starttls off"
                echo "tls_certcheck on"
                echo "tls_trust_file /etc/ssl/certs/ca-certificates.crt"
        elif [ "$security" = "starttls" ]; then
                echo "tls on"
                echo "tls_starttls on"
                echo "tls_certcheck on"
                echo "tls_trust_file /etc/ssl/certs/ca-certificates.crt"
        else
                echo "tls off"
        fi

        if [ -n "$username" -a -n "$password" ]; then
                echo "auth on"
                echo "user $username"
                echo "password $password"
        else
                echo "auth off"
        fi
}

That’s all.

Comments Add one by sending me an email.