Название: Уведомления по почте Отправлено: Aivanzipper от 17 Ноября 2009, 17:16:59 Вообщем ситуация: поставил почтовик postfix на сервер с нодени, хочу получать на э-меил отчеты биллинга. Особенности почтового сервера: smtp без приветственного HELO и без последующей авторизации не пускает, соответственно все письма от биллинга не могут попасть в нужный ящик
Код: postfix/smtpd[53102]: connect from localhost[127.0.0.1] Далее привожу кусок кода из nodeny.pl который отвечает за отправку почты: Код: sub Send_smtp {print $SMTP $_[0]; sysread($SMTP,$_,1024); return(/^5/)} Ясно видно, что биллинг использует для отправки почты протокол smtp. Как сюда добавить HELO и авторизацию? Еще вариант - использовать локальную функцию mail(), но как реализовать это не знаю (в перле не силен). Помогите советом кто может. Название: Re: Уведомления по почте Отправлено: Efendy от 17 Ноября 2009, 20:17:07 &Send_smtp('лалала'.$CRLF);
Название: Re: Уведомления по почте Отправлено: Andrey Zentavr от 17 Ноября 2009, 22:09:58 Когда-то совсем недавно писал на пёрле скрипт для отсылки сообщений (postfix + HELO + авторизация при отправке.) Можно попробовать скрестить с NoDeny если сильно нужно.
Цитировать #!/usr/bin/perl use Net::SMTP; use Date::Format; %config = ( 'host' => "smtp.******.zp.ua", 'hello' => "nodeny.*****.zp.ua", 'timeout' => 30, 'user' => 'notify@*****.zp.ua', 'password' => '123', 'subject' => "PingStat Info", 'msgfile' => "/home/zentavr/myscripts/mailer/message", ); @recipients = ( 'zentavr@*******.zp.ua', 'glat@*******.zp.ua', ); # Открываем файл с текстом письма open(MSG, $config{'msgfile'}); $msg=<MSG>; close(MSG); # Цепляемся к SMTP серву $smtp = Net::SMTP->new( Host => $config{'host'}, Hello => $config{'hello'}, Timeout => $config{'timeout'}, ); # Авторизируемся $smtp->auth($config{'user'}, $config{'password'}); # От кого? $smtp->mail($config{'user'}); # Кому? $smtp->to(@recipients, {SkipBad => 1}); # Строим сообщение foreach (@recipients) { if(defined($rec)){ $rec = $rec . ", " . $_; } else { $rec = $_; } } print $rec."\n"; $time = time2str("%a, %e %b %Y %T %z", time); $headers = "From: Pinger <".$config{'user'}."> To: ".$rec." Subject: ".$config{'subject'}." Date: ".$time.""; # Шлём $smtp->data($headers . "\n" . $msg); # Quit $smtp->quit; Можно, конечно, ещё MIME-теги вставить, кодировку, правильно сформировать тему письма если письмо не на латиннице написано. ..для этого вся инфа есть в гугле. Скрипт был написан почти по примеру от Net::SMTP. Название: Re: Уведомления по почте Отправлено: Aivanzipper от 18 Ноября 2009, 09:32:36 Название: Re: Уведомления по почте Отправлено: Efendy от 18 Ноября 2009, 11:15:00 &Send_smtp('HELO'.$CRLF);
Название: Re: Уведомления по почте Отправлено: Aivanzipper от 18 Ноября 2009, 11:37:52 хорошо, а авторизацию можно как-то?
Название: Re: Уведомления по почте Отправлено: Efendy от 18 Ноября 2009, 18:15:04 хорошо, а авторизацию можно как-то? Текущая реализация - легковесная, минимум кода, построена на сокетах. Для smtp авторизации нужен отдельный модуль. Название: Re: Уведомления по почте Отправлено: Andrey Zentavr от 18 Ноября 2009, 22:51:00 хорошо, а авторизацию можно как-то? Текущая реализация - легковесная, минимум кода, построена на сокетах. Для smtp авторизации нужен отдельный модуль. Отдаю код в хорошие руки :) Название: Re: Уведомления по почте Отправлено: Efendy от 19 Ноября 2009, 02:11:09 В 49 и 50 ветки ничего нового не вносится, ожидается, что станут stable.
51 и 52 пока правятся на изменение структуры (логичности, удобности и т.д), ничего нового там пока нет, ну кроме окна авторизации. Выпускаться они будут не скоро - предстоит значительное тестирование. Да и хотспот я там реализую. В масштабах страны, тока тсс Название: Re: Уведомления по почте Отправлено: Aivanzipper от 19 Ноября 2009, 09:11:33 Добавляйте в 51 и 52 smtp-авторизацию! :)
Название: Re: Уведомления по почте Отправлено: Aivanzipper от 25 Ноября 2009, 17:54:12 Кстати, советую добавить в хедер письма 'Content-Type: text/plain; charset=windows-1251;'
ато проблемы с кодировками есть |