Установка и настройка sendmail под Ubuntu

Установка и настройка sendmail под Ubuntu
Комментарии: 17

При отправке сообщения через форму обратной связи появляется ошибка с текстом «Произошла ошибка при попытке отправить почту. Could not instantiate mail function.» Возникать она может при отсутствии на хостинге агента sendmail или модуля php-mail.

На нормальных хостинговых площадках отправка почты через sendmail настроена по умолчанию, поэтому стоит поискать причины появления этой ошибки в настройках CMS или коде сайта. В моем случае веб-сервер настраивался мной и причина оказалась в отсутствии вышеуказанного агента и модуля. Вот как они устанавливаются в Ububntu:

1. Устанавливаем модуль php-mail если он еще не стоит:

sudo apt-get install php-mail

2. Устанавливаем sendmail:

$ sudo apt-get install sendmail
$ sudo sendmailconfig

Ответьте на вопросы, которые будут заданы. Ниже перечислены основные файлы, в которые будут внесены изменения:

/etc/mail.sendmail.conf
/etc/cron.d/sendmail
/etc/mail/sendmail.mc

3. Если все в порядке, правим «php.ini»

nano /etc/php5/apache2/php.ini

Находим закомментированую строку «;sendmail_path = » (поиск в nano ctrl+w). Заменяем на строку следующего содержания:

sendmail_path =  /usr/sbin/sendmail -t -i

4. Делаем рестарт Apache

sudo service apache2 restart

5. Проверить работоспособность sendmail можно двумя командами:

$ /usr/sbin/sendmail abc@gmail.com < "hey friend ... just thought to say hi."
или
$ sudo php -r "mail('you_mail@mail.ru', 'Тестовое письмо с вашего сайта', 'Привет. Это тестовое сообщение.');"

В течении минуты на указанный электронный адрес должно прийти письмо. Если этого не произошло, то следует посмотреть логи отправки в каталоге «/var/log/syslog». Если в логах появилось сообщение: «Connected time out», значит или firewall не пропускает пакеты через порт 25, или ионтернет-провайдер. Проверить это можно командой telnet:

telnet smtp.mail.ru 25

Если результатом работы команды стало так же «Connected time out», то разбирайтесь, где блокируется порт 25.

Темы:
UbuntuОшибка
Ещё интересное — 6
Комментарии —
  1. Игорь
    Игорь06 августа 2015, 01:39#
    А на nginx как?
    1. Andy Si06 августа 2015, 15:07#
      Не помогу, хотя, судя по всему, в настройках nginx должен быть тот же файл php.ini и там нужно тоже раскомментировать соответствующу строку или просто прописать её. Остальное вроде без разницы. Но это имхо, точно не знаю.
      1. zet_lab
        zet_lab15 августа 2019, 16:11#
        В nginx ничего править не нужно, у меня заработало все без правки php.ini
      2. Kenan
        Kenan16 августа 2015, 10:55#
        скажите пожалуйста, а как настроить всё это локально? раньше разрабатывал под виндой, там в готовых наборах уже всё есть и настроено, но теперь перешёл под убунту, хотя есть готовый хамп, но он мне не нравится, не удобно, поэтому всё установил и настроил через терминал, теперь надо чтобы sendmail никуда ничего не отправлял, а локально хранил в каком-то текстовом файле, не могли бы вы мне подсказать как это сделать? или хотя ссылку скинуть… а то гугл толком ничего не нашёл относительно локального применения, я даже и на русском искал, и на английском, всё равно бесполезно
        1. Andy Si16 августа 2015, 12:26#
          Не слышал про такие возможности, если всё же найдёшь как сделать — отпиши, интересно узнать.
          1. Kenan
            Kenan16 августа 2015, 13:21#
            обязательно отпишусь, думаю что вс-таки должени быть вариант, вдруг человеку захотелось на природе поработать :) и дата-карта вне доступа связи)
        2. Kenan
          Kenan14 сентября 2015, 09:14(был изменён)#
          я нашёл способ!) anosov.me/2011/09/sendmail-dummy-in-ubuntu/
          1. Andy Si14 сентября 2015, 09:27#
            красавчик :)
            1. Kenan
              Kenan14 сентября 2015, 09:36#
              благодарю :) это автор красавчик :D
          2. Аман
            Аман18 января 2017, 18:33#
            Автор спасибо! Всё коротко и ясно. Красавчик! 100баллов
            1. Denis
              Denis21 августа 2018, 09:47#
              не работает. Не приходит и всё. Я так понял надо указать параметры SMTP (хост, порт, логин, пароль), а где?
              1. Andy Si21 августа 2018, 13:03(был изменён)#
                Функция mail() в PHP не требует параметров SMTP. Отправка через SMTP по другому настраивается. Рекомендую использовать скрипт phpmailer для SMTP. А так проблема может быть в том что получатель определяет письмо как спам и куча других причин. Например, с недавнего времени mail.ru блокирует письма если у них не указано поле From.
              2. Max
                Max06 февраля 2020, 21:32#
                Отличная статья, настроил за 5 мин. На nginx в директории /etc/php/7.4/fpm/php.ini раскомментил строку.
                1. Andy Si07 февраля 2020, 08:55#
                  Круто, я думал уже не актуальная информация, давно писал :)
                  1. Сергей Сергиенков
                    Сергей Сергиенков12 июня 2021, 21:55#
                    Добрый вечер, скажите пожалуйста с консоли работает, в файле прописал php. Не работает что может быть конфиг apache2 править или блок порта 25 ufw? что может быть? ubuntu 18/04 apache2
                    1. Andy Si13 июня 2021, 21:26#
                      Добрый… я немного отошел от темы, к сожалению не смогу подсказать, может что-то прописали не так. Используй для отправки phpMailer. Там можно будет глянуть логи, что не так.
                2. V.K.
                  V.K.12 октября 2023, 18:20#
                  Спасибо! Работает!
                  © REALADMIN.RU   2024 г.
                  Страница сгенерирована: 0,2053 s | 4 mb.
                  На каком уровне Вы играете в шахматы?
                  OPROS