Не доходит почта от www@localhost
На сервере под управлением FreeBSD 10.1-RELEASE-p10 работает Apache web server Version 2.4.x версии apache24-2.4.12 с подключенным PHP Scripting Language версии php56-5.6.10. На этом хозяйстве и работает мой блог на CMS Textpattern версии 4.5.7. После недавнего обновления языка PHP с php55 до php56 и настройки “с нуля” его конфигурационного файла php.ini, ко мне перестали приходить письма с уведомлениями о новых комментариях от движка моего блога. Сайт, сам почтовый ящик и postfix, обрабатывающий почту, находятся на этом же сервере. |
В логе по пути /var/log/maillog
при этом появляется вот такая запись:
Jun 17 11:11:47 mail sendmail[3726]: t5H8BlNI003726: from=www, size=891, class=0, nrcpts=0, msgid=<201506170811.t5H8BlNI003726@mail.maxblogs.ru>, relay=www@localhost
и всё, письмо “зависает”, не попадая даже в очередь:
# /usr/local/sbin/postqueue -p Mail queue is empty
Как оказалось, мной были сделаны неверные настройки в секции [mail function]
файла /usr/local/etc/php.ini
.
Во-первых – следует закомментировать все строки, относящиеся к For Win32 only
.
Во-вторых (и самое важное!) – следует либо закомментировать то, что написано в строке sendmail_path =
(php самостоятельно подставит верное необходимо значение), либо привести её к виду:
sendmail_path = /usr/sbin/sendmail -t -i
. У меня в этой строке отсутствовали указанные ключи.
После внесённых изменений, перезапустил apache24:
# /usr/local/etc/rc.d/apache24 restart Performing sanity check on apache24 configuration: Syntax OK Stopping apache24. Waiting for PIDS: 4304. Performing sanity check on apache24 configuration: Syntax OK Starting apache24.
И отправил тестовый комментарий через форму на своём сайте. Письмо с уведомлением дошло, о чём в логе работы postfix говорят следующие записи:
Jun 17 11:52:34 mail sendmail[4080]: t5H8qYgl004080: from=www, size=895, class=0, nrcpts=1, msgid=<201506170852.t5H8qYgl004080@mail.maxblogs.ru>, relay=www@localhost Jun 17 11:52:34 mail postfix/smtpd[4074]: connect from localhost.maxblogs.ru[127.0.0.1] Jun 17 11:52:34 mail postfix/smtpd[4074]: 50A17646B6D: client=localhost.maxblogs.ru[127.0.0.1] Jun 17 11:52:34 mail postfix/cleanup[4081]: 50A17646B6D: message-id=<201506170852.t5H8qYgl004080@mail.maxblogs.ru> Jun 17 11:52:34 mail sendmail[4080]: t5H8qYgl004080: to=max@maxblogs.ru, ctladdr=www (80/80), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30895, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (Ok: queued as 50A17646B6D)
Кстати, в файле php.ini вы также можете указать, от чьего имени будет посылаться такого рода письма с сайта. Достаточно раскомментировать строку mail.force_extra_parameters =
и прописать в ней необходимый вам адрес. Например: mail.force_extra_parameters = -fwww@maxblogs.ru
. Правда в этом случае в логе работы postfix вы увидите предупреждения Authentication-Warning
, но сама почта всё равно дойдёт:
Jun 17 11:41:41 mail sendmail[3990]: t5H8ffAX003990: Authentication-Warning: mail.maxblogs.ru: www set sender to www@maxblogs.ru using -f Jun 17 11:41:41 mail sendmail[3990]: t5H8ffAX003990: from=www@maxblogs.ru, size=896, class=0, nrcpts=1, msgid=<201506170841.t5H8ffAX003990@mail.maxblogs.ru>, relay=www@localhost Jun 17 11:41:41 mail sendmail[3990]: t5H8ffAX003990: to=max@maxblogs.ru, ctladdr=www@maxblogs.ru (80/80), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30896, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (Ok: queued as 4FD1F646B6D)
В этом случае ключ -f перед указанием почтового адреса является обязательным!
В итоге секция [mail function]
файла настройки PHP /usr/local/etc/php.ini
у меня приняла следующий вид:
[mail function] ; For Win32 only. ; http://php.net/smtp ;SMTP = localhost ; http://php.net/smtp-port ;smtp_port = 25 ; For Win32 only. ; http://php.net/sendmail-from ;sendmail_from = me@example.com ; For Unix only. You may supply arguments as well (default: “sendmail -t -i”). ; http://php.net/sendmail-path ;sendmail_path = sendmail_path = /usr/sbin/sendmail -t -i ; Force the addition of the specified parameters to be passed as extra parameters ; to the sendmail binary. These parameters will always replace the value of ; the 5th parameter to mail(), even in safe mode. ;mail.force_extra_parameters = -fwww@maxblogs.ru ; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename mail.add_x_header = On ; The path to a log file that will log all mail() calls. Log entries include ; the full path of the script, line number, To address and headers. ;mail.log = mail.log = /var/log/maillog ; Log mail to syslog (Event Log on Windows). ;mail.log = syslog
Подробно ознакомиться с настройками секции [mail function]
файла php.ini
вы можете по ссылке: mail function.