Скрипт для отправки почты из консоли с поддержкой авторизации и шифрования | Professional IT Solutions - IT аутсорсинг
Профессиональные IT решения для Вашего бизнеса
(499)704-25-26
/\\/
Linux -> Скрипт для отправки почты из консоли с поддержкой авторизации и шифрования

Скрипт для отправки почты из консоли с возможностью авторизации и шифрования ssl и tsl

Скрипт позволяет из командрой строки или из cron'а отправлять письма через сервера, которые требуют авторизацию при отправке и/или использующих ssl/tsl соединения. Для запуска этого скрипта необходимы только сам bash и awk, а для отправки писем через ssl или tsl необходимо будет установить openssl.

Описание Работы

Для отправки нешифрованного письма скрипт создает tcp либо ssl сессию с почтовым сервером и дальше общается как если бы вы отправляли письмо через telnet.
Для отображения всех возможных параметров запуска, запустите скрипт с параметром --help, Required options - обязательные параметры, Optional - сответственно необязательные.

Создайте файл mailsend, поместите в него скрипт, представленный ниже, незабудьте сделать его исполняемым:

chmod a+x mailsend

Собственно сам скрипт:

#!/bin/bash

for param in "$@"
do
  opt=`echo $param |awk -F "=" '{print$1}'`
  value=`echo $param |awk -F "=" '{print$2}'`
  if [ "$opt" == "--mailfrom" ]; then mailfrom=$value; let "i=$i+1";fi
  if [ "$opt" == "--mailto" ]; then mailto=$value; let "i=$i+1";fi
  if [ "$opt" == "--headerfile" ]; then headerfile=$value;fi
  if [ "$opt" == "--bodyfile" ]; then bodyfile=$value; let "i=$i+1";fi
  if [ "$opt" == "--smtpserver" ]; then smtpserver=$value; let "i=$i+1";fi
  if [ "$opt" == "--smtplogin" ]; then smtplogin=`echo -n $value|base64`;fi
  if [ "$opt" == "--smtppassword" ]; then smtppassword=`echo -n $value|base64`;fi
  if [ "$opt" == "--subject" ]; then subject="$value"; let "i=$i+1";fi
  if [ "$opt" == "--smtpport" ]; then smtpport="$value";fi
  if [ "$opt" == "--usessl" ]; then usessl="true";fi
  if [ "$opt" == "--help" ]; then showhelp="1"; let "i=$i+1";fi
done

if [ ! $smtpport ] && [ ! $usessl ]
then
  smtpport=25
elif [ ! $smtpport ] && [ $usessl ]
then
  smtpport=465
fi

if [ ! $i ] || [ $i -ne 5 ] || [ $showhelp ]
then
  echo "Usage: `basename $BASH_SOURCE` [OPTIONS]"
  echo
  echo "Required options:"
  echo "    --mailfrom=[MailFromAdress]"
  echo "    --mailto=[MailToAdress]"
  echo "    --subject=[Subject]"
  echo "    --bodyfile=[MailBodyFile]"
  echo "    --smtpserver=[SMTPServer]"
  echo "Optional:"
  echo "    --usessl"
  echo "    --smtpport=[SMTPPort]"
  echo "    --headerfile=[MailHeaderFile]"
  echo "    --smtplogin=[SMTPLogin]"
  echo "    --smtppassword=[SMTPPassword]"
  echo
  echo "Example:"
  echo "./mailsend --mailfrom=mailfrom@test.ru --mailto=mailto@test.ru --subject=\"Subject\" --bodyfile=body.txt --smtpserver=smtp.test.ru --smtplogin=test --smtppassword=\"secret\""
  echo "Error! No options are specified." | logger -t `basename $BASH_SOURCE` -p local0.info
  echo
  echo "Writen by SAY (say@pitsol.ru)"
  exit
fi

if [ ! -f $bodyfile ]
then
  echo "Error! Cannot find your mail body text file."
  echo "Error! Cannot find your mail body text file." | logger -t `basename $BASH_SOURCE` -p local0.info
  exit 1
fi
if [ $headerfile ] && [ ! -f $headerfile ]
then
  echo "Error! Cannot find your mail headers text file."
  echo "Error! Cannot find your mail headers text file." | logger -t `basename $BASH_SOURCE` -p local0.info
  exit 1
fi

if [ $usessl ]
then
echo "SSL"
(echo "helo me";
if [ $smtplogin ] && [ $smtppassword ];
then
  echo "auth login";
  echo $smtplogin;
  echo $smtppassword;
fi;
echo "Mail From: $mailfrom";
echo "Rcpt To: $mailto";
echo "Data";
if [ $headerfile ];
then
  cat $headerfile;
fi;
echo "Subject: "$subject;
echo "From: "$mailfrom;
echo "To: "$mailto;
echo ;
cat $bodyfile;
echo ".";
echo "quit";)| openssl s_client -host $smtpserver -port $smtpport -ign_eof
echo "Mail Send."
echo "Mail Send." | logger -t `basename $BASH_SOURCE` -p local0.info
else
echo "NO SSL"
exec 9<>/dev/tcp/$smtpserver/$smtpport
echo "HELO me" >&9
read -r temp <&9
echo "$temp"
if [ $smtplogin ] && [ $smtppassword ]
then
  echo "auth login" >&9
  read -r temp <&9
  echo $smtplogin >&9
  read -r temp <&9
  echo $smtppassword >&9
  read -r temp <&9
fi
echo "Mail From: $mailfrom" >&9
read -r temp <&9
echo "$temp"
echo "Rcpt To: $mailto" >&9
read -r temp <&9
echo "$temp"
echo "Data" >&9
read -r temp <&9
echo "$temp"
if [ $headerfile ]
then
  cat $headerfile >&9
fi
echo "Subject: "$subject >&9
echo "From: "$mailfrom >&9
echo "To: "$mailto >&9
echo >&9
cat $bodyfile >&9
echo "." >&9
read -r temp <&9
echo "$temp"
echo "quit" >&9
read -r temp <&9
echo "$temp"
9>&-
9<&-
echo "Mail Send."
echo "Mail Send." | logger -t `basename $BASH_SOURCE` -p local0.info
fi
exit 0

Пример запуска:

./mailsend --mailfrom={адрес_отправителя} --mailto={адрес_получателя} --subject="{тема_письма}" --bodyfile={путь_к_файлу_с_телом_письма} --smtpserver={почтовый_сервер} --smtplogin={имя_пользователя} --smtppassword="{пароль}"

 

Рейтинг: 3.8/5 (Голосов: 13)
PITSol© 2010 - 2014. При использовании материалов ссылка на сайт обязательна.
Рейтинг@Mail.ru