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"