PDA

Показать полную графическую версию : Perl + sendmail


ivank
08-08-2004, 01:47
Есть такой код:open (MAIL,"| $SEND_MAIL -t");
print MAIL "To: $to\n";
print MAIL "From: $fromaddr\n";
print MAIL "Reply-to: $replyaddr\n" if $replyaddr;
print MAIL "X-Mailer: Perl Powered Socket Mailer\n";
print MAIL "Content-Type: text/plain; charset=Windows-1251\n";
print MAIL "Subject: $subject\n\n";
print MAIL "$message";
print MAIL "\n";

Всё бы прекрасно, вот только не шлёт оно письма на mail.ru :( (угадайте с трёх раз откуда я этот кусок взял :)). Вопрос: это некорректный код или неправильно настроен sendmail?

Prisoner
08-08-2004, 02:52
Молча не шлет? И только на мыло.ру?

ivank
08-08-2004, 05:27
Молча (в смысле на stdin/stderr ничего не говорит). Может в логи что-то и пишет, но они мне не доступны.

Добавлено:

На сколько мне известно не шлёт только на mail.ru (bk.ru, inbox.ru это тот же мэйл.ру)

Prisoner
09-08-2004, 00:57
Вроде все нормально (насколько подсказывают мне мои скуlные познания Perl), больше бы информации :\.

Vlad Drakula
09-08-2004, 20:04
ivank
я предложу тредтий вариант - мейл ру просто бъет эти письма, я сталкивался с подобной пробленной когда мне от хостера не доходили письма...

archy
09-08-2004, 22:31
Попробуй написать так:
open (MAIL,"| $SEND_MAIL -t") || die "sendmail sux";
и посмотри, что будет дальше

mar
09-08-2004, 23:37
ivank
Может в логи что-то и пишет, но они мне не доступны Вот те на! а я думала, что это выделенный сервер и все логи админу доступны :o
Упс! - забавно:

-bash-2.05b$ telnet forum.oszone.net smtp
Trying 66.79.174.172...
Connected to forum.oszone.net.
Escape character is '^]'.
220 master.phpdevs.com ESMTP
quit
221 master.phpdevs.com
Connection closed by foreign host.


ошибок в коде вроде бы нет. (кажется - по тому куску, что виден)
Вариант раз - нервная реакция на кодировку (в свое время предлагалось все не в koi посылать подальше)
Вариант два - пробовать все-таки получить логи (хотя предложение *archy, несмотря на его заманчивость, :) может и не пройти: я думаю, что sendmail ставит письма в очередь, а чудеса начинаются потом)
Вариант три: пргнать код с какого-нибудь независимого сервера, где логи можно поглядеть на какой-нибудь адрес mail.ru
Кто больше? :)

ivank
10-08-2004, 00:20
Попробуй написать так:

Код: open (MAIL,"| $SEND_MAIL -t") || die "sendmail sux";
sendmail есть и запускается, так что не прокатит.

Собственно говоря, перл тут совсем не причём. Поскольку если я говорю то же самое sendmail'у через ssh сам, то эффект наблюдается прежний.

Вариант раз - нервная реакция на кодировку (в свое время предлагалось все не в koi посылать подальше) Нет, если указывать кои или не указывать ничего, то ничего не меняется.

Вот те на! а я думала, что это выделенный сервер и все логи админу доступныСервер выделенный, да. Только я не сисадмин. Мне только логи апача легко достать, за остальным надо обращаться к самому главному. Что видимо и придётся делать.

Исправлено: ivank, 0:25 10-08-2004

mar
10-08-2004, 18:00
ivank Лови! если у тебя нет дополнительных данных для скрипта-отправителя, то вот ответы mail.ru:
#!/usr/local/bin/perl -w
$SEND_MAIL = "/usr/sbin/sendmail";
$to = "mnesin\@mail.ru";
$fromaddr = "mar\@mail.bio.pu.ru";
$subject = "test";
$message = "test_mess";
## дальше - твое
open (MAIL,"| $SEND_MAIL -t");
print MAIL "To: $to\n";
print MAIL "From: $fromaddr\n";
#print MAIL "Reply-to: $replyaddr\n" if $replyaddr;
print MAIL "X-Mailer: Perl Powered Socket Mailer\n";
print MAIL "Content-Type: text/plain; charset=Windows-1251\n";
print MAIL "Subject: $subject\n\n";
print MAIL "$message";
print MAIL "\n";

Пока все правильно?
Получаем:
cat /var/log/maillog
Aug 10 17:52:22 bastion sendmail[19052]: RAA19050: to=mnesin@mail.ru, ctladdr=mar (1010/0),
delay=00:00:11, xdelay=00:00:11, mailer=esmtp, relay=mxs.mail.ru. [194.67.23.20], stat=User unknown
Aug 10 17:52:22 bastion sendmail[19052]: RAA19050: RAA19052: DSN: User unknown
Aug 10 17:52:22 bastion sendmail[19052]: RAA19052: to=mar, delay=00:00:00, xdelay=00:00:00,
mailer=local, stat=Sent
Aug 10 17:59:01 bastion sendmail[19077]: RAA19077: from=mar, size=153, class=0, pri=30153, nrcpts=1,
msgid=<200408101759.RAA19077@localhost>, relay=mar@localhost

И имеем письмо мне:
The original message was received at Tue, 10 Aug 2004 17:52:11 GMT
from mar@localhost

* ----- The following addresses had permanent fatal errors -----
mnesin@mail.ru

* ----- Transcript of session follows -----
... while talking to mxs.mail.ru.:
>>> RCPT To:<mnesin@mail.ru>
<<< 550-Verification failed for <mar@localhost> Unrouteable address
<<< 550 non-local sender verification failed
550 mnesin@mail.ru... User unknown


Исправлено: mar, 18:05 10-08-2004

ivank
14-08-2004, 20:05
Спасибо. Хотя я всё равно, видимо, банально через SMTP сервер слать буду (т.к. через него всё ходит). Т.к. почему сия ошибка возникает: ни малейшего представления не имею.

mar
14-08-2004, 20:43
ivank
банально через SMTP сервер слать буду
"истинно, истинно, говорю я вам" *;) мне этот вариант тоже всегда больше нравится :)
заодно проверила свой старый перловый, через smtp работающий, почтовик (http://forum.oszone.net/topic.cgi?forum=20&topic=127&start=0#2) на предмет посылки на mail.ru - никаких проблем


Добавлено:

ivank
существенное дополнение: я стала разбираться в чем дело и выяснила, что при посылке просто руками mail имя@mail.ru получается та же петрушка с тем же отлупом. Тут уже было впору подумать о конфигурации sendmail-а. Оказалось, что там у меня на серваке не была выставлена опуция маскарадить localhost.localdomain После того, как это было сделано
CMlocalhost.localdomain в /etc/sendmail.cf (FreeBSD), все стало отправляться нормально. Опять запустила скрипт, сделанный из твоего и письмо дошло нормально(!) То есть в моем случае проблемы были в моих старых конфигурационных хвостах. И не скрипта, а сервака. Понятно также, что при работе по smtp системе было наплевать на все эти конфигурации - все передавалось по протоколу.
Так что - извини, может я тебя и дезинформировала, - надо все-таки логи сервера смотреть.




© OSzone.net 2001-2012