Я установил сервер со следующими настройками:
CentOS release 6.3 (Final)
Kernel \r on an \m
Linux version 2.6.32-279.14.1.el6.x86_64 (mockbuild@c6b8.bsys.dev.centos.org) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Tue Nov 6 23:43:09 UTC 2012
Я установил Qmail и Cron.
Когда я отправляю электронное письмо через интерфейс Webmin (используя Qmail), оно приходит. Однако, когда я пытаюсь отправить электронное письмо через скрипт php, я получаю следующее сообщение об ошибке в /var/log/maillog
:
Failed to create spool file /var/spool/exim/input//1V8rf1-0005w0-Jx-D: Permission denied
Cannot open main log file "/var/log/exim/main.log": Permission denied: euid=93 egid=93
exim: could not open panic log - aborting: see message(s) above
И в /var/log/virtualmin/[host]_error_log
:
PHP Fatal error: <br /><strong>Uncaught Error</strong> of type [Swift_ConnectionException] with message [Sending failed using mail() as PHP's default mail() function returned boolean FALSE
Мне кажется, что это какая-то проблема с разрешением (или проблема с qmail и exim), однако я не могу решить ее после нескольких дней исследований. У меня установлены Webmin и Virtualmin.
Дополнительная информация о разрешениях:
$ ls -l /var/spool/exim/
total 32
drwxrwxrwx. 2 exim exim 4096 Oct 28 2012 db
drwxrwxrwx. 2 exim exim 24576 Aug 9 16:52 input
drwxrwxrwx. 2 exim exim 4096 Aug 9 16:52 msglog
$ ls -l /usr/sbin/exim
-rwsr-xr-x. 1 root root 1118184 Oct 28 2012 /usr/sbin/exim
Есть предложения? Помощь будет очень признательна.
Первая часть Система exim требует, чтобы каталоги спула и каталоги журналов были доступны для записи пользователем exim (пользователем, от имени которого запускается процесс). Простым исправлением для exim было бы:
chown -R exim:exim /var/spool/exim /var/log/exim
Вторая часть Обычно существует оболочка / usr / sbin / sendmail, которая на самом деле является просто символической ссылкой на то, что обеспечивает «совместимость с sendmail» в вашей системе. Когда вы устанавливаете exim, он создает символическую ссылку / usr / sbin / sendmail, которая в конечном итоге указывает на / usr / sbin / exim. [1] Когда вы удалили пакет exim, он удалил ссылку / usr / sbin / sendmail. Когда cron запускает задание, он запускает его и передает его в / usr / sbin / sendmail. Поскольку его больше нет, задание не запускается полностью.
Предпочтительным исправлением является использование системы «альтернатив» для обновления каждого из компонентов mta, которыми управляет система «альтернатив»:
# ls /etc/alternatives/ -l | grep mta
lrwxrwxrwx 1 root root 23 Aug 14 12:33 mta -> /usr/sbin/sendmail.exim
lrwxrwxrwx 1 root root 19 Aug 14 12:33 mta-mailq -> /usr/bin/mailq.exim
lrwxrwxrwx 1 root root 29 Aug 14 12:33 mta-mailqman -> /usr/share/man/man8/exim.8.gz
lrwxrwxrwx 1 root root 24 Aug 14 12:33 mta-newaliases -> /usr/bin/newaliases.exim
lrwxrwxrwx 1 root root 15 Aug 14 12:33 mta-pam -> /etc/pam.d/exim
lrwxrwxrwx 1 root root 19 Aug 14 12:33 mta-rmail -> /usr/bin/rmail.exim
lrwxrwxrwx 1 root root 19 Aug 14 12:33 mta-rsmtp -> /usr/bin/rsmtp.exim
lrwxrwxrwx 1 root root 18 Aug 14 12:33 mta-runq -> /usr/bin/runq.exim
lrwxrwxrwx 1 root root 22 Aug 14 12:33 mta-sendmail -> /usr/lib/sendmail.exim
# update-alternatives --config mta
There is 1 program that provides 'mta'.
Selection Command
-----------------------------------------------
*+ 1 /usr/sbin/sendmail.exim
Enter to keep the current selection[+], or type selection number:
Если это не сработает для вас (поскольку qmail не сконфигурирован как часть системы "альтернатив", то самое простое решение - вручную создать эту символическую ссылку:
cd /usr/sbin; ln -s qmail sendmail
[1] Технически система «альтернатив» управляет и создает символическую ссылку / usr / sbin / sendmail, которая указывает на / etc / alternatives / mta, которая является символической ссылкой на /usr/sbin/sendmail.exim. Этот /usr/sbin/sendmail.exim также является символической ссылкой на / usr / sbin / exim.
Если вы хотите использовать встроенную почту (), вам нужно будет поговорить с администратором сервера. В Windows можно использовать внешний SMTP-сервер, но он должен быть указан в настройках php.ini, а встроенные функции PHP не поддерживают SMTP-аутентификацию.
Обычный способ - использовать локальный почтовый сервер, который, в свою очередь, может взаимодействовать с «настоящим» SMTP-сервером с аутентификацией, или использовать почтовый пакет, такой как SwiftMailer, который может напрямую подключаться к стороннему SMTP-серверу, например GMail.
ln: создание символической ссылки sendmail: файл существует
Это потому что sendmail
уже является символической ссылкой на /etc/alternatives/mta
что дальше не требуется.
Просто удалите sendmail
символическая ссылка с помощью команды:
cd /usr/sbin
rm -rf sendmail
И создайте новую ссылку:
ln -s qmail sendmail