LINUX.ORG.RU
ФорумAdmin

Как научить bash script проходить smtp авторизацию?

 , ,


0

1

Здравствуйте.
У меня на сервере стоит Centos, Postfix+dovecot. Все работает отлично.
Хочу написать скрипт, который авторизуется к юзеру info@mydomen.com посредством передачи строки AUTH PLAIN base64format и отправляет письмо.
Интересует именно такое решение без сторонних библиотек.
#!/bin/sh
function checkStatus {
expect=250
if [ $# -eq 3 ] ; then
expect=«${3}»
fi
if [ $1 -ne $expect ] ; then
echo «Error: ${2}»
exit
fi
}
MyHost='hostname'
MailHost='hostname'
MailPort=587
FromAddr='info@${MyHost}'
ToAddr='my@mail.com'
Subject='Hello world'
Message='My message'
exec 3<>/dev/tcp/${MailHost}/${MailPort}
read -u 3 sts line
checkStatus «${sts}» «${line}» 220
echo «HELO ${MyHost}» >&3
#echo «EHLO localhost» >&3
read -u 3 sts line
checkStatus «$sts» «$line»
echo «MAIL FROM: ${FromAddr}» >&3
read -u 3 sts line
checkStatus «$sts» «$line»
echo «RCPT TO: ${ToAddr}» >&3
read -u 3 sts line
checkStatus «$sts» «$line»
echo «DATA» >&3
read -u 3 sts line
checkStatus «$sts» «$line» 354
echo «Subject: ${Subject}» >&3
echo «${Message}» >&3
echo "." >&3
read -u 3 sts line
checkStatus «$sts» «$line»
echo -en «QUIT\r\n» >&3


После запуска скрипта появляется ошибка.

Error: 5.7.1 my@mail.com... Relaying denied. Proper authentication required.

Как научить скрипт авторизовываться?
Обычное подключение через тот же thunderbird проходит отлично.

В master.cf заключено следующее:
biff = no
append_dot_mydomain = no
smtpd_tls_cert_file=/etc/pki/dovecot/certs/dovecot.pem
smtpd_tls_key_file=/etc/pki/dovecot/private/dovecot.pem
smtpd_use_tls=no
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
myhostname = мойдомен.ком
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = мойдомен.ком
mydestination = mail.мойдомен.ком, мойдомен.ком, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

Заранее спасибо за идеи.



Последнее исправление: cetjs2 (всего исправлений: 1)

Можно с помощью expect авторизоваться telnet'ом

april
()

ты готовое не хочешь ? я про mutt.

dada ★★★★★
()

представляю как все усложнится когда понадобится starttls выполнить =)
+1 к mutt
или, если так хочется скриптовать - python smtplib

Example:

>>> import smtplib
>>> s=smtplib.SMTP(«localhost»)
>>> print s.help()
This is Sendmail version 8.8.4
Topics:
HELO EHLO MAIL RCPT DATA
RSET NOOP QUIT HELP VRFY
EXPN VERB ETRN DSN
For more info use «HELP <topic>».
To report bugs in the implementation send email to
sendmail-bugs@sendmail.org.
For local information send email to Postmaster at your site.
End of HELP info
>>> s.putcmd(«vrfy»,«someone@here»)
>>> s.getreply()
(250, «Somebody OverHere <somebody@here.my.org>»)
>>> s.quit()

fr_butch
()

или mutt, или man expect

leave ★★★★★
()

посредством передачи строки AUTH PLAIN

Ну дак и передавайте эту строку, особенно если желаете сами писать скрипт.

mky ★★★★★
()

Поставил такую конструкцию, сработала))

#!/bin/sh
( echo EHLO localhost
sleep 2
echo AUTH PLAIN AGluZm8AcG9zdDEyMw==
sleep 2
echo MAIL FROM: info@mydomen.com
sleep 2
echo RCPT TO: to@mail.com
sleep 2
echo DATA
sleep 2
echo Subject:Test-Mail!
sleep 2
echo it Works
sleep 2
echo .
sleep 2
echo QUIT
) | telnet localhost 587

alex1306
() автор топика
28 февраля 2014 г.

use python, там такие вещи делаются элементарно

Black_Shadow ★★★★★
()

Как научить скрипт авторизовываться?

зачем? Есть msmtp, можно и свой велик сделать.

emulek
()
Ответ на: комментарий от alex1306

Поставил такую конструкцию, сработала))

китайщина

тогда так:

while read S; do
  echo $S
  sleep 2
done < commands.txt | telnet
emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.