На сервере 2 пользователя: админ и джо. Оба пользователя принадлежат к одним и тем же группам.
Если я пытаюсь отправить письмо с доменов (через php скрипт), которые принадлежат администратору — все работает. Но для доменов, которые принадлежат joe — функция mail()
не отправляет электронную почту.
Я включаю mail.log
в php.ini
и увидел, что php работает правильно.
Apache / 2.4.16 (FreeBSD) mpm-itk / 2.4.7-02
exim 4.86
/usr/local/etc/exim/passwd
— пусто
mainlog, paniclog
— не имеет ошибок
Результат exim -bd -d+all
:
WHITELIST_D_MACROS unset
TRUSTED_CONFIG_LIST unset
12:54:37 8586 changed uid/gid: forcing real = effective
12:54:37 8586 uid=0 gid=0 pid=8586
12:54:37 8586 auxiliary group list: 0
12:54:37 8586 seeking password data for user "www": cache not available
12:54:37 8586 getpwnam() succeeded uid=80 gid=80
12:54:37 8586 seeking password data for user "mailnull": cache not available
12:54:37 8586 getpwnam() succeeded uid=26 gid=26
12:54:37 8586 seeking password data for user "root": cache not available
12:54:37 8586 getpwnam() succeeded uid=0 gid=0
12:54:37 8587 changed uid/gid: calling tls_validate_require_cipher
12:54:37 8587 uid=26 gid=6 pid=8587
12:54:37 8587 auxiliary group list: 6
12:54:37 8586 tls_validate_require_cipher child 8587 ended: status=0x0
12:54:37 8586 configuration file is /usr/local/etc/exim/configure
12:54:37 8586 log selectors = 0000cffe 00733801
12:54:37 8586 cwd=/etc 3 args: exim -bd -d+all
12:54:37 8586 trusted user
12:54:37 8586 admin user
12:54:37 8586 DSN: dnslookup propagating DSN
12:54:37 8586 DSN: disabled_domains propagating DSN
12:54:37 8586 DSN: disabled_users propagating DSN
12:54:37 8586 DSN: local_domains propagating DSN
12:54:37 8586 DSN: group_aliases propagating DSN
12:54:37 8586 DSN: aliases propagating DSN
12:54:37 8586 DSN: aliases_pipe propagating DSN
12:54:37 8586 DSN: local_users propagating DSN
12:54:37 8586 DSN: catchall_for_domains propagating DSN
12:54:37 8586 DSN: unknown_users propagating DSN
12:54:37 8586 DSN: autoreplay propagating DSN
12:54:37 8586 DSN: localuser propagating DSN
12:54:37 8586 DSN: a_dnslookup propagating DSN
12:54:37 8586 DSN: a_disabled_domains propagating DSN
12:54:37 8586 DSN: a_disabled_users propagating DSN
12:54:37 8586 DSN: a_local_domains propagating DSN
12:54:37 8586 DSN: a_aliases propagating DSN
12:54:37 8586 DSN: a_aliases_pipe propagating DSN
12:54:37 8586 DSN: a_local_users propagating DSN
12:54:37 8586 DSN: a_catchall_for_domains propagating DSN
12:54:37 8586 originator: uid=0 gid=0 login=root name=Charlie Root
12:54:37 8586 LOG: MAIN
12:54:37 8586 IPv6 socket creation failed: Protocol not supported
12:54:37 8586 LOG: MAIN
12:54:37 8586 Failed to create IPv6 socket for wildcard listening (Protocol not supported): will use IPv4
12:54:37 8586 LOG: MAIN
12:54:37 8586 socket bind() to port 25 for address (any IPv4) failed: Address already in use: waiting 30s before trying again (9 more tries)
По умолчанию все пользователи, кроме exim_user
а также exim_group
не заслуживают доверия, поэтому они не могут отправлять сообщения от других пользователей. Поэтому, когда exim вызывается php
вынужден использовать sender_address как www@host
— потому что пользователь www
используется для запуска apache / nginx, которые вызывают php и exim.
Вы должны добавить www
пользователь exim’s trusted_users
или же trusted_groups
, Другой подход заключается в использовании SMTP-сессии вместо прямого вызова exim. Просто настройте ваш PHP на использование реального IP, где ваш exim прослушивает соединение, и этого достаточно.
Других решений пока нет …