PHP путь возврата почты в скрипте, работающем от имени пользователя root

Я сделал поиск здесь. Я знаю, что этот вопрос задавался несколько раз. Но моя ситуация немного отличается, и я не могу заставить это работать.

Я написал сценарий CLI, который читает из почтовой очереди в базе данных и отправляет письма. База данных содержит данные для $to, $subject, $body, а также $headersтак что их можно просто подключить прямо к mail() функция. Звучит достаточно просто.

КРОМЕ.

База данных также содержит $from, который является именем пользователя в моей системе, который поставил почту в очередь. Он не предназначен для замены заголовка From в $headers, Пользователи могут указать любой адрес, который им нравится, в заголовке От, как это является нормой.

Поскольку скрипт выполняется от имени пользователя root (по причинам, в которые я не буду входить), вызов mail() функция приводит к тому, что заголовок Return-Path устанавливается в root@mydomain.com, Это также приводит к появлению "root" в заголовках почты SPF, которые добавляются по пути.

В идеале я хотел бы, чтобы пользователь, который поставил почту в очередь, в $from, чтобы появиться в Return-Path.

Вещи, которые я пробовал:

  • mail( $to, $subject, $body, array_merge( $headers, [ 'Return-Path' => "$from@mydomain.com" ] );
  • mail( $to, $subject, $body, $headers, "-f $from@mydomain.com" );
  • posix_seteuid( posix_getpwnam( $from )['uid'] ); mail( $to, $subject, $body, $headers );
  • if( pcntl_fork() === 0 ) { posix_setuid( posix_getpwnam( $from )['uid'] ); mail( $to, $subject, $body, $headers ); die; }

Все вышеперечисленное действительно ДЕЙСТВИТЕЛЬНО отправляет почту, но ВСЕ заголовки имеют персиковый "корень". Последнее меня особенно удивляет...

Любые мысли о том, почему это может происходить, или как я могу изменить этот обратный путь?

1 ответ

Итак, проблема была с posix_setuid() не работает. Я добавил posix_getuid() а также posix_geteuid() на тело исходящей почты и заметил, что uid не изменился. После решения этой проблемы (моя собственная ошибка, ничего сумасшедшего), письмо теперь отправляется с соответствующим путем возврата.

Спасибо всем, кто прочитал и задумался над этим!

Другие вопросы по тегам