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

以root用户身份运行的脚本中的PHP邮件返回路径,php,email,posix,root,return-path,Php,Email,Posix,Root,Return Path,我在这里搜索过了。我知道这个问题已经被问过多次了。但我的情况有点不同,我似乎无法让它发挥作用 我编写了一个CLI脚本,它从数据库中的邮件队列中读取并发送邮件。数据库包含$to、$subject、$body和$headers的数据,因此可以将它们直接插入mail()函数。听起来很简单 除了 该数据库还包含$from,这是我的系统中排队接收邮件的用户的用户名。它不打算替换$headers中的From标头。用户可以在From头中指定他们喜欢的任何地址,这是正常的 由于脚本是以root用户身份运行的(出

我在这里搜索过了。我知道这个问题已经被问过多次了。但我的情况有点不同,我似乎无法让它发挥作用

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

除了

该数据库还包含
$from
,这是我的系统中排队接收邮件的用户的用户名。它不打算替换
$headers
中的From标头。用户可以在From头中指定他们喜欢的任何地址,这是正常的

由于脚本是以root用户身份运行的(出于我不想讨论的原因),因此调用
mail()
函数将导致返回路径头设置为
root@mydomain.com
。它还会导致“root”显示在SPF邮件头中,并在添加过程中添加这些邮件头

理想情况下,我希望将邮件排队的用户(在
$from
中)出现在返回路径中

我尝试过的事情:

  • mail($to,$subject,$body,array\u 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;}
事实上,上面所有的东西都会发送邮件,但是所有的邮件的标题都带有讨厌的“根”。最后一个让我特别惊讶


有没有想过为什么会发生这种情况,或者我该如何更改返回路径?

好的,问题在于
posix\u setuid()
不工作。我在发送邮件的正文中添加了
posix\u getuid()
posix\u geteuid()
,并注意到uid没有更改。解决此问题后(我自己的错误,没有什么疯狂的),邮件现在正以适当的返回路径发送


感谢所有阅读和思考过这一点的人!

IIRC
返回路径
用于反弹,通常不会显示给最终用户。我想您应该改为设置
回复到
。(或除此之外。)回复到可能是合适的。我还设置了发送方标题。理想情况下,我不希望看到“根”邮件标题中的所有位置。事实上,将回跳返回给邮件排队的用户,而不是根用户,这可能是一个好主意。呵呵,理想情况下,您不应该以根用户的身份发送电子邮件。:)啊哈,是的。的确如此。