使用PHP的mail()函数发送以下标题:
$emailheaders = "From: " . $sender . "\n";
$emailheaders .= "Return-Path: " . $sender . "\n";
$emailheaders .= "MIME-Version: 1.0\n";
$emailheaders .= "Content-type: text/html; charset=UTF-8\r\n";
mail($email, $subject, $body, $emailheaders);
它工作正常,除了Return-Path:
重置为nobody@server.com
,或者至少这是在查看使用上述标头收到的电子邮件的扩展标头时显示的内容。当然,这意味着不会收到退回电子邮件。
Apache是否会重置标头,在这种情况下是为什么,还是我错误地使用mail()
?
我该怎么做才能防止这种情况发生。使用mail()
的第五个参数(例如-f sender@server.com
)是不可能的,因为PHP处于安全模式,提供程序不会更改它。我认为,尽管安全模式已开启,但某些用户无法使用第五个参数。
服务器正在运行Apache 2.2.3和PHP 5.1.6版。
答案 0 :(得分:2)
服务器的邮件传输代理(MTA)正在覆盖return-path
。例如,如果使用Exim:
在return-path
配置文件中设置/etc/exim/exim.conf
:
return_path = sender@example.com
如果您无法访问服务器配置或mail()
第五个参数,那么您可能无法做任何事情。
答案 1 :(得分:0)
您正在使用\n
拆分标头,但根据PHP,它应该是\ r \ n(请参阅Which line break in php mail header, \r\n or \n?)。
也许这就是标题没有正确发送的原因。