Настройка 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"