Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
DeN2002
Зарегистрирован: 25.07.2002 Сообщения: 29 Откуда: Красноярск
|
Добавлено: Ср Авг 14 2002 22:32 Заголовок сообщения: Как запустить sendmail целиком из командной строки? |
|
|
Я чайник в UNIX и не знаю по каким принципам там работает консоль.
Вот фрагмент кода на Perl:
system("at now + 1 minute"); system("/usr/sbin/sendmail -t -odq"); system("From: \"Администратор\" "); system("To: \"$NAME\" "); system("Subject: Тема..."); system("\n\n"); system("Сообщение..."); system("\n\n");
.. итоге, письмо не приходит.
Что я делаю не так? Подскажите пожалуйста, если можно.
С уважением, DeN. |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Чт Авг 15 2002 13:22 Заголовок сообщения: Мдя... (+) |
|
|
Это ж надо...
Я в шоке... |
|
Вернуться к началу |
|
|
Dmitry.Karpov http://www. Гость
|
Добавлено: Чт Авг 15 2002 20:22 Заголовок сообщения: Ты не путай консоль и shell |
|
|
Когда ты запускаешь команду с консоли (с клавиатуры), ее stdin соответствует той же консоли. Но system("команда аргументы") запускает команду с аргументами, но stdin наследуется у Perl-программы, а новые команды system("...") не выводят чего-то в stdin запущенной команды, а запускают новые экземпляры shell.
Тут надо делать немного совсем иначе. К сожалению, я так и не изучил Perl, поэтому объясняю на пальцах. сначала надо открыть файл через пайп-команду - что-то типа OPEN("| /usr/sbin/sendmail -t -odq") и потом писАть в этот файл все, что ты хочешь скормить СендИэйлу.
А я запускаю отправку по почте таким shell-скриптом:
rmail denshish@mail.ru <<\. From prof From: Dmitry.Karpov@pi2.ru To: denshish@mail.ru Subject: тема сообщения MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: 8bit
тело сообщения .
Точка после <<\ и после тела сообщения (одна в строкЕ) связаны, вместо точки там можно использовать любое слово (RTFM про shell). Кажется, то же самое можно сделать и на Perl.
А and3008 мог бы ответить детальнее - наверно, у него просто шок от постановки вопроса... |
|
Вернуться к началу |
|
|
DeN2002
Зарегистрирован: 25.07.2002 Сообщения: 29 Откуда: Красноярск
|
Добавлено: Чт Авг 15 2002 22:36 Заголовок сообщения: Так у меня ж другая проблема?! |
|
|
Да я ранее так и делал. Открывал себе спокойно OPEN(F,"|/usr/sbin/sendmail -t -odq"), а затем выводил туда что хотел. Все работало. Потом мне понадобилось отсрочить отправку письма. Я обратился на форуме с этим вопросом. Вы мне ответили, что можно использовать команду at. Проблема в том, что команда at запускает то, что также передается через STDIN.
То есть, упомянутый shell-скрипт выглядел бы так.
at now + 1 minute |
|
Вернуться к началу |
|
|
Dmitry.Karpov http://www. Гость
|
Добавлено: Чт Авг 15 2002 23:15 Заголовок сообщения: Попробуй типа OPEN(F,"|at now + 1 minute") и далее скорми ему остальное! |
|
|
Неужели неочевидно, что в таком случае команда "/usr/sbin/sendmail -t -odq" - это не команда, а составная часть stdin для команды "at now + 1 minute"? Это потом уже at будет интепретировать первую строчку как команду, которую надо запустить. Правда, я не уверен, что at скормит на stdin СендМайлу остальное...
Есть еще один вариант: записать задание для at в файл и пусть at запустит файл как скрипт (сценарий). |
|
Вернуться к началу |
|
|
DeN2002
Зарегистрирован: 25.07.2002 Сообщения: 29 Откуда: Красноярск
|
Добавлено: Пт Авг 16 2002 01:12 Заголовок сообщения: Не получается :(( |
|
|
Попробовал оба варианта. Ничего не происходит. Обидно, что даже отследить ничего нельзя
С уважением, DeN. |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Пт Авг 16 2002 10:17 Заголовок сообщения: Re: Не получается :(( |
|
|
Ты, главное, пойми, что, когда ты даешь команду system("команда"), perl делает вот что: sh -c команда. А когда ты в шелле (sh) отправляешь через sendmail, ты делаешь по сути вот что: sendmail получатель |
|
Вернуться к началу |
|
|
DeN2002
Зарегистрирован: 25.07.2002 Сообщения: 29 Откуда: Красноярск
|
Добавлено: Пт Авг 16 2002 15:33 Заголовок сообщения: И что мне делать? |
|
|
Я не знаю UNIX'овых команд и использую все, что нахожу в книжке по Perl. Именно поэтому я и обратился за помощью к тем, кто знает команды UNIX.
Извините за чайниковость.
С уважением, DeN. |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Пт Авг 16 2002 17:55 Заголовок сообщения: Re: И что мне делать? |
|
|
man sh man chmod и пойми следующие идеи. Естественно, чисто в приведенном виде может быть неправильно, ты пойми идею и оформи своими красками. Будет твоя картина.
1) через файл. делаешь средствами Perl'а файл (perlfile) с таким содержимым: ---------------------------------- sendmail получатель |
|
Вернуться к началу |
|
|
DeN2002
Зарегистрирован: 25.07.2002 Сообщения: 29 Откуда: Красноярск
|
Добавлено: Пт Авг 16 2002 20:36 Заголовок сообщения: Все это зашло слишком далеко... |
|
|
Все это зашло слишком далеко. Я не знаю команд ни SH ни CHMOD. Я скромно работаю с перлом и не лезу в Unix.
Мне нужно было сделать так, чтобы за 30 минут не было послано больше 10 писем, иначе система, предоставляющая бесплатный хостинг, решит, что у меня стоит скрипт массовой рассылки. Я поступлю проще: т.к. отправка/неотправка письма зависит от пользователя, то я просто запрещу им посылать письма чаще, чем через каждые 3-4 минуты. Не очень удобно, зато просто.
С уважением, DeN. |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Сб Авг 17 2002 16:36 Заголовок сообщения: Re: Все это зашло слишком далеко... |
|
|
Так вот в чем дело! Вопрос в том, чтобы не попасть в спаммеры! Хмммм... Просто?... Есть вопросы, которые "просто" не решаются, IMHO, здесь как раз такой случай. |
|
Вернуться к началу |
|
|
DeN2002
Зарегистрирован: 25.07.2002 Сообщения: 29 Откуда: Красноярск
|
Добавлено: Сб Авг 17 2002 22:14 Заголовок сообщения: Ответ на: "Re: Все это зашло слишком дале..- Борис- 17-08-2002 17:36" И в чем могут быть подводны |
|
|
На чем я могу споткнуться в таком случае?
С уважением, DeN. |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Пн Авг 19 2002 09:43 Заголовок сообщения: Re: Ответ на: "Re: Все это зашло слишком дале..- Борис- 17-08-2002 17:36" И в чем могут быть подводные камни? |
|
|
Например, много законопослушных пользователей шлют почту (одновременно) через машину, которая подменяет их адреса своим. Тогда твой скрипт решит (если запрет на быструю повторную посылку будет приниматься на основании IP-адреса отправителя), что это один и тот же пользователь шлет много писем и обрежет их. Наоборот, если спаммер управляет несколькими машинами, то твой скрипт решит, что это благонамеренные пользователи. А сам твой скрипт? Если будет обрабатываеть столько нормальных сообщений от благонамеренных пользователей, что их будет больше, чем 10 писем за 30 минут? Его самого в спаммеры запишут. Еще соображение. 30/10=3. То есть пауза, которую ты даешь пользователю у тебя равна паузе, которую дали тебе самому? Тогда у тебя фактически однопользовательская почта, так? Но тогда зачем вообще этот скрипт? |
|
Вернуться к началу |
|
|
DeN2002
Зарегистрирован: 25.07.2002 Сообщения: 29 Откуда: Красноярск
|
Добавлено: Вт Авг 20 2002 03:54 Заголовок сообщения: Спасибо за ценные указания. Я решил... |
|
|
Да, зря я затеял всю эту бучу. Истина, как всегда, оказалась рядом. Я сделаю защиту на уровне пользовательского интерфейса. Действительно, у меня нет тех потоков пользователей, которые могут записать меня в спаммеры.
С уважением, DeN. |
|
Вернуться к началу |
|
|
|