1 1 1 1 1 Rating 5.00 (1 Vote)

Одной из функций умного дома является уведомление хозяина об определенных событиях. В данной статье я опишу как отправлять электронную почту с роутера с прошивкой openwrt.

В качестве программы для отправки писем я выбрал пакет ssmtp ввиду простоты и малого требования к ресурсам.

Для начала нам нужно обзавестись почтой от google.com. Если у вас еще нет там почтового адреса, то регистрируемся  на gmail.com и создаем себе новую почту. Можно конечно воспользоваться электронной почтой и от другого поставщика данной услуги, но в этом случае вам нужно будет самостоятельно узнать его настройки.

1.Подключаемся к роутеру ssh-клиентом и устанавливаем openwrt пакет ssmtp

opkg update
opkg install ssmtp

2.Делаем резервную копию файла настроек и редактируем его

cp /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.bak
nano /etc/ssmtp/ssmtp.conf

Все изменения я пометил своим ником #mszerg

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

# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
#mszerg
#root=postmaster
root=username@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.
#mszerg
#mailhub=mail
mailhub=smtp.gmail.com:465

# Example for SMTP port number 2525
# mailhub=mail.your.domain:2525
# Example for SMTP port number 25 (Standard/RFC)
# mailhub=mail.your.domain
# Example for SSL encrypted connection
# mailhub=mail.your.domain:465

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

# The full hostname
hostname=localhost

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

# Use SSL/TLS to send secure messages to server.
#mszerg
#UseTLS=YES
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

#mszerg
AuthUser=username@gmail.com
AuthPass=*******

Не забываем поменять в файле username на свое название e-mail. А также прописать пароль в AuthPass, с помощью которго вы заходите на свою почту. Последних двух строк стнастройками

AuthUser=username@gmail.com
AuthPass=*******

почему то в стандартном конфиге нет, поэтому допишите их самостоятельно.

3.Teстируем отправку электронной почты

Для этого создаем файл письма, которое будем отправлять

echo "Привет - это тестовое письмо" > /tmp/newmail.txt

И отправляем его

ssmtp -v Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. </tmp/newmail.txt

Ключ -v нужен для вывода подробного лога отправки. В дальнейшем его можно не использовать.

В итоге, если все в порядке, то вы получите следующий вывод на экран и ваше письмо будет доставлено по адресу Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра., в качестве отправителя будет фигурировать ваш адрес username@gmail.com из файла /etc/ssmtp/ssmtp.conf

[<-] 220 mx.google.com ESMTP b49sm12656085eem.16
[->] EHLO mszerg.pp.ua
[<-] 250 ENHANCEDSTATUSCODES
[->] AUTH LOGIN
[<-] 334 VXNlcm5hbWU6
[->] bXN6ZXJnMkBnbWFpbC5jb20=
[<-] 334 UGFzc3dvcmQ6
[<-] 235 2.7.0 Accepted
[->] MAIL FROM:<Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.>;
[<-] 250 2.1.0 OK b49sm12656085eem.16
[->] RCPT TO:<Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.>;
[<-] 250 2.1.5 OK b49sm12656085eem.16
[->] DATA
[<-] 354  Go ahead b49sm12656085eem.16
[->] Received: by mszerg.pp.ua (sSMTP sendmail emulation); Sat, 12 Jan 2013 14:25:32 +0200
[->] From: "root" <Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.>;
[->] Date: Sat, 12 Jan 2013 14:25:32 +0200
[->] Привет - это тестовое письмо
[->]
[->] .
[<-] 250 2.0.0 OK 1357993535 b49sm12656085eem.16
[->] QUIT
[<-] 221 2.0.0 closing connection b49sm12656085eem.16 

В файле письма можно задать дополнительные параметры

From: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.;
To: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.;
Subject: Тема письма

Текст письма...

 4. Теперь я расскажу как отправлять соoбщение на почту одной строкой, без предварительного ручного создания файла. Для этого используем следующую команду, которую можно смело использовать в любом скрипте.

echo "Subject: test message" > /tmp/newmessage;echo "From: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра." >> /tmp/newmessage;echo "Это новое тестовое сообщение" >> /tmp/newmessage; ssmtp Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. </tmp/newmessage

Теперь можно аналогичную команду вставить в скрипт и повесть его на событие в программе по записи видео при движении на событие обнаружение движения.

Например делаем скрипт

nano /usr/bin/move_detect.sh
#!/bin/sh
echo "Subject: Movment detect" > /tmp/newmessage;echo "From: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра." >> /tmp/newmessage
echo "Alert!!!! Home movement detect" >> /tmp/newmessage; ssmtp Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. </tmp/newmessage

Делаем файл исполняемым

chmod +x /usr/bin/move_detect.sh

Проверяем пришло ли сообщение

/usr/bin/move_detect.sh

Если все в порядке то подключаем его к событию в motion detection

nano /etc/motion.conf

Например

on_event_start /usr/bin/move_detect.sh

Все теперь при начале движения в камере вам на почту будет приходить уведомление.

Log in to comment

: 16 янв 2016 19:43 Автор: Alex013 #1197
Alex013 аватар
Приветствую!
А если в момент отправки e-mail не было инета или smtp.server был не доступен, или вдруг ещё что-то... Хотелось бы как-то заставить систему повторять попытки отправки вплоть до успеха. Нет мыслей?
: 15 окт 2015 00:32 Автор: CedricMa #1177
CedricMa аватар
Какой вам поисковик больше нравится? ЛИчно мне яндекс
: 20 мая 2013 16:47 Автор: gwmouse #50
gwmouse аватар
sleep 1s
mkdir /tmp/cam1
mv /usr/local/apache2/htdocs/cam1/*.jpg /tmp/cam1/
yafc ftp://user:password@ftp-address/Root < /usr/bin/command.txt
rm -R /tmp/cam1

cat command.txt
put /tmp/cam1/*.jpg
: 20 мая 2013 16:45 Автор: gwmouse #49
gwmouse аватар
пока получилось только по фтп
#!/bin/sh
echo "Subject: Movment detect" > /tmp/newmessage;echo "From: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра." >> /tmp/newmessage
echo "Alert!!!! Home movement detect" >> /tmp/newmessage; ssmtp Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
: 20 мая 2013 16:44 Автор: gwmouse #48
gwmouse аватар
Тоже хотелось бы к письмецу как-то файлик цеплять
: 23 янв 2013 23:52 Автор: vit.aliy #47
vit.aliy аватар
интересно насколько возможно прописать скрипт так что б он после первого сообщения создавал последующие и к ним прикреплял те снимки которые сохраняет motion - или это уже слишком? 8)
: 22 янв 2013 23:23 Автор: vit.aliy #46
vit.aliy аватар
Сей час протестировал, оказалось очень просто - нужно перечислить адреса через пробел и все))

Спасибо большое! Завтра испытаю! :)
: 22 янв 2013 19:46 Автор: mszerg #45
mszerg аватар
подскажите пожалуйста как указать 2 или больше адресов-получателей электронной почты (т.е что б уведомление отсылалось на 2 или более адресов). Спасибо заранее!
Сей час протестировал, оказалось очень просто - нужно перечислить адреса через пробел и все))
: 22 янв 2013 16:04 Автор: Виталий #44
Виталий аватар
подскажите пожалуйста как указать 2 или больше адресов-получателей электронной почты (т.е что б уведомление отсылалось на 2 или более адресов). Спасибо заранее!
: 18 янв 2013 17:09 Автор: mszerg #43
mszerg аватар
Зарегистрироваться сейчас не получится.
Кинулся, а оно у меня после обновления не работает. Разбираюсь пока, скорее всего заработает завтра.

Проверил у себя файл /etc/ssmtp/revaliases. Он у меня пустой и все работает. Но на всякий случай нужно наверно будет подчитать про него и дополнить инструкцию, спасибо что отписались.
: 18 янв 2013 16:47 Автор: Виталий #42
Виталий аватар
еще протестировал я - важная деталь

ssmtp needs a properly configured revaliases file.
That file is located at
/etc/ssmtp/revaliases
heres my file
# sSMTP aliases
#
# Format: local_account:outgoing_address:mailhub
#
# Example: root:your_login@your.domain:mailhub.your.domain[:port]
# where [:port] is an optional port number that defaults to 25.
root:myemailaddress@gmail.com:smtp.gmail.com:465

без нее дает ошибку

PS - у меня версия OpenWrt Attitude Adjustment (Oct-2012)
: 18 янв 2013 16:40 Автор: Виталий #41
Виталий аватар
переписал все настройки что б отсылать с укрнет имейла - пока в текстовом файле newmail.txt не написал латиницей Subject: test - выбивало ошибку 550 спам - и отсылало на вики укрнет - а там как по мне головоломка написана - не раскопал ее

в итоге тест сработал (и в Putty и в WinSCP) - большое спасибо за помощь !!! Буду настраивать дальше.

Но вот зрегистрироваться тут все же никак немогу :(
: 18 янв 2013 13:54 Автор: mszerg #40
mszerg аватар
вывод в терминал я выслал весь - ничего другого там небыло :sad:

Посмотрел я WinSCP - там убогая консоль.
1.Подключайтесь PuTTy
2.Введите команды
echo "Привет - это тестовое письмо" > /tmp/newmail.txt
ssmtp -v Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. [знак меньше]/tmp/newmail.txt
3.Результат выложите сюда

[знак меньше] - замените на сам знак, а то чего-то сайт его обрезает))
: 18 янв 2013 13:24 Автор: mszerg #39
mszerg аватар
1. Да с c gmail на ukr.net
2. по WinSCP ничего не скажу, под виндой работаю с PuTTy - нареканий нет.
3.hostname я так понял может быть любым. В данной конфирурации он толком не задействован.
Задайте его просто:
hostname=localhost

В статье я тоже исправил, что бы народ не путать.
: 18 янв 2013 13:23 Автор: Виталий #38
Виталий аватар
вывод в терминал я выслал весь - ничего другого там небыло :sad:
: 18 янв 2013 12:41 Автор: Виталий #37
Виталий аватар

Настройки вы да gmail делали?

Скопируйте весь вывод в терминал от начала до конца.

Настройки на gmail делал - в качестве получателя в команде указал укрнетовский имейл адрес. Я так понимаю что сообщение должно прийти c gmail на ukr.net

я команду набирал из командной строки консоли WinSCP. может в этом причина? откуда лучше набирать их (если у меня не установлен линукс)?Также подскажите пожалуйста что указывать в full host name и откуда его взять (где посмотреть)? и насколько важен этот параметр?
: 18 янв 2013 12:21 Автор: mszerg #36
mszerg аватар
при попытке отправить тестовый имейл выдает ошибку

failed with return code 139 and error message

/$ ssmtp -v Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Настройки вы да gmail делали?

Скопируйте весь вывод в терминал от начала до конца.
: 18 янв 2013 11:54 Автор: Виталий #35
Виталий аватар
при попытке отправить тестовый имейл выдает ошибку

failed with return code 139 and error message

/$ ssmtp -v Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.