Настройка XMail в openwrt

Мне нужно было научиться отправлять почтовые сообщения из командной строки, проще говоря, нужен был скрипт, который бы отправлял почту на конкретные email при возникновении тех или иных событий.

Конечно, самый простой вариант - это создание почтового ящика на каком-нибудь gmaile и уже с него отправка сообщений на другие адреса. Но, наверное, гораздо красивее, когда коробочка сама от своего имени (без создания электронного адреса на стороннем хостинге) будет рассылать сообщения.

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

Устанавливаем через make menuconfig пакет XMail.

Не знаю почему так, но после сборки 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"