以root用户身份运行的脚本中的PHP邮件返回路径
我在这里搜索过了。我知道这个问题已经被问过多次了。但我的情况有点不同,我似乎无法让它发挥作用 我编写了一个CLI脚本,它从数据库中的邮件队列中读取并发送邮件。数据库包含以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用户身份运行的(出
$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
返回路径
用于反弹,通常不会显示给最终用户。我想您应该改为设置回复到
。(或除此之外。)回复到可能是合适的。我还设置了发送方标题。理想情况下,我不希望看到“根”邮件标题中的所有位置。事实上,将回跳返回给邮件排队的用户,而不是根用户,这可能是一个好主意。呵呵,理想情况下,您不应该以根用户的身份发送电子邮件。:)啊哈,是的。的确如此。