Проблема такая: на сайте, написанном на php есть форма для отправки писем пользователям. Судя по логам на моем сервере, письма людям уходят (Status: Sent), но никому (кроме пользователей, живущих на том же сервере) не приходят. Сначала думал на конечных серверах срезают спам-фильтры. Но нет, проверил один - там нет никаких логов о приходе письма. Есть мысли куда копать?
Вот заголовок такого письма (копия пришла ко мне)Return-Path: <apache@xxx.ru>
Received: from xxx.ru (localhost.localdomain [127.0.0.1])
by xxx.ru (8.13.4/8.13.4) with ESMTP id n2BFS7DO018762
for <andlis@xxx.ru>; Wed, 11 Mar 2009 18:28:07 +0300
Received: (from apache@localhost)
by xxx.ru (8.13.4/8.13.4/Submit) id n2BFS7eI018761;
Wed, 11 Mar 2009 18:28:07 +0300
Date: Wed, 11 Mar 2009 18:28:07 +0300
Message-Id: <200903111528.n2BFS7eI018761@xxx.ru>
To: andlis@xxx.ru
Subject: RJT newsletter
From: "RJT" <andlis@xxx.ru>
Reply-To: <andlis@xxx.ru>
MIME-Version: 1.0
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: PHP/5.0.4
Content-Type: text/html; charset=windows-1251
Content-Transfer-Encoding: 8bitВижу глазами несовпадение Return-Path: и From:
Это конечно плохо. Но как бороться силами php честно говоря не знаю.
HELP!!
Покажи лог МТАЗ.Ы.
return path и From и не обязаны совпадать
>Покажи лог МТА
>
>З.Ы.
>return path и From и не обязаны совпадатьНу не обязаны!.. Но я же не знаю как где спам-фильтры настроены?
С логом не очень просто, нагрузка на сервер большая, логов мульон. Попробую по порядку. Во-первых на sendmail стоит настройка (пишу из виндов, наизусть синтаксис не помню) фильтровать по адресу отправителя. Relay_from: ***. И честно говоря, apache там не означен как разрешенный адрес.
О сием говорит и следующий лог (специально только что инспирированный - это я честно в Outlook Express создал пользователя апач ну и отправил письмо):
Mar 13 12:01:58 zmmu sendmail[6223]: n2D91weS006223: ruleset=check_rcpt, arg1=<tesak@yyyy.ru>, relay=[192.168.1.27], reject=550 5.7.1 <tesak@yyy.ru>... Relaying denied. IP name lookup failed [192.168.1.27]
Mar 13 12:01:58 zmmu sendmail[6223]: n2D91weS006223: from=<apache@xxx.ru>, size=0, class=0, nrcpts=0, proto=SMTP, daemon=MTA, relay=[192.168.1.27]Теперь отправляю через php
Mar 13 12:03:45 zmmu sendmail[6311]: n2D93juW006311: from=apache, size=6793, class=0, nrcpts=1, msgid=<200903130903.n2D93juW006311@xxx.ru>, relay=apache@localhost
Mar 13 12:03:53 zmmu sendmail[6311]: n2D93juW006311: to=aborisen@yyy.ca, ctladdr=apache (48/48), delay=00:00:08, xdelay=00:00:08, mailer=relay, pri=36793, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (n2D93jk4006313 Message accepted for delivery)Тихо мирно, никакой ругани. Письмо умерло.
>Покажи лог МТАНу вот говорил мульон логов! Каюсь, посмотрел только на один pid, а их на письмо два.
Такой лог:
Mar 13 12:27:46 zmmu sendmail[9062]: n2D9RkaE009062: from=apache, size=6793, class=0, nrcpts=1, msgid=<200903130927.n2D9RkaE009062@xxx.ru>, relay=apache@localhost
Mar 13 12:27:46 zmmu sendmail[9063]: n2D9RkKE009063: from=<apache@xxx.ru>, size=7018, class=0, nrcpts=1, msgid=<200903130927.n2D9RkaE009062@xxx.ru>, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1]Mar 13 12:27:54 zmmu sendmail[9063]: n2D9RkKE009063: discarded
Mar 13 12:27:54 zmmu sendmail[9062]: n2D9RkaE009062: to=aborisen@yyy.ca, ctladdr=apache (48/48), delay=00:00:08, xdelay=00:00:08, mailer=relay, pri=36793, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (n2D9RkKE009063 Message accepted for delivery)Ну вроде ясно - отлуп.
Не ясно совсем почему сначала отлуп, а потом Sent... Получается первая запись [9062] он переписывает apache@localhost в apache@xxx.ru? А потом [9063] пытается послать письмо aborisen@yyy.ca и получает отлуп?
А при чем тут тогда postfix, если у вас используется sendmail?!!!
>Mar 13 12:27:46 zmmu sendmail[9062]: n2D9RkaE009062: from=apache, size=6793, class=0, nrcpts=1, msgid=<200903130927.n2D9RkaE009062@xxx.ru>, relay=apache@localhost
>Mar 13 12:27:46 zmmu sendmail[9063]: n2D9RkKE009063: from=<apache@xxx.ru>, size=7018, class=0, nrcpts=1, msgid=<200903130927.n2D9RkaE009062@xxx.ru>, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1]
>
>Mar 13 12:27:54 zmmu sendmail[9063]: n2D9RkKE009063: discarded
>Mar 13 12:27:54 zmmu sendmail[9062]: n2D9RkaE009062: to=aborisen@yyy.ca, ctladdr=apache (48/48), delay=00:00:08, xdelay=00:00:08, mailer=relay,
>pri=36793, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (n2D9RkKE009063 Message accepted for delivery)
>Не ясно совсем почему сначала отлуп, а потом Sent...
>Получается первая запись
>[9062] он переписывает apache@localhost в apache@xxx.ru?Не получается.
При отправке письма непосредственно с сервера sendmail пишет в лог 4 строки, если все нормально.
Покажите лог так egrep "n2D9RkaE009062|n2D9RkKE009063" maillog>А при чем тут тогда postfix, если у вас используется sendmail?!!!
А при том, что сегодня пятница тринадцатое :)
>>А при чем тут тогда postfix, если у вас используется sendmail?!!!Какой postfix, матушки??? Не было никакого постфикса!
>Покажите лог так egrep "n2D9RkaE009062|n2D9RkKE009063" maillog
Так я же привел как раз! См выше.
>Какой postfix, матушки??? Не было никакого постфикса!Ну что вы так реагируете ... Я ж говорю, пятница 13 ...
Сегодня вместо sendmail чертики могут привидеться :)>>Покажите лог так egrep "n2D9RkaE009062|n2D9RkKE009063" maillog
>Так я же привел как раз! См выше.Видела. Хотелось точного ответа именно по грепу, ну да ладно ...
Теперь egrep "yyy.ca|xxx.ru" /etc/mail/access
и я думаю, все станет ясно.То, что вы видите в логе Sent, не имеет отношения к отправке письма за пределы сервера.
В дистрибутиве есть файл SECURITY. Так вот эффект двойной записи при отправке почты непосредственно с сервера имеет отношение к тому, что там написано, и в действительности
имеет значение не запись
Mar 13 12:27:54 zmmu sendmail[9062]: n2D9RkaE009062: to=aborisen@yyy.ca, ctladdr=apache (48/48), delay=00:00:08, xdelay=00:00:08, mailer=relay,
>pri=36793, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (n2D9RkKE009063 Message accepted for delivery)(обратите внимание - mailer=relay, а relay=[127.0.0.1] [127.0.0.1], это означает,
что письмо пока что попало в /var/spool/clientmqueue)а вот эта запись - это окончательное решение
Mar 13 12:27:54 zmmu sendmail[9063]: n2D9RkKE009063: discarded
Ну да, напрягает порядок расположения записей в этом случае, но это уже вопрос к разработчикам :)Такое положение вещей имеет место с 8.12 версии, то есть с 2002 г.
>Видела. Хотелось точного ответа именно по грепу, ну да ладно ...
>Mar 13 17:00:38 zmmu sendmail[5518]: n2DE0csd005518: from=apache, size=6793, class=0, nrcpts=1, msgid=<200903131400.n2DE0csd005518@xxx.ru>, relay=apache@localhost
Mar 13 17:00:38 zmmu sendmail[5519]: n2DE0ccT005519: from=<apache@xxx.ru>, size=7018, class=0, nrcpts=1, msgid=<200903131400.n2DE0csd005518@xxx.ru>, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1]
Mar 13 17:00:46 zmmu sendmail[5519]: n2DE0ccT005519: discarded
Mar 13 17:00:46 zmmu sendmail[5518]: n2DE0csd005518: to=aborisen@yyy.ca, ctladdr=apache (48/48), delay=00:00:08, xdelay=00:00:08, mailer=relay, pri=36793, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (n2DE0ccT005519 Message accepted for delivery)>Теперь egrep "yyy.ca|xxx.ru" /etc/mail/access
>и я думаю, все станет ясно.Запись (хоть я и не греп) выглядит так:
From: apache@xxx.ru Relay
Записей
From: apache@localhost Relay
и
From: aborisen@yyy.ca Relay
Конечно нет. По крайней мере второй (я надеюсь) не пользуется моим сервером для отправки.
>[оверквотинг удален]
>имеет значение не запись
>Mar 13 12:27:54 zmmu sendmail[9062]: n2D9RkaE009062: to=aborisen@yyy.ca, ctladdr=apache (48/48), delay=00:00:08, xdelay=00:00:08, mailer=relay,
>
>>pri=36793, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (n2D9RkKE009063 Message accepted for delivery)
>
>(обратите внимание - mailer=relay, а relay=[127.0.0.1] [127.0.0.1], это означает,
>что письмо пока что попало в /var/spool/clientmqueue)
>
>а вот эта запись - это окончательное решение
>Mar 13 12:27:54 zmmu sendmail[9063]: n2D9RkKE009063: discardedДа, это я понимаю..
Ага!! Вашими молитвами дошел до следующего.
Вследствие каких-то моих политик (ох если бы помнить все это) sendmail не позволяет отправлять с localhost.localdomain письма наружу.Вижу 2 способа решения проблемы (поправьте)
либо разрешить отправлять локальную почту наружу (помнить бы еще как это)
либо каким-то образом заставить php-скрипт отправлять почту от имени реального юзера. Как сделать - еще более туманно.
Все так?
>Ага!! Вашими молитвами:) :) :)
>Вследствие каких-то моих политик (ох если бы помнить все это) sendmail не
>позволяет отправлять с localhost.localdomain письма наружу.Ага, как раз собираюсь попросить ваш конфиг&access
У вас 127.0.0.1 RELAY в access или просто 127.0.0.1 в relay-domains имеется?>Вижу 2 способа решения проблемы (поправьте)
>либо разрешить отправлять локальную почту наружу (помнить бы еще как это)
>либо каким-то образом заставить php-скрипт отправлять почту от имени реального юзера. >Как сделать - еще более туманно.
>Все так?Будем думать ...
>Ага, как раз собираюсь попросить ваш конфиг&access
>У вас 127.0.0.1 RELAY в access или просто 127.0.0.1 в relay-domains имеется?Сдается мне нет. Сейчас поимею и скажу результат.
Пробовал добавить
From:apache@localhost RELAY
это не помогает.
Подлая память подсказывает, что в sendmail.cf а еще честнее в sendmail.mc есть опции как раз вырубающие разные способы пересылки почты. Возможно способ с localhost -> наружу как раз нужно включать специально.
я жутко извиняюсь,
может быть есть в оперативной памяти информация...
можно из командной строки отправить через sendmail письмо от имени некоего пользователя?
Что то не ищутся парметры командной строки sendmail...
вы об этом?
http://www.anrb.ru/linux/sendmail_tips.html#4
>вы об этом?
>http://www.anrb.ru/linux/sendmail_tips.html#4Вероятно да! Спасибо.
Идею про
>У вас 127.0.0.1 RELAY в access или просто 127.0.0.1 в relay-domains имеется?придется отбросить.
127.0.0.1 RELAY в access быть не может - там проверка по адресам.
127.0.0.1 в relay-domains теперь имеется. ТОлку чуть :((
мне не понятно, почему у вас discard не сопровождается ruleset=check_(rcpt|mail|relay)
как это должно было бы происходить в случае отказа на этих этапах smtp-диалогане прикручены ли у вас через milter какие-нить доп. фильтры?
>не прикручены ли у вас через milter какие-нить доп. фильтры?прикручены.
divert(-1)
include(`/usr/share/sendmail-cf/m4/cf.m4')
divert(0)dnl
VERSIONID(`@(#)zmmu.mc')
OSTYPE(`linux')dnl
define(`confDOMAIN_NAME', `xxx.ru')dnl
CLIENT_OPTIONS(`Family=inet,Address=xxx.xxx.xxx.xxx`)dnl
## KASPERSKY ANTI-SPAM BEGIN
INPUT_MAIL_FILTER(`kasfilter',`S=local:/var/run/kas-milter.socket, T=C:10s;S:20s;R:30s')
define(`confINPUT_MAIL_FILTERS',`kasfilter')
define(`confMILTER_LOG_LEVEL',`1')
## KASPERSKY ANTI-SPAM END
FEATURE(`access_db')dnl
FEATURE(`relay_mail_from')dnl
MAILER(local)dnl
MAILER(smtp)dnl
define(`confMAILER_NAME', `ZMMUMAILER-DAEMON')dnl
define(`confTO_QUEUERETURN', `15d')dnl
define(`confTO_QUEUEWARN', `1d')dnl
define(`confMAX_MESSAGE_SIZE', `10000000')Это спам фильтр от Касперского и ручная проверялка релея (ой мама!! - покопаю). Но они всегда! и честно! пишут когда режут чего..
Kstorage macro
KNOSPAM01 regex -a@MATCH yahoo.com|google.com|192\.168\.1|arsalon.net|msu.ru
KSPAM7 regex -a@MATCH [0-9]+[._-]+[0-9]+[._-]+[0-9]+[._-]+[0-9]+[._-]+.*\[.+\]|^\[.+\]|chello.*chello\.pl
KSPAM8 regex -a@MATCH ^dsl.*\..*\..*|[ax]dsl.*\..*\..*|client.*\..*\..*|cable.*\..*\..*|pool.*\..*\..*|dial.*\..*\..*|ppp.*\..*\..*|dslam.*\..*\..*|node.*\-.*\-.*LOCAL_RULESETS
SLocal_check_relay
R$* $: $(NOSPAM01 $&_ $)
R@MATCH $@ OKR$* $: $(SPAM7 $&_ $)
R@MATCH $#error $: 553 Sorry, Your relay looks like SPAM7-relay: $&_. If not, please contact the postmaster@zmmu.msu.ru via another relay-ip.SLocal_check_relay
R$* $: $(SPAM8 $&_ $)
R@MATCH $#error $: 553 Sorry, Your relay looks like SPAM-relay: $&_. If not, please contact the postmaster@zmmu.msu.ru via another relay-ip.
у меня к вашему конфигу есть вопросы, но времени сейчас разбирать его нетКак насчет того, чтобы увеличить уровень логирования и для sendmail и для milter
1 - это сурово :)define(`confLOG_LEVEL',`15')
define(`confMILTER_LOG_LEVEL',`18')
подробности по уровням в op.me
>у меня к вашему конфигу есть вопросы, но времени сейчас разбирать его
>нетну я думаю!
>Как насчет того, чтобы увеличить уровень логирования и для sendmail и для
>milter
>1 - это сурово :)
>
>define(`confLOG_LEVEL',`15')
>define(`confMILTER_LOG_LEVEL',`18')
>подробности по уровням в op.meНу в данный момент это вряд ли поможет...
ТОлько что освоил отправку от другого пользователя. Скоро узнаем поможет ли это..
Medlar, спасибо огромное!Логи я не трогал, но сделал kas3 stop
Как, каким образом эта пакость съедала все письма?
В общем справедливость восторжествовала! Спасибо еще раз!
>Логи я не трогал, но сделал kas3 stopкак только вчера увидела у вас kas в фильтрах, у меня сразу подозрение на него пало.
но зная за собой давнее предвзятое отношение к KAS&Co, решила обождать
с вынесением приговора ...
и кстати если бы не ваш очень странный для
milter уровень логирования причина ошибки была бы давным давно ясна
и может не пришлось бы заводить этот тред
>и кстати если бы не ваш очень странный для
>milter уровень логирования причина ошибки была бы давным давно ясна
>и может не пришлось бы заводить этот тредНу да.. Так знал бы прикуп... Честно говоря я начал с того, что просмотрел настройки KAS, разрешил отправку почты с соответствующих адресов и тп...
А уровень такой, потому что при фоновой активности (моей) никакой пользы кроме вреда от логов KAS я не получаю. Если их еще и раздувать, то вреда станет сильно больше чем пользы.
Но в целом каюсь, признаю - был не прав, вспылил!
Спасибо еще раз