• OpenWrt, пакеты первой необходимости

  • Мини Linux сборки для роутеров
Мини Linux сборки для роутеров
 #10333   IgorA100
 02 мар 2021, 22:41
ssmtp - примитивный SMTP клиент для отправки почты через сторонний почтовый сервер с авторизацией.
Установка:
Код: Выделить всёopkg update
opkg install ssmtp

Делаем резервную копию
Код: Выделить всёcp /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.bak

Редактируем настройки /etc/ssmtp/ssmtp.conf
В конце файла /etc/ssmtp/ssmtp.conf добавить переменные для авторизации:
Код: Выделить всёAuthUser=username@domain.com
AuthPass=Password


Пример конфигурационного файла:
Код: Выделить всёmailhub=smtp.gmail.com:465
AuthUser=batman@gmail.com
AuthPass=BWisthebest
AuthMethod=LOGIN
rewriteDomain=gmail.com
hostname=localhost
UseTLS=Yes
#UseSTARTTLS=Yes
TLS_CA_File=/etc/ssl/certs/ca-certificates.crt
FromLineOverride=Yes
#Debug=Yes

Описание:
Код: Выделить всё# cat ssmtp.conf
 
# /etc/ssmtp.conf -- конфигурационный файл для sSMTP sendmail.
#
# Пользователь, который получает всю почту для userids < 1000
# Сделайте пустым для отключения перезаписи. Или укажите пользователя.
# А также вы можете указать нужный е-майл на который будет
# приходить почта для root.
root=postmaster
 
# Место, где идет почта. Настоящее имя машины не требуются
# MX записи. Обычно mailhosts является именем mail.domain.com
# Например если вы находитесь в domain.com ваш mailhub с таким же именем.
mailhub=mail
 
# Пример для SMTP портом 2525
# mailhub=mail.your.domain:2525
# Пример для SMTP портом 25 (Standard/RFC)
# mailhub=mail.your.domain
# Пример для SSL шифрованного соединения
# mailhub=mail.your.domain:465
 
# От кого якобы должна приходить почта?
rewriteDomain=
 
# Полное имя машины
hostname=_HOSTNAME_
 
# Установите это чтобы никогда не переписывать "From:" (если не указано) и
# использовать этот адрес в "from line" оболочки.
#FromLineOverride=YES
 
# Использовать SSL/TLS, чтобы отправить безопасные сообщения на сервер.
#UseTLS=YES
 
# Использовать SSL/TLS сертификат для аутентификации на SMTP-хосте.
#UseTLSCert=YES
 
# Используйте этот сертификат RSA.
#TLSCert=/usr/local/etc/ssmtp/ssmtp.pem
 
# Получить расширенное (* действительно * расширенную) отладочную информацию в логах
# Если вы хотите иметь отладке в конфигурационных отпарсенных файлах, переместите этот
# параметр в начало файла конфигурации и раскомментируйте
#Debug=YES


Обязательно в файл /etc/ssmtp/revaliases добавляем:
Код: Выделить всёbatman:batman@gmail.com:smtp.gmail.com:465
tux:tux@linux.com:smtp.yandex.ru:465
joker:joker@anekdot.ru:smtp.mail.ru:465

или так:
Код: Выделить всёroot:batman@gmail.com:smtp.gmail.com:465
www-data:batman@gmail.com:smtp.gmail.com:465
batman:batman@gmail.com:smtp.gmail.com:465

root, www-data, batman - пользователи, от имени которых будет отправляться почта. Если вышеуказанное не прописать, то почта не отправится!

Для проверки работоспособности почты, выполнить:
Код: Выделить всёecho "Тело тестового письма" > /tmp/newmail.txt

И отправляем письмо по адресу user@domain.com:
Код: Выделить всёssmtp -v user@domain.com </tmp/newmail.txt


Или так можно в одну строку написать и отправить письмо:
Код: Выделить всёecho -e "From: USER NAME<UserFrom@domain.com>\nSubject: Theme\nTest text\nТестовый текст" | ssmtp UserTo@domain.com

USER NAME - отображаемый текст "От кого" в письме.
UserFrom@domain.com - обратный адрес
Theme - тема письма
Test text - Первая строка тела письма
Тестовый текст - Вторая строка тела письма
UserTo@domain.com - адрес получателя письма

Второй вариант отправки письма в одну строку:
Код: Выделить всёecho "Subject: test message" > /tmp/newmessage;echo "From: otpravitel@gmail.com" >> /tmp/newmessage;echo "Это новое тестовое сообщение" >> /tmp/newmessage; ssmtp poluchatel@yandex.ru </tmp/newmessage


Текстовый вариант письма:
From: Vasya Pupkin <vasya@domain.com>
Subject: тестовое письмо 77
Привет, это тестовое письмо.


Вариант отправки письма через скрипт:
Код: Выделить всё#!/bin/sh
echo "Subject: Movment detect" > /tmp/newmessage;echo "From: otpravitel@gmail.com" >> /tmp/newmessage
echo "Alert!!!! Home movement detect" >> /tmp/newmessage; ssmtp poluchatel@yandex.ru </tmp/newmessage


Проблемы и их решение
1 Для mail.ru и Yandex: перед отравкой почты необходимо зайти в почтовый ящик через веб-интерфейс. В противном случае будет ошибка:
ssmtp: 550 Message was not accepted -- invalid mailbox. You need to complete your registration in order to send your mail. Please visit http://e.mail.ru/signup?NeedMoreInfo=1
2 Если выскакивает ошибка RCPT TO:<dimon@gov.ru> (501 sender address must match authenticated user)то
В revaliases добавляем нужных пользователей. В моём случае php-скрипты запускаются от имени системного пользователя, а не от nobody или www-data/httpd, поэтому в revaliases помимо root указаны логины системных пользователей.
3 Если в логах ошибка Creating SSL connection to host
SSL not working: certificate verify failed (20)
Cannot open smtp.gmail.com:587

то добавьте в конфигурационный файл опцию TLS_CA_File

Путь для Ubuntu/Debian /etc/ssl/certs/ca-certificates.crt Путь для CentOS /etc/pki/tls/certs/ca-bundle.crt

WIKI: https://wiki.archlinux.org/index.php/SSMTP
Сайт: https://openwrt.org/docs/guide-user/services/email/smtp.client