Почему exim отправляет/не отправляет электронные письма от разных пользователей на сервер через php?

На сервере 2 пользователя: admin и joe. Оба пользователя принадлежат к одним и тем же группам. Если я пытаюсь отправить электронную почту с доменов (через php-скрипт), которые принадлежат администратору - все работает. Но для доменов, принадлежащих joe, функция mail() не отправляет письмо.

Я включил mail.log в php.ini и увидел, что php работает правильно.

Apache/2.4.16 (FreeBSD) mpm-itk/2.4.7-02

эксим 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)

person Vincent_    schedule 23.03.2016    source источник


Ответы (1)


По умолчанию все пользователи, кроме exim_user и exim_group, не являются доверенными, поэтому они не могут отправлять сообщения от других пользователей. Поэтому, когда exim вызывается php, он вынужден использовать sender_address как www@host - потому что пользователь www использовал для запуска apache/nginx, которые вызывают php, которые вызывают exim.

Вы должны добавить пользователя www к trusted_users или trusted_groups exim'а. Другой подход заключается в использовании сеанса SMTP вместо прямого вызова exim. Просто настройте свой PHP на использование реального IP-адреса, где ваш exim прослушивает соединение, и этого достаточно.

person Kondybas    schedule 23.03.2016
comment
Это ничего не объясняет, почему php отправляет электронные письма от администратора, а не отправляет от joe. trust_users уже имеет www. Я пытаюсь изменить доверенные_пользователи и доверенные_группы, но безрезультатно. - person Vincent_; 23.03.2016