Установка и настройка sendmail под Ubuntu
При отправке сообщения через форму обратной связи появляется ошибка с текстом «Произошла ошибка при попытке отправить почту. 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.