Отправка e-mail из консоли

Появилась необходимость отправить простейшее электронное письмо из консоли роутера. Никаких встроенных средств работы с почтой у него нет, да и не нужны они. Делов-то - подключился к smtp-серверу, отправил 4 команды и готово. Оказалось, всё не так просто...

ssmtp - перловый скрипт. Перла в роутере нет.

busybox sendmail никак не хотел работать. Пришлось немного поправить код и отучить его от EHLO. Тогда он завалился на MAIL FROM. Бросил.

tcpconnect мог бы стать хорошим решением, но подружить его с chat я так и не смог. Похоже, что в линуксе можно перенаправить вывод первого скрипта на ввод второго, но одновременно с этим нельзя перенаправить вывод второго на ввод первого. Интерактивного решения не получилось.

netcat стал, хоть и не красивым, но решением. Организовать ожидание ответа сервера не получилось, пришлось ограничиться паузами между командами. Итог - найденный на просторах интернета и переработанный под себя скрипт:


#!/bin/sh
SERVER="mailserver 25"
USER="user"
HOSTNAME="hostname"
EMAIL_TO="address@server"
EMAIL_SUBJECT="subject"
EMAIL_DATA="this
is
test."

(sleep 5
echo HELO $HOSTNAME
sleep 5
echo MAIL FROM: $USER@$HOSTNAME
sleep 5
echo RCPT TO: $EMAIL_TO
sleep 5
echo DATA
sleep 5
echo From: $USER@$HOSTNAME
sleep 1
echo To: $EMAIL_TO
sleep 1
echo Subject: $EMAIL_SUBJECT
sleep 1
echo $EMAIL_DATA
sleep 1
echo '.'
sleep 5
echo QUIT) | busybox nc $SERVER

Комментариев нет: