LINUX.ORG.RU
решено ФорумAdmin

PHP 7.2.15 на Apache/2.4.38 (Ubuntu16.04.1+deb.sury.org+1) не работают ни sendmail, ни mail()

 , , ,


0

1

На VDS'e установлены PHP 7.2.15 на Apache/2.4.38 (Ubuntu16.04.1+deb.sury.org+1), где размещены несколько сайтов - парочку на статичном HTML и несколько штук на движках WP и MaxSite CMS.

Недавно обнаружил, что невозможно ни с одного из сайтов отправить сообщение через форму - функция mail() не работает. Соответственно, на почту не приходят сообщения ни о комментариях, ни о чем другом. Стал разбираться - оказалось, что нужно устанавливать или Sendmail или Postfix или что-то другое из MTA.

Начал было с Sendmail'а, но запутался с FQDN. Стал гуглить и вышел на эту тему, у меня были похожие симптомы. Но, почитав эту тему, понял, что здесь посоветуют снести Sendmail и поставить Postfix.

Собственно вопрос - правильно ли будет снести Sendmail и установить Postfix, чтобы в ПХП заработала функция mail() и появилась возможность отправлять данные из форм? Или проще будет уже разобраться с FQDN и оставить Sendmail на сервере?


правильно ли будет снести Sendmail и установить Postfix, чтобы в ПХП заработала функция mail() и появилась возможность отправлять данные из форм? Или проще будет уже разобраться с FQDN и оставить Sendmail на сервере?

Если ты не знаешь ни того ни другого - то в принципе тебе будет всё равно, документацию так или иначе читать придется.

Я бы выбрал Postfix, потому что у меня с ним есть большой опыт работы, в отличии от Sendmail.

Опиши задачу конкретнее - может накидают тебе примеров. Есть ли свой домен(и можешь ли ты на нём рулить DNS-записями) или необходима отправка через внешний с авторизацией?

Pinkbyte ★★★★★ ()
Последнее исправление: Pinkbyte (всего исправлений: 1)

Насколько я помню, функция mail в php просто вызывает sendmail и передает ему соответствующие параметры. Т. е. Вам нужно добиться успешной отправки почты из командной строки с помощью sendmail. Postfix эмулирует sendmail, так что с точки зрения php разницы между ними нет. Так что решайте сами, что Вам проще настраивать...

Serge10 ★★★★★ ()
Ответ на: комментарий от anonymous

вызывает то, что прописано в sendmail_path, переменная php окружения. А там можно накртутить что угодно

Да. На локалочке для тестов удобен fake sendmail баш скрипт, формирующий файлы писем, которые локально же открываются тундрой, например.

deep-purple ★★★★★ ()
Ответ на: комментарий от Pinkbyte

Задача на первый взгляд простая - чтобы с нескольких сайтов, что хостятся на сервере, можно было отправлять данные через формы и чтобы движки присылали уведомления о комментариях на указанное мыло.

Обнаружив, что в ПХП функция mail() не работает из-за того, что на сервере не установлен ни один MTA, я стал устанавливать Sendmail.

В процессе настройки выяснилось, что в файл /etc/hosts надо вносить изменения - изначально он имел такое содержание:

127.0.1.1 trommo trommo
127.0.0.1 localhost
::1 localhost ip6–localhost ip6–loopback
ff02::1 ip6–allnodes
ff02::2 ip6–allrouters

Почему имя сервера указано дважды в первой строке - не знаю.

В процессе гугления пришел к выводу, что вторую строку этого файла надо заменить на следующее:

127.0.0.1 localhost.site1.ru localhost trommo

Здесь site1.ru - это домен, на котором расположена тестовая форма. Как я понял, здесь можно указать хоть все домены в виде:

127.0.0.1 localhost.site1.ru localhost.site2.ru ... localhost trommo

и так далее.

Однако, с изменённым подобным образом файлом /etc/host сообщения из тестовой формы все равно не доходят.

В файл логов /var/log/mail.log пишется следующее:

May 3 12:32:47 trommo sendmail[4925]: x439WlT4004925: from=www–data, size=164, class=0, nrcpts=1, msgid=<201905030932.x439WlT4004925@localhost. ****.org>, relay=www–data@localhost
May 3 12:32:47 trommo sm–mta[4926]: x439WlhH004926: from=<www–data@localhost. ****.org>, size=440, class=0, nrcpts=1, msgid=<201905030932.x439WlT4004925@localhost. ****.org>, proto=ESMTP, daemon=MTA–v4, relay=localhost. ****.org [127.0.0.1]
May 3 12:32:47 trommo sendmail[4925]: x439WlT4004925: to=***@ukr.net, ctladdr=www–data (33/33), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30164, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (x439WlhH004926 Message accepted for delivery)

А затем, спустя несколько минут

May 3 12:36:47 trommo sm–mta[4928]: x439WlhH004926: to=<***@ukr.net>, ctladdr=<www–data@localhost. ****.org> (33/33), delay=00:04:00, xdelay=00:04:00, mailer=esmtp, pri=120440, relay=mxs.ukr.net. [212.42.75.251], dsn=4.0.0, stat=Deferred: Connection timed out with mxs.ukr.net.
May 3 12:36:51 trommo sm–mta[4923]: x439NxgX003996: to=<***@ukr.net>, ctladdr=<www–data@localhost.tvoydom.info> (33/33), delay=00:12:52, xdelay=00:04:14, mailer=esmtp, pri=210337, relay=mxs.ukr.net. [212.42.75.251], dsn=4.0.0, stat=Deferred: Connection timed out with mxs.ukr.net.
May 3 12:36:51 trommo sm–mta[4923]: x42CS0IS017814: to=<***@ukr.net>, delay=21:08:51, xdelay=00:00:00, mailer=esmtp, pri=11460289, relay=mxs.ukr.net., dsn=4.0.0, stat=Deferred: Connection timed out with mxs.ukr.net.
May 3 12:36:51 trommo sm–mta[4923]: x42CG4vo017616: to=<***@ukr.net>, delay=21:20:47, xdelay=00:00:00, mailer=esmtp, pri=11550289, relay=mxs.ukr.net., dsn=4.0.0, stat=Deferred: Connection timed out with mxs.ukr.net.
May 3 12:36:51 trommo sm–mta[4923]: x42CAaOE017556: to=<***@ukr.net>, delay=21:26:15, xdelay=00:00:00, mailer=esmtp, pri=11640264, relay=mxs.ukr.net., dsn=4.0.0, stat=Deferred: Connection timed out with mxs.ukr.net.
May 3 12:36:51 trommo sm–mta[4923]: x42CE3nI017580: to=<***@ukr.net>, delay=21:22:48, xdelay=00:00:00, mailer=esmtp, pri=11640289, relay=mxs.ukr.net., dsn=4.0.0, stat=Deferred: Connection timed out with mxs.ukr.net.
May 3 12:36:52 trommo sm–mta[4923]: x42BP2He016812: to=<***@ukr.net>, delay=22:11:50, xdelay=00:00:00, mailer=esmtp, pri=12090264, relay=mxs.ukr.net., dsn=4.0.0, stat=Deferred: Connection timed out with mxs.ukr.net.
May 3 12:36:52 trommo sm–mta[4923]: x42B7eV0014601: to=<***@ukr.net>, delay=22:29:12, xdelay=00:00:00, mailer=esmtp, pri=12180308, relay=mxs.ukr.net., dsn=4.0.0, stat=Deferred: Connection timed out with mxs.ukr.net.
May 3 12:36:52 trommo sm–mta[4923]: x42AMcIf010861: to=<***@ukr.net>, delay=23:14:14, xdelay=00:00:00, mailer=esmtp, pri=12630396, relay=mxs.ukr.net., dsn=4.0.0, stat=Deferred: Connection timed out with mxs.ukr.net.
May 3 12:36:52 trommo sm–mta[4923]: x4290819008730: to=<***@ukr.net>, delay=1+00:36:44, xdelay=00:00:00, mailer=esmtp, pri=13350286, relay=mxs.ukr.net., dsn=4.0.0, stat=Deferred: Connection timed out with mxs.ukr.net.
May 3 12:36:52 trommo sm–mta[4923]: x428rfkG007988: to=<***@ukr.net>, delay=1+00:43:11, xdelay=00:00:00, mailer=esmtp, pri=13440401, relay=mxs.ukr.net., dsn=4.0.0, stat=Deferred: Connection timed out with mxs.ukr.net.

Здесь ***@ukr.net - мое мыло, на которое должно приходить тестовое сообщение из формы, а ****.org - домен, на котором эта тестовая форма находится.

В общем, что я делаю не так, что у меня не получается правильно настроить Sendmail?

ti1 ()
Ответ на: комментарий от ti1

что я делаю не так, что у меня не получается правильно настроить Sendmail?

Не читаешь логи. Написано же - connection timeout. Нет соединения с твоего сервера до почтовика ukr.net.

bigbit ★★★★★ ()
Ответ на: комментарий от ti1

В общем, что я делаю не так, что у меня не получается правильно настроить Sendmail?

Судя по логам, проблема в firewall, а не в sendmail. 25 порт у Вас точно открыт? Провайдер не режет исходящие соединения, борясь таким образом со спамом?

Serge10 ★★★★★ ()
Ответ на: комментарий от Serge10

Посмотрел утилитой нетстат:

root@trommo:~# netstat -ntlp | grep LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3375/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 3465/sendmail: MTA: tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 3386/mysqld tcp 0 0 127.0.0.1:587 0.0.0.0:* LISTEN 3465/sendmail: MTA: tcp6 0 0 :::22 :::* LISTEN 3375/sshd tcp6 0 0 :::443 :::* LISTEN 1189/apache2 tcp6 0 0 :::80 :::* LISTEN 1189/apache2

Провайдер не режет исходящие соединения, борясь таким образом со спамом?

Ну сервер я у Scaleway арендую, физически он вроде бы в Париже находится. Поэтому не знаю, что ответить.

ti1 ()
Ответ на: комментарий от ti1

Во-первых, пользуйтесь разметкой (теги [code][/code]), когда логи и выводы команд приводите. Иначе очень трудно их разбирать.

Во-вторых, пока что мы с Вами обсуждаем не получение, а отправку писем, а следовательно, вывод netstat мало информативен. Чтобы проверить доступность исходящих соединений с 25 порта, можете воспользоваться утилитами telnet или nc. Например,

telnet smtp.mail.ru 25
. Разумеется, вместо smtp.mail.ru можно использовать любой публичный почтовый сервер. Если исходящие соединения с 25 порта открыты, то Вы должны получить стандартное приветствие. Если же соединение не устанавливается, значит, исходящие соединения с 25 порта запрещены, и Вам надо общаться по этому поводу с Вашим провайдером.

Serge10 ★★★★★ ()
Ответ на: комментарий от Serge10

Я использовал по итогу гугловский SMTP-сервер.

Как оказалось, всё было настроено нормально, просто в панели виртуального хостинга Scaleway по какой-то причине отключили smtp-порты.

Пришлось их принудительно включать и перенастраивать Sendmail, после чего отправка сообщений из тестовой формы заработала.

ti1 ()
Ответ на: комментарий от ti1

Как оказалось, всё было настроено нормально, просто в панели виртуального хостинга Scaleway по какой-то причине отключили smtp-порты.

Собственно говоря, именно об этом Вам и писали :).

Рекомендую отметить тему как решенную.

Serge10 ★★★★★ ()