我在这里做了搜索。我知道这个问题已经被问过多次了。但是我的情况有些不同,而且我似乎无法使它正常工作。
我编写了一个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; }
以上所有内容实际上都是发送邮件的,但是所有头文件都带有讨厌的“根”。最后一个让我特别惊讶...
有什么想法可能会发生这种情况,或者我如何去改变返回路径?
答案 0 :(得分:0)
好的,所以问题出在posix_setuid()
无法正常工作。我将posix_getuid()
和posix_geteuid()
附加到外发邮件的正文中,并注意到uid并未更改。解决此问题(我自己的错误,没什么大不了的)之后,现在正在使用适当的返回路径发送邮件。
感谢任何阅读并考虑过这一点的人!