LinuxForum.Fans
Тема

Как можно отправить много писем из скрипта в цикле?

Автор: AlfaStriker 14 сообщений 3907 просмотров
#349816

Добрый вечер!

Вводные данные: Есть почтовый сервер Exim, на нем были установлены ограничения на отправку писем - 50 писем на 1 час.

Задача: Встал вопрос проверки этого ограничения, получается нужно в цикле отправить 100 писем скопом.

Вот мой рабочий скрипт:

# vi mailsend.sh
text
#!/bin/bash
i=0
count=100
touch /tmp/pipec.log
echo "Privet Andrey" >> /tmp/pipec.log
while [ i = count ]  #Будем выполнять цикл, пока $i будет равно $count
do
i=i+1
echo $i
mail -s "тра-та-та" admin@company.kz < /tmp/pipec.log
done
echo "Emails sended, counts: " + $i 
echo "Bye-Bye"

Вроде скрипт работает, но не показывает значение переменной $i
Вижу сообщение:

text
Emails sended, counts: 0 

И как можно скрипт сделать по уму, я могу не правильно писать скрипты, и вообще я далек от написания скриптов.

Да, и не уверен сколько писем отсылается этим скриптом. Может и не 100, а 200...

#349818
"AlfaStriker" написал:
while [ i = count ]

Видимо,

text
while [ i < count ]

И вместо

"AlfaStriker" написал:

touch /tmp/pipec.log
....
mail -s "тра-та-та" admin@company.kz < /tmp/pipec.log

Проще сразу

text

echo "Privet Andrey" | mail -s "тра-та-та" admin@company.kz
#349819

"AlfaStriker" написал:
#Будем выполнять цикл, пока $i будет равно $count
В этом случае цикл не выполняется, потому что i изначально не равно count, соответственно
"AlfaStriker" написал:
counts: 0
Цикл надо выполнять, пока i не будет равно count.
#349820

Вот, вот!
Честно сказать смущало именно условие. Чувствовал что криво сделал.
Сделаю тогда так:

text

#!/bin/bash
i=0
count=100
while [ i < count ]  #Будем выполнять цикл, пока $i не станет  больше $count
do
i=i+1
echo $i
echo "Privet Andrey" |  mail -s "тра-та-та" admin@company.kz
done
echo "Emails sended, counts: " + $i 
echo "Bye-Bye"

Буду проверять...

#349821

Ошибка:

text
./mailsend.sh: line 4: count: No such file or directory
Emails sended, counts:  + 0
Bye-Bye

Смотрю как исправить...

#349822

Переменные вроде надо указывать в начале $

#349823

Взлетел вот такой простенький скрипт:

text
#!/bin/bash
i=0
count=100
while [ $i -lt $count ]; do
    echo $i
    i=$(($i+1))
    echo "Privet Andrey" |  mail -s "тра-та-та" admin@company.kz
done
echo "Emails sended, counts: $i"
echo "Bye-Bye"

Работает как часики :)
Ура!!!

#349824
Kettler написал:
Переменные вроде надо указывать в начале $

Да вроде и так работает. Пока не ругается сильно.

#349826

Подшаманил не много:

text

#!/bin/bash
i=0
count=100
admin=admin@company.kz
while [ $i -lt $count ]; do
    echo "Sending email №$i to adress $admin"
    i=$(($i+1))
    echo "Privet Andrey" |  mail -s "ha-ha-haa" $admin
done
echo "Emails sended, counts: $i"
echo "Recipient: $admin"
echo "Bye-Bye"
#350132

если баш фигали городить

text
for x in {1..10}; do echo "Privet Andrey" |  mail -s "тра-та-та" admin@company.kz; done
#350134

smaharbA, рад видеть вас тут!
На Мисте не сидится?))))
Я там уже целый год как не бывал.

#350138

Гуру Линукс значить тут. Это хорошо когда Гуру здесь много, дельные советы всегда нужны.
На Мисте прям все темы с Юниксом и Линуксом требовали твоего участия, руки у всех опускались.

#350141

к слову, для этой задачи не стоит использовать mail/mailx он привязан к мта, лучче какойнибудь mutt

text
echo TEST | mutt -s TEST -e "set smtp_url=smtp://192.168.0.1" -- admin@company.kz
Войдите или зарегистрируйтесь, чтобы ответить.