Инструменты пользователя

Инструменты сайта


// Примитивный SMTP клиент

Про SMTP протокол знают все: текстовый, простой, можно почту отослать и при помощи telnet. Собственно, при помощи оного и сделан скрипт ниже.

simple-mail.client.sh
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\n =?UTF-8?B?$subjectLine?="
      fi
   done
   subject=`echo -e "$subject"`
 
   plainLoginString=`echo -e -n "dc\0$smtpLogin\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.

Комментарии