XMail Installation in openwrt

Ich musste lernen, E-Mails per Befehlszeile zu verschicken. Ich brauchte ein Skript, das E-Mails an bestimmte E-Mail Adressen beim Auftreten von bestimmten Ereignissen verschicken könnte.

Natürlich die einfachste Variante wäre ein E-Mail Postfach auf einem gmaile zu erstellen und dann Mails an andere elektronische Adressen von diesem Postfach zu verschicken. Viel besser aber wäre, wenn das Eisenbox selbst im eigenen Namen (ohne eine E-Mail-Adresse auf der externen Hosting zu erstellen) die elektronischen Nachrichten verschicken könnte.

Der einfachste Weg zur Implementierung erwies sich mit der Verwendung von Xmail. Vielleicht könnte man dieses Problem einfacher lösen, aber ich weiß es nicht, deshalb versuche ich kurz zu beschreiben, wie es möglich wäre E-Mails aus der Befehlszeile mit Hilfe von Xmail in openWrt zu versenden.

Installieren das XMail Paket mit Hilfe von make menuconfig.

Ich weiss nicht warum, aber nach Zusammenfassen von openwrt stehet ein Archiv MailRoot.tar.bz2 im Volder /etc zur Verfügung, das für xmail notwendig ist. Das Archiv ist zu entpacken, bspw. in den Folder www.

D.h. wir erstellen das Verzeichnis MailRoot in www und kopieren danach die Inhalte des Archivs in dieses Verzeichnis.

Weiter öffnen wir die Datei /etc/config/xmail und finden dort die folgenden Zeilen geschrieben:

config xmail
        option  mail_root       '/var/MailRoot'

d.h. das Verzeichnis www, wo wir das Archiv entpackt haben, ist nich die ganz richtige Stelle. Da wir aber das Verzeichnis www schon gewählt haben, ist die Zeile wie folgt zu ändern:

config xmail
        option  mail_root       '/www/MailRoot'

Versuchen wir ein Email zu senden. Verwenden wir sendmail Dienstmittel, das in xmail enthalten ist. sendmail braucht eine Datei in einem bestimmten Format. Als Beispiel erstellen wir eine Datei mit einem Email in /home/email.example:

From: box1@openwrt
To: myemail@gmail.com
Subject: test email from openwrt

hi
this is openwrt xmail.
bye!

Verschicken wir das Email aus der Kommandozeile wie folgt:

# sendmail myemail@gmail.com  < /home/email.example

Bekommen wir so eine Meldung:

cannot find environment variable: MAIL_ROOT

Объявляем переменную MAIL_ROOT следующим образом:

export MAIL_ROOT=/www/MailRoot

Nocheinmal senden:

# sendmail myemail@gmail.com  < /home/email.example

Проверяем почту myemail@gmail.com. Письма нет. Смотрим содержимое директории:

# ls -l /www/MailRoot/spool/local/
-rw-r--r--    1 root     root           200 Jan 28 23:47 949092438000.3555.TR628M1
-rw-r--r--    1 root     root           200 Jan 28 23:47 949092445000.3576.TR628M1

Письма помещены в директорию для отправки, но не отправлены. Не отправлены по причине того что не запущена сама служба Xmail. Сделать это можно так:

/etc/init.d/xmail start

либо просто перезагрузимся.

Смотрим на вывод ps:

# ps | grep Xmail
1941 root      5020 S    /usr/bin/XMail -Ms /www/MailRoot -PX 4 -B- -SX 4 -X-

вроде как норм.

Пробуем отослать письмо:

# sendmail myemail@gmail.com  < /home/email.example

Письмо должно быть в почтовом ящике myemail@gmail.com. Правда есть одно "НО", если ваш ip-адрес будет в черном списке, то письмо будет отброшено сервером и не попадет в почтовый ящик.

 

Отправка почты в openWrt с использованием стороннего почтового сервиса.

Другой способ отправки почты в openwrt из консоли, но уже средствами стороннего почтового сервиса используя протокол SMTP.

В данном случае будем использовать gmail.com

Установим/соберем в openwrt пакет ssmtp.

Настроим конфигурационный файл /etc/ssmtp/ssmtp.conf как-то так:

#
# /etc/ssmtp.conf -- a config file for sSMTP sendmail.
#

# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=myemail@gmail.com

# The place where the mail goes. The actual machine name is required
# no MX records are consulted. Commonly mailhosts are named mail.domain.com
# The example will fit if you are in domain.com and your mailhub is so named.
mailhub=smtp.gmail.com:587

# Where will the mail seem to come from?
#rewriteDomain=myemail@gmail.com

# The full hostname
hostname=tr628M1

# Set this to never rewrite the "From:" line (unless not given) and to
# use that address in the "from line" of the envelope.
FromLineOverride=YES

# Use SSL/TLS to send secure messages to server.
#UseTLS=YES

# Use SSL/TLS certificate to authenticate against smtp host.
#UseTLSCert=YES

# Use this RSA certificate.
#TLSCert=/etc/ssl/certs/ssmtp.pem

# Get enhanced (*really* enhanced) debugging information in the logs
# If you want to have debugging of the config file parsing, move this option
# to the top of the config file and uncomment
#Debug=YES

UseSTARTTLS=YES

AuthUser=myemail
AuthPass=mypass

создадим файл /tmp/msg.txt с текстом письма:

Subject: ahaha
ohohoho

Отправим письмо сами себе следующей командой:

ssmtp myemail@gmail.com < /tmp/msg.txt

После отправки возможно появление сообщения об ошибке:

ssmtp: Authorization failed (534 5.7.14  https://support.google.com/mail/answer/78754 q4sm582746lfq.45 - gsmtp)

Чтобы её исправить нужно перейти по ссылке: https://www.google.com/settings/security/lesssecureapps

и выбрать "Включить" в меню "Доступ к аккаунту" с непроверенных приложений.

Если необходимо письмо формировать динамически и без использования файлов то командная строка может выглядеть так:

local email_cmd="ssmtp -t <<EOF\
From: <%s>\
To: <%s>\
Date: info\
Subject: сообщение ПУИД\
%s\
EOF"