[Entware] посылаем e-mail из командной строки

Используем пакеты, расширяющие возможности оборудования
Аватара пользователя
Zyxmon
Администратор
Сообщения: 1912
Зарегистрирован: 09 авг 2015, 15:33

Сообщение Zyxmon » 15 июн 2016, 17:32

Нередко нужно написать скрипт. который при необходимости Вас известит об определенном событии.
Извещать можно с помощью sms или e-mail. В данной теме рассмотрим посылку email с помощью "Heirloom mailx" (или "nail").
1. Поставим пакет

Код: Выделить всё

opkg update
opkg install nail

Для посылки почты с аккаунта gmail используем

Код: Выделить всё

echo "This is message body" | mailx -s "This is Subject" -r "user@gmail.com" -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-ser="user@gmail.com" -S smtp-auth-password="secret" -S smtp="smtp.gmail.com" lubimomu@mail.ru

Тут
-s задает тему письма
-r от кого
в самом конце - кому
Остальные параметры понятны.

Для посылки с mail.ru:

Код: Выделить всё

echo "This is message body" | mailx -s "This is Subject" -r "user@mail.ru" -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user="user@mail.ru" -S smtp-auth-password="secret" -S smtp="smtp.mail.ru" my_love@gmail.com

Приводите Ваши примеры для других smtp серваков и аккаунтов.

Аватара пользователя
Александр Рыжов
Сообщения: 445
Зарегистрирован: 12 авг 2015, 14:14
Откуда: Смоленск

Сообщение Александр Рыжов » 15 июн 2016, 22:24

Здесь расписал как отправлять сообщения с помощью sendmail из busybox, для работы с SSL-серверами придётся доставить пакет openssl-util.

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1912
Зарегистрирован: 09 авг 2015, 15:33

Сообщение Zyxmon » 16 июн 2016, 09:01

Предыдущие варианты предполагают наличие установленных ssl сертификатов на нашем устройстве (opkg install ca-certificates).
Вариант от Александр Рыжов предполагает наличие sendmail на нашем устройстве, т.к. busybox из Entware не включает в себя апплет sendmail.
Способов послать email много. Ниже я приведу еще один, самый легкий (по требуемому объему hdd), при этом установка сертификатов при использовании, например, gmail не нужна.
Пакет называется msmtp.
1. Установим `opkg install msmtp`
2. Отредактируем файл /opt/etc/msmtprc и приведем его к виду

Код: Выделить всё

host smtp.gmail.com
port 587

tls on
tls_certcheck off

syslog LOG_MAIL

auth login
user user@gmail.com
password my_secret_password
from user@gmail.com

Мы отредактировали строку с host, добавили port, раскомментировали tls on, добавили tls_certcheck off и добавили в самом конце информацию о нашем gmail аккаунте.

Посылка почты осуществляется командой

Код: Выделить всё

echo -e "Subject: Test Mail\r\n\r\nThis is a test mail" |msmtp --from=default -t komu_nado@gmail.com

В логе появлется информация об отправке

Код: Выделить всё

msmtp host=smtp.gmail.com tls=on auth=on user=user@gmail.com from=default recipients=komu_nado@gmail.com mailsize=92 smtpstatus=250 smtpmsg='250 2.0.0 OK 1466052226 g79sm2386866ljg.26 - gsmtp' exitcode=EX_OK

При проблемах добавьте ключ --debug для просмотра подробного лога при отправке.

Если необходимо, можно настроить несколько аккаунтов в msmtp и указывать нужный при отправке почты в параметре -a (вместо --from).
Пример нескольких аккаунтов

Код: Выделить всё

~ # cat /opt/etc/msmtprc
account mailru

# The SMTP smarthost.
host smtp.mail.ru
port 587

# Use TLS.
tls on
tls_certcheck off

# Syslog logging with facility LOG_MAIL instead of the default LOG_USER.
syslog LOG_MAIL

auth login
user user@mail.ru
password mailru_password
from user@mail.ru

account gmail

# The SMTP smarthost.
host smtp.gmail.com
port 587

# Use TLS.
tls on
tls_certcheck off

# Syslog logging with facility LOG_MAIL instead of the default LOG_USER.
syslog LOG_MAIL

auth login
user user@gmail.com
password gmail_password
from user@gmail.com

Отправка почты через mail.ru с дебагом:

Код: Выделить всё

echo -e "Subject: Test Mail\r\n\r\nThis is a test mail" |msmtp --debug -a mailru -t comu_nado@gmail.com

laforsh
Сообщения: 29
Зарегистрирован: 23 авг 2015, 22:41

Сообщение laforsh » 16 июн 2016, 11:05

Добавлю свои пять копеек. Есть два скрипта (под спойлером ниже). notification_day.sh шлет на sms (днем), notification_night.sh - на мыло (ночью). Разница между ними - $mailto. По крону дважды в сутки (утром и вечером) их переключаем на актуальное (используемое во всех вызовах) оповещение notification.sh
/путь/rm -f /путь/notification.sh & ln -s /путь/notification_day.sh /путь/notification.sh
/путь/rm -f /путь/notification.sh & ln -s /путь/notification_night.sh /путь/notification.sh
Вызываются из любых приложений с двумя параметрами:
/путь/notification.sh "текст сообщения" "от кого сообщение"
notification_day.sh

Код: Выделить всё

#!/bin/bash

# Скрипту передавать 2 параметра ($1)-текст сообщения, $2-от кого оно (от какого приложения)
# Он отправляет это на фиксированные адреса (днем - sms шлюз, ночью - почта)
#
# Днем - sms шлюз
mailto="forward-XXX64@sms.beemail.ru"
#
# Ночью - почта
#mailto="ivanoff@mail.ru"
#
subj="Сообщение от $2"
from=$2
to="Иванов Иван Иванович"
reply="petroff@mail.ru"
text="Сообщение от $2. $1"

# Логируем и отправляем почту
logger -i -p info "$2. $1 Отправляем почтовое оповещение на $mailto"
echo -e "Subject: "$subj"\nFrom: "$from"\nTo: "$to"\nReply-to: "$reply"\nContent-Type: text/plain; charset=\"UTF-8\"\n\n"$text"" | msmtp $mailto

Свернуть


Конфиги msmtp не привожу - они есть выше.
ЗЫ: Если не добавлять к письму хидер чарсета "Content-Type: text/plain; charset="UTF-8" " то смс-ки с кириллицей на андроидных клиентах выглядят крокозяблами.

Аватара пользователя
Александр Рыжов
Сообщения: 445
Зарегистрирован: 12 авг 2015, 14:14
Откуда: Смоленск

Сообщение Александр Рыжов » 16 июн 2016, 13:12

Хинт: пример с СМС выше работает только для Билайна, для включения услуги «Почта на СМС» отправьте на номер 784 сообщение

Код: Выделить всё

 СИМ ВКЛ-ПОЧТАНАСМС ДА 


Есть возможность отправлять себе бесплатно несколько СМС-сообщений в день на любом операторе с помощью сервиса sms.ru, пример здесь.

GanjaKyp
Сообщения: 9
Зарегистрирован: 04 ноя 2015, 10:29

Сообщение GanjaKyp » 22 авг 2016, 10:08

Подскажите что делаю не так:

Конфиг msmtpcrc
host smtp.mail.ru
port 587

tls on
tls_certcheck off

syslog LOG_MAIL

auth login
user megafaq@mail.ru
password *
from megafaq@mail.ru
Свернуть

ошибка
msmtp: envelope from address default not accepted by the server
msmtp: server message: 501 <default>: sender address must contain a domain
msmtp: could not send mail (account default from /opt/etc/msmtprc)
Свернуть

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1912
Зарегистрирован: 09 авг 2015, 15:33

Сообщение Zyxmon » 22 авг 2016, 11:56

GanjaKyp, я бы попробовал сделать аккаунт с именем и после этого посылать с ключом `a, --account=account_name`.
Судя по ошибке аккаунт не был использован.

laforsh
Сообщения: 29
Зарегистрирован: 23 авг 2015, 22:41

Сообщение laforsh » 22 авг 2016, 12:14

Рабочий вариант - проверил только что на ББ, пути могут отличаться. Ну и логины, пароли, кому отправлять свои везде поставь.

Конфиг msmtpcrc
account default
logfile /var/log/msmtp.log
host smtp.mail.ru
port 465
keepbcc on
auth plain
tls on
tls_starttls off
tls_certcheck off
from user_to_mail_ru@mail.ru
user user_to_mail_ru
password password_to_mail_ru
Свернуть


скрипт отправки

Код: Выделить всё

#!/bin/bash

# Скрипту передавать 2 параметра ($1)-текст сообщения, $2-от кого оно (от какого приложения)
mailto="forward-XXXXXXXX@sms.beemail.ru"
subj="Сообщение от $2"
from="user_to_mail_ru@mail.ru"
reply="user_to_mail_ru@mail.ru"
text="Сообщение от $2. $1"

echo -e "Subject: "$subj"\nFrom: "$from"\nTo: "$mailto"\nReply-to: "$reply"\nContent-Type: text/plain; charset=\"UTF-8\"\n\n"$text"" | msmtp $mailto
Свернуть


А еще лучше переходи на gmail.com - там спам фильтры и проверки грамотнее настроены.

GanjaKyp
Сообщения: 9
Зарегистрирован: 04 ноя 2015, 10:29

Сообщение GanjaKyp » 22 авг 2016, 13:05

действительно с указанием аккаунта работает, я просто думал --from=default должно сработать :)

s@m
Сообщения: 4
Зарегистрирован: 24 окт 2015, 07:58

Сообщение s@m » 15 сен 2018, 02:52

ДВС!
Поделюсь с вами возможностью пересылать вложения. Скрипт мой, писался под AIX, но думаю и тут заработает, т.к. набор команд тот же. Параметры могут отличаться:
скрипт

Код: Выделить всё

-- так я буду помечать комментарии
find "$logdir"SystemOut* -mmin -$((currtime + (24 * 60))) -exec zip -9juq ${HOSTNAME}.zip {} \;  --предподготовка, выборка логов за прошлые сутки и упаковка в архив
echo '~c ivanov@yourdomain.ru'>letter.tmp  -- Начало письма, это не адрес получателя, а адрес, по которому отправляется копия письма.
echo "Логи SystemOut с узла ${HOSTNAME} за `TZ=20 date +%d`.`TZ=20 date +%m`.`TZ=20 date +%Y`.">>letter.tmp     --Тело письма
echo "">>letter.tmp  --Тело письма
echo "Просьба не отвечать на данное письмо, т.к. оно сформировано автоматически.">>letter.tmp    --Тело письма
echo "begin 644 ${HOSTNAME}-`TZ=20 date +%d`_`TZ=20 date +%m`_`TZ=20 date +%Y`.zip">>letter.tmp  --со строки begin 644 начинается вложение. Тут нужно написать имя файла-вложения. У меня имя содержит дату, а в более простом случае это выглядит так: echo "begin 644 myfile.txt">>letter.tmp

cat ${HOSTNAME}.zip | iconv -f UTF-8 -t uucode>>letter.tmp  -- Загоняем в шаблон письма само вложение. В моем случае - zip-архив. Просто читаем командой cat и конвертируем в UTF-8 с кодированием uuecode. Такой формат Outlook понимает прекрасно.
echo "\`"$'\n'"end">>letter.tmp    -- этой строкой должно заканчиваться вложение.
cat letter.tmp | mailx -s "SystemOut с сервера ${HOSTNAME} за `TZ=20 date +%d`.`TZ=20 date +%m`.`TZ=20 date +%Y`" petrov@yourdomain.ru Sidorov@yourdomain.ru    --отправляем письмо получателям. Тут флаг -s обозначает тему письма, далее через пробел идут адреса получателей
rm letter.tmp ${HOSTNAME}.zip  --удаляем временный файл после отправки.
Свернуть


Вернуться в «Entware/Qnapware/Optware/Zyxware - обсуждаем репозитории пакетов»

Кто сейчас на конференции

Всего 0 посетителей :: 0 зарегистрированных, 0 скрытых и 0 гостей (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (162) здесь было 16 ноя 2019, 18:33

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей