以root身份运行的脚本中的PHP邮件返回路径

时间:2018-08-21 18:32:22

标签: php email posix root return-path

我在这里做了搜索。我知道这个问题已经被问过多次了。但是我的情况有些不同,而且我似乎无法使它正常工作。

我编写了一个CLI脚本,该脚本从数据库中的邮件队列中读取并发送邮件。该数据库包含$to$subject$body$headers的数据,因此可以将它们直接插入mail()函数中。听起来很简单。

除。

数据库还包含$from,这是我的系统上将邮件入队的用户的用户名。不能替换$headers中的From头。用户可以像通常那样在From标头中指定自己喜欢的任何地址。

由于脚本是以root身份运行的(出于我不愿讨论的原因),调用mail()函数会导致Return-Path标头设置为root@mydomain.com。还会导致在SPF邮件标题中显示“ root”,并在添加过程中添加

理想情况下,我希望在$from中将邮件放入队列的用户出现在“返回路径”中。

我尝试过的事情:

  • 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 个答案:

答案 0 :(得分:0)

好的,所以问题出在posix_setuid()无法正常工作。我将posix_getuid()posix_geteuid()附加到外发邮件的正文中,并注意到uid并未更改。解决此问题(我自己的错误,没什么大不了的)之后,现在正在使用适当的返回路径发送邮件。

感谢任何阅读并考虑过这一点的人!