Про SMTP протокол знают все: текстовый, простой, можно почту отослать и при помощи telnet. Собственно, при помощи оного и сделан скрипт ниже.
smtpHost="Сервер"
smtpPort="25"
smtpLogin="Логин"
smtpPass="Пароль"
smtpConnectTime="3" # -- таймаут перед началом посылки команд
smtpDelay="1" # -- таймаут между посылками команд
# Простой SMTP клиент для отправки почты через удалённый сервер
simpleMailClient()
{
to="$1"
local subject=""
for subjectLine in `echo -n "$2" | /usr/bin/env base64`
do
if [ x"$subject" = x"" ]; then
subject="=?UTF-8?B?$subjectLine?="
else
subject="$subject<br/>n =?UTF-8?B?$subjectLine?="
fi
done
subject=`echo -e "$subject"`
plainLoginString=`echo -e -n "dc<br/>0$smtpLogin<br/>0$smtpPass" | /usr/bin/env base64`
(
sleep $smtpConnectTime
echo "EHLO localhost.localdomain"
sleep $smtpDelay
echo "AUTH PLAIN $plainLoginString"
sleep $smtpDelay
echo "MAIL FROM:<$smtpLogin>"
sleep $smtpDelay
echo "RCPT TO:<$to>"
sleep $smtpDelay
echo "DATA"
sleep $smtpDelay
echo "Date:" `LANG=C date -R`
echo "From: $smtpLogin"
echo "To: $to"
echo "Subject: $subject"
echo "MIME-Version: 1.0"
echo "Content-Type: text/plain; charset=UTF-8"
echo "Content-Transfer-Encoding: base64"
echo
cat | /usr/bin/env base64
echo "."
sleep $smtpDelay
) | telnet $smtpHost $smtpPort
}
По сути даже не скрипт, а только bash-функция. Пример использования:
echo "ТЕЛО ПИСЬМА В UTF-8" | simpleMailClient кому@куда "Тема письма в UTF-8"
Игра идёт в одни ворота, т.е. ответы от сервера не обрабатываются, что вынуждает подтачивать скрипт под каждый конкретный. Но, обычно это нужно когда не целесообразно настраивать локальный MTA и сделать можно быстро.
Для работы нужна утилита base64.