【发布时间】: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