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 schöner aber wäre als 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 zu 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.

Незнаю почему так, но после сбоки openwrt в папочке /etc будет лежать некий архив MailRoot.tar.bz2, который какбы нужен для работы xmail. Поэтому следует его распакавать видимо, но опятьже куда это сделать? Пусть будет папочка www для этой цели.

Т.е. создаем в www директорию MailRoot и туда помещаем содержимое архива.

Далее открываем файл /etc/config/xmail и видим там строки:

config xmail
        option  mail_root       '/var/MailRoot'

эти строки нам говорит что директория www куда мы распокавали архив не совсем чтобы и верный выбор. Но раз уж выбрали директорию www то и меняем эту строчку так:

config xmail
        option  mail_root       '/www/MailRoot'

Попробуем отправить письмецо. Делается это с помощью утилиты sendmail входящей в состав xmail. Для sendmail нужен файл в определенном формате. Для примера создадим файл с письмом в /home/email.example:

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

hi
this is openwrt xmail.
bye!

Отправляем письмо из командной строки как то так:

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

Получаем вот такое сообщение:

cannot find environment variable: MAIL_ROOT

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

export MAIL_ROOT=/www/MailRoot

отправляем снова:

# 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"