Система
uname -a
FreeBSD host1.mydomain.com 7.0-RELEASE FreeBSD 7.0-RELEASE #0: Sun Feb 24 19:59:52 UTC 2008 root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386На сервере хостятся несколько сайтов, на которых должна быть реализована отправка писем при регистрации, для активации акаунта.
В php.ini для этого роз комментировано
[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25В качестве SMTP используется sendmail
ps -aux|grep sendmail
root 824 0,0 0,3 5848 3544 ?? Ss 18:02 0:00,28 sendmail: accepting connections (sendmail)
smmsp 828 0,0 0,3 5848 3316 ?? Is 18:02 0:00,01 sendmail: Queue runner@00:30:00 for /var/spool/clientmqueue (sendmail)А проблема такая, при отправке письма sendmail, в поле отправитель подставляет hostname сервера — www@host1.mydomain.com, соответственно,письмо уходит. Но не всегда, некоторые сервера не принимают письма, вот что пишет maillog
Nov 14 18:09:21 leader sendmail[988]: mAEG9Lev000988: from=www, size=1320, class=0, nrcpts=1, msgid=<200811141609.mAEG9Lev000988@host1.domain.com>, relay=www@localhost
Nov 14 18:09:21 leader sm-mta[989]: mAEG9L7x000989: <user@domain.com>... User unknown
Nov 14 18:09:21 leader sendmail[988]: mAEG9Lev000988: to=user@domain.com, ctladdr=www (80/80), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=31320, relay=[127.0.0.1] [127.0.0.1], dsn=5.1.1, stat=User unknown
Nov 14 18:09:21 leader sm-mta[989]: mAEG9L7x000989: from=<www@host1.mydomain.com>, size=1320, class=0, nrcpts=0, proto=ESMTP, daemon=Daemon0, relay=localhost [127.0.0.1]
Nov 14 18:09:21 leader sendmail[988]: mAEG9Lev000988: mAEG9Lew000988: DSN: User unknown
Nov 14 18:09:21 leader sm-mta[989]: mAEG9L81000989: from=<>, size=3461, class=0, nrcpts=1, msgid=<200811141609.mAEG9Lew000988@host1.domain.com>, bodytype=8BITMIME, proto=ESMTP, daemon=Daemon0, relay=localhost [127.0.0.1]
Nov 14 18:09:21 leader sendmail[988]: mAEG9Lew000988: to=www, delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=32344, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (mAEG9L81000989 Message accepted for delivery)
Nov 14 18:09:21 leader sm-mta[990]: mAEG9L81000989: to=<www@host1.mydomain.com>, delay=00:00:00, xdelay=00:00:00, mailer=local, pri=33654, relay=local, dsn=2.0.0, stat=Sent
Nov 14 18:09:21 leader sendmail[993]: mAEG9L3W000993: from=www, size=1304, class=0, nrcpts=1, msgid=<200811141609.mAEG9L3W000993@host1.mydomain.com>, relay=www@localhostКоманда sendmail -d0.1 -bv root выводит-
Version 8.14.2
Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7
NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS PIPELINING SCANF
STARTTLS TCPWRAPPERS USERDB XDEBUG
============ SYSTEM IDENTITY (after readcf) ============
(short domain name) $w = host1
(canonical domain name) $j = host1.mydomain.com
(subdomain name) $m = mydomain.com
(node name) $k = host1.mydomain.com
========================================================В файле sendmail.cf исправил следующее
# my official domain name
# ... define this only if sendmail cannot automatically determine your domain
Djmydomain.com #Dj$w.Foo.COM
Dmcom
Dkmydomain.com
DwdomainТеперь (sendmail -d0.1 -bv root) показивает
Version 8.14.2
Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7
NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS PIPELINING SCANF
STARTTLS TCPWRAPPERS USERDB XDEBUG
============ SYSTEM IDENTITY (after readcf) ============
(short domain name) $w = domain
(canonical domain name) $j = mydomain.com
(subdomain name) $m = com
(node name) $k = mydomain.comНо ситуация не изменилась, SENDMAIL все равно в адрес отправителя ставит host1.mydomain.com, а не mydomain.com.
Собственно вопрос, как исправить ситуацию. В нете нашел информацию, что также можно через маскарадинг.
З.Ы. Прошу прощения, если что, FreeBSD занимаюсь не так долго и хостинг сервера не настраивал еще.
>[оверквотинг удален]
>(subdomain name) $m = com
>(node name) $k = mydomain.com
>
>Но ситуация не изменилась, SENDMAIL все равно в адрес отправителя ставит
>host1.mydomain.com, а не mydomain.com.
>Собственно вопрос, как исправить ситуацию. В нете нашел информацию, что также
>можно через маскарадинг.
>З.Ы. Прошу прощения, если что, FreeBSD занимаюсь не так долго и хостинг
>сервера не настраивал еще.
>Что-то кроме вашего сервера >[127.0.0.1]< никаких "некоторых" серверов я не увидел. Да и дело тут не в sendmail (он честно пишет что на Вашем сервере[127.0.0.1] указанного пользователя нет), а в Вашем скрипте. Если и дергать sendmail, то только на предмет релея на публичный хост.
>[оверквотинг удален]
>>
>>Но ситуация не изменилась, SENDMAIL все равно в адрес отправителя ставит
>>host1.mydomain.com, а не mydomain.com.
>>Собственно вопрос, как исправить ситуацию. В нете нашел информацию, что также
>>можно через маскарадинг.
>>З.Ы. Прошу прощения, если что, FreeBSD занимаюсь не так долго и хостинг
>>сервера не настраивал еще.
>>
>
>Что-то кроме вашего сервера >[127.0.0.1]< никаких "некоторых" серверов я не увидел. Да и дело тут не в sendmail (он честно пишет что на Вашем сервере[127.0.0.1] указанного пользователя нет), а в Вашем скрипте. Если и дергать sendmail, то только на предмет релея на публичный хост.Тогда, как исправить, что б, отправлялись письма?
Знакомый подсказал, что это можно реализовать:
vi /etc/mail/aliases
www@mydomain.com
:wq
newaliasesТакой вариант может помочь, если же нет, то направьте на путь истинный.
>[оверквотинг удален]
>
>Тогда, как исправить, что б, отправлялись письма?
>Знакомый подсказал, что это можно реализовать:
>vi /etc/mail/aliases
>www@mydomain.com
>:wq
>newaliases
>
>Такой вариант может помочь, если же нет, то направьте на путь истинный.
>Разберитесь, куда отправляете почту. Если за пределы localhost(127.0.0.1), то в конфиге sendmail должен быть указан релей (SMART_HOST). Естественно, это релей должен разрешать Вашему localhost отправлять через него сообщения.
Если же Ваш сервер публичный -- настраивайте sendmail (минимум настроек по дефолту), для отправки сообщений в другие домены.
Вот Вам ссылочка, для примура. Может пригодится.
http://vap.org.ru/mail@dialup/03.shtml
>Разберитесь, куда отправляете почту. Если за пределы localhost(127.0.0.1), то в конфиге sendmail
>должен быть указан релей (SMART_HOST). Естественно, это релей должен разрешать Вашему
>localhost отправлять через него сообщения.
>Если же Ваш сервер публичный -- настраивайте sendmail (минимум настроек по дефолту),
>для отправки сообщений в другие домены.
>Вот Вам ссылочка, для примура. Может пригодится.
>http://vap.org.ru/mail@dialup/03.shtmlСделал так:
vi /etc/mail/freebsd.mc
в строчке
dnl define(`SMART_HOST', `your.isp.mail.server')
установил свой почтовик
также добавил
MASQUERADE_AS ('mydomain.com')потом
cd /etc/mail
rm *.db
rm freebsd.cf
make all
make installsh /etc/rc.sendmail restart
теперь команда sendmail -d0.1 -bv root
Version 8.14.2
Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7
NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS PIPELINING SCANF
STARTTLS TCPWRAPPERS USERDB XDEBUG
/etc/mail/sendmail.cf: line 77: unknown configuration line "
('mydomain.com')"============ SYSTEM IDENTITY (after readcf) ============
(short domain name) $w = host
(canonical domain name) $j = host.mydomain.com
(subdomain name) $m = mydomain.com
(node name) $k = host.mydomain.com
========================================================и при отсылке вот такой лог
###################################################################################
Nov 17 12:06:34 leader sendmail[16291]: mAHA6YoK016291: to=mankis_t@ukr.net, ctladdr=www (80/80), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30724, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Nov 17 12:21:55 leader sm-msp-queue[16367]: mAH9qGjM016177: to=t00r@ukr.net, ctladdr=mykola (1001/0), delay=00:29:39, xdelay=00:00:00, mailer=relay, pri=120037, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Nov 17 12:21:55 leader sm-msp-queue[16367]: mAHA6YoK016291: to=mankis_t@ukr.net, ctladdr=www (80/80), delay=00:15:21, xdelay=00:00:00, mailer=relay, pri=120724, relay=[127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Nov 17 12:29:12 leader sendmail[16408]: mAHATCXa016408: from=www, size=726, class=0, nrcpts=1, msgid=<d2053daff1a37273924908a2972b545a@mydomein.com>, relay=www@localhost
Nov 17 12:29:12 leader sendmail[16408]: mAHATCXa016408: to=ppp222@meta.ua, ctladdr=www (80/80), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30726, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Nov 17 12:39:09 leader sendmail[16446]: NOQUEUE: SYSERR(root): /etc/mail/sendmail.cf: line 77: unknown configuration line "\n ('mydomein.com')"
Nov 17 12:39:24 leader sendmail[16447]: NOQUEUE: SYSERR(root): /etc/mail/sendmail.cf: line 77: unknown configuration line "\n ('mydomein.com')"Почему он все равно на локал хост шлет, не пойму.
>[оверквотинг удален]
>pri=120724, relay=[127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
>Nov 17 12:29:12 leader sendmail[16408]: mAHATCXa016408: from=www, size=726, class=0, nrcpts=1, msgid=<d2053daff1a37273924908a2972b545a@mydomein.com>, relay=www@localhost
>Nov 17 12:29:12 leader sendmail[16408]: mAHATCXa016408: to=ppp222@meta.ua, ctladdr=www (80/80), delay=00:00:00, xdelay=00:00:00, mailer=relay,
>pri=30726, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
>Nov 17 12:39:09 leader sendmail[16446]: NOQUEUE: SYSERR(root): /etc/mail/sendmail.cf: line 77: unknown configuration
>line "\n ('mydomein.com')"
>Nov 17 12:39:24 leader sendmail[16447]: NOQUEUE: SYSERR(root): /etc/mail/sendmail.cf: line 77: unknown configuration
>line "\n ('mydomein.com')"
>
>Почему он все равно на локал хост шлет, не пойму.Может поменять в vi /usr/local/etc/php.ini
[mail function]
; For Win32 only.
SMTP = localhost на свой IP
smtp_port = 25
>; For Win32 only.Интересно вам эта строчка о чем-нибудь говорит? Для остальных систем используется путь к сендмылу(кстати с тем же успехом это может быть postfix, exim итд), параметры smtp игнорируются.
>>; For Win32 only.
>
>Интересно вам эта строчка о чем-нибудь говорит? Для остальных систем используется путь
>к сендмылу(кстати с тем же успехом это может быть postfix, exim
>итд), параметры smtp игнорируются.Тоесть надо установить следующее:
[mail function]
; For Win32 only.
;SMTP = localhost
;smtp_port = 25; For Win32 only.
sendmail_from = www@mydomain.com # me@example.com; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
sendmail_path =А по поводу ошибок выше? как поправить?
>sendmail_path =Почему эта строка у вас пустая?
>>sendmail_path =
>
>Почему эта строка у вас пустая?2all: Ну что докопались до человека-то... :) Потому и пустая что он спрашивает как настроить...
---
2rusych:
сначала в системе смотрите:$ which sendmail
/usr/sbin/sendmailтем вы узнали где находиться sendmail в вашей системе. вот это значение и пропишите в 'php.ini' для опции sendmail_path.
как вы можете видеть с сендмайлом здесь делать ничего не нужно. да и вообще с сендмайлом ничего делать не нужно. в его задачи входит только принять от системы или программы письмо, приконнектиться к удаленному серверу и попытаться это письмо туда доставить. Вопрос правильно звучит как "Как настроить php для отправки писем средством sendmail".
---2all: понимаю, что в таком вопросе человек мог прочитать несколько строк комментария выше и ниже в самом 'php.ini' и понять что нужно поправить, но все-таки нужно ответить человеку прямо на прямо поставленный вопрос(правда вопрос правильно звучит наоборот). =)
>[оверквотинг удален]
>и вообще с сендмайлом ничего делать не нужно. в его задачи
>входит только принять от системы или программы письмо, приконнектиться к удаленному
>серверу и попытаться это письмо туда доставить. Вопрос правильно звучит как
>"Как настроить php для отправки писем средством sendmail".
>---
>
>2all: понимаю, что в таком вопросе человек мог прочитать несколько строк комментария
>выше и ниже в самом 'php.ini' и понять что нужно поправить,
>но все-таки нужно ответить человеку прямо на прямо поставленный вопрос(правда вопрос
>правильно звучит наоборот). =)Спасибо всем, за помощь.
Проблема решена таким от образом:
vi /etc/mail/freebsd.mc
FEATURE(masquerade_envelope) # пишем только выше опции MAILER, ибо у меня sendmail собирался но с ошибкой (*** ERROR: FEATURE() should be before MAILER())
MAILER(local)
MAILER(smtp)
MASQUERADE_AS(`mydomain.com') #говорим sendmail чтоб подсталял в поле from:user@mydomain.com а не полное имья хоста from:user@host1.mydomain.comтакже если надо указать sendmail релеить почту розкоменнтируем строчку
define(`SMART_HOST', `mydomain.com.') и прописываем свой релей
после этого пересобираемmake
make install
make restartP.S.: в /usr/local/etc/php.ini приводим конфиг к такому виду
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = sendmail -t -iP.S.S.: И вопрос тогда можно переиначить: Как настпроить sendmail и php.ini для отправки писем через релей при реестрации на сайте! ;)
>>[оверквотинг удален]
>>и вообще с сендмайлом ничего делать не нужно. в его задачи
>>входит только принять от системы или программы письмо, приконнектиться к удаленному
>>серверу и попытаться это письмо туда доставить. Вопрос правильно звучит как
>>"Как настроить php для отправки писем средством sendmail".Можно было и проще решить эту проблему.
На локальном сервере sendmail был вообше в дефолтной конфигурации.
в пхп был прописан только путь к sendmail с опцией, что разрешает подменять адреса отправителей локальным пользователям. Ну а дальнейшее, в реализации скрипта отправки:
$header .= "From: <".$name.". "> " . $from;
где $name и $from берутся из базы самого сайта)
для доставки почты из вне следует просто прописать еще домены)