URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 6080
[ Назад ]

Исходное сообщение
"Как настроить sendmail для отправки писем из PHP скриптов"

Отправлено rusych , 14-Ноя-08 23:21 
Система
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 занимаюсь не так долго и хостинг сервера не настраивал еще.
  


Содержание

Сообщения в этом обсуждении
"Как настроить sendmail для отправки писем из PHP скриптов"
Отправлено FelixS , 16-Ноя-08 07:36 
>[оверквотинг удален]
>(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 для отправки писем из PHP скриптов"
Отправлено rusych , 16-Ноя-08 17:12 
>[оверквотинг удален]
>>
>>Но ситуация не изменилась, 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

Такой вариант может помочь, если же нет, то направьте на путь истинный.


"Как настроить sendmail для отправки писем из PHP скриптов"
Отправлено FelixS , 16-Ноя-08 22:14 
>[оверквотинг удален]
>
>Тогда,  как исправить, что б, отправлялись письма?
>Знакомый подсказал, что это можно реализовать:
>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



"Как настроить sendmail для отправки писем из PHP скриптов"
Отправлено rusych , 17-Ноя-08 13:44 
>Разберитесь, куда отправляете почту. Если за пределы 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 install

sh /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')"

Почему он все равно на локал хост шлет, не пойму.


"Как настроить sendmail для отправки писем из PHP скриптов"
Отправлено rusych , 17-Ноя-08 14:05 
>[оверквотинг удален]
>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


"Как настроить sendmail для отправки писем из PHP скриптов"
Отправлено angra , 17-Ноя-08 14:23 
>; For Win32 only.

Интересно вам эта строчка о чем-нибудь говорит? Для остальных систем используется путь к сендмылу(кстати с тем же успехом это может быть postfix, exim итд), параметры smtp игнорируются.


"Как настроить sendmail для отправки писем из PHP скриптов"
Отправлено rusych , 17-Ноя-08 14:47 
>>; 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 для отправки писем из PHP скриптов"
Отправлено angra , 17-Ноя-08 17:30 
>sendmail_path =

Почему эта строка у вас пустая?


"Как настроить sendmail для отправки писем из PHP скриптов"
Отправлено Lucf3r , 17-Ноя-08 17:38 
>>sendmail_path =
>
>Почему эта строка у вас пустая?

2all: Ну что докопались до человека-то... :) Потому и пустая что он спрашивает как настроить...

---
2rusych:
сначала в системе смотрите:

$ which sendmail
/usr/sbin/sendmail

тем вы узнали где находиться sendmail в вашей системе. вот это значение и пропишите в 'php.ini' для опции sendmail_path.

как вы можете видеть с сендмайлом здесь делать ничего не нужно. да и вообще с сендмайлом ничего делать не нужно. в его задачи входит только принять от системы или программы письмо, приконнектиться к удаленному серверу и попытаться это письмо туда доставить. Вопрос правильно звучит как "Как настроить php для отправки писем средством sendmail".
---

2all: понимаю, что в таком вопросе человек мог прочитать несколько строк комментария выше и ниже в самом 'php.ini' и понять что нужно поправить, но все-таки нужно ответить человеку прямо на прямо поставленный вопрос(правда вопрос правильно звучит наоборот). =)


"Как настроить sendmail для отправки писем из PHP скриптов"
Отправлено rusych , 17-Ноя-08 18:27 
>[оверквотинг удален]
>и вообще с сендмайлом ничего делать не нужно. в его задачи
>входит только принять от системы или программы письмо, приконнектиться к удаленному
>серверу и попытаться это письмо туда доставить. Вопрос правильно звучит как
>"Как настроить 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 restart

P.S.: в  /usr/local/etc/php.ini приводим конфиг к такому виду
; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = sendmail -t -i

P.S.S.: И вопрос тогда можно переиначить: Как настпроить sendmail и php.ini для отправки писем через релей при реестрации на сайте! ;)



"Как настроить sendmail для отправки писем из PHP скриптов"
Отправлено bladeroot , 28-Май-12 10:43 
>>[оверквотинг удален]
>>и вообще с сендмайлом ничего делать не нужно. в его задачи
>>входит только принять от системы или программы письмо, приконнектиться к удаленному
>>серверу и попытаться это письмо туда доставить. Вопрос правильно звучит как
>>"Как настроить php для отправки писем средством sendmail".

Можно было и проще решить эту проблему.
На локальном сервере sendmail был вообше в дефолтной конфигурации.
в пхп был прописан только путь к sendmail с опцией, что разрешает подменять адреса отправителей локальным пользователям. Ну а дальнейшее, в реализации скрипта отправки:
$header .= "From: <".$name.". "> " . $from;
где $name и $from берутся из базы самого сайта)
для доставки почты из вне следует просто прописать еще домены)