【问题标题】:PHP mail return path in script running as root以root身份运行的脚本中的PHP邮件返回路径
【发布时间】:2019-01-27 23:58:05
【问题描述】:

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

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

除了。

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

由于脚本以 root 身份运行(出于我不会深入讨论的原因),调用 mail() 函数会导致 Return-Path 标头设置为 root@mydomain.com。它还会导致“root”出现在沿途添加的 SPF 邮件标头中。

理想情况下,我希望在$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; }

上面所有的东西实际上都发送了邮件,但是所有的标题都带有那个讨厌的“根”。最后一个特别让我吃惊...

对为什么会发生这种情况有什么想法,或者我可以如何改变返回路径?

【问题讨论】:

  • IIRC Return-Path 用于反弹,通常不会向最终用户显示。我想你想设置Reply-To。 (或除此之外。)
  • 回复可能是合适的。我还设置了发件人标头。理想情况下,我只是不想在邮件标题中到处看到“root”。事实上,将退回邮件返回给排队邮件的用户而不是 root 用户甚至可能是个好主意。
  • 嘿,理想情况下,您不应该以 root 身份发送电子邮件。 :)
  • 啊哈哈,是的。确实。

标签: php email posix root return-path


【解决方案1】:

好的,所以问题在于posix_setuid() 不起作用。我将posix_getuid()posix_geteuid() 附加到外发邮件的正文中,并注意到uid 没有改变。解决了这个问题(我自己的错误,没什么疯狂的)后,现在正在使用适当的返回路径发送邮件。

感谢任何阅读和思考此问题的人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2014-05-21
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    相关资源
    最近更新 更多