2012-12-18 39 views
1

以下標頭使用PHP的郵件發送()函數:阿帕奇重置 「返回路徑:」 對<[email protected]>在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:重置爲[email protected],或者至少在查看使用上述標題收到的電子郵件的擴展標題時顯示的內容。當然這意味着沒有收到退回郵件。

Apache是​​否重置標題,在這種情況下爲什麼,或者我錯誤地使用了mail()

我該怎麼做才能防止這種情況發生。使用mail()的第五個參數(例如-f [email protected])是不可能的,因爲PHP處於安全模式,並且提供程序不會更改它。我想,儘管安全模式已經開啓,但仍然沒有某種方法可以讓某些用戶使用第五個參數。

服務器運行Apache 2.2.3和PHP版本5.1.6。

+0

你還可以添加'Reply-To'字段並看看會發生什麼?現在你在混合'\ n'和'\ r \ n'。大多數PHP郵件示例使用「\ r \ n」,因此您可能首先要解決這個問題。 –

+0

添加回復不會改變事情。關於缺少「\ r」,請參閱下面的帖子。 – Matte

回答

0

您正在使用\n拆分標題,但根據PHP,它應該是\ r \ n(請參閱Which line break in php mail header, \r\n or \n?)。

也許這就是標題沒有正確發送的原因。

+0

正確的是你。不過,我在閱讀後認爲人們使用它有問題後刪除了「\ r」。所以,換句話說,它不適用於或不適用於「\ r」。 – Matte

2

服務器的郵件傳輸代理(MTA)正在覆蓋return-path。如果使用進出口例如:

設置return-path/etc/exim/exim.conf配置文件中:

return_path = [email protected] 

如果您沒有訪問到服務器配置或mail()第五個參數則有可能是沒有什麼可以做。

+0

那麼我可能會說服主機改變它。但是,我處理Apache /服務器設置的經驗很少,所以我不知道從哪裏開始。但是,如果我確實提出了一個可行的網絡主機解決方案,他們可能會這樣做。您建議應該在exim.conf文件中做些什麼? – Matte

+0

如果您可以要求他們將您的電子郵件地址用作固定返回路徑,那麼您可能會要求他們以非安全模式運行php。讓他們閱讀[this](http://php.net/manual/en/features.safe-mode.php),以便他們瞭解他們應該更改他們的共享服務器基礎結構 –

+0

@Matte他們可以使用任何其他MTA,例如sendmail,所以我不會建議對主機進行配置更改,只是告訴他們你想實現的目標 - 即告訴他們你想讓你的電子郵件地址成爲'return-path',並且你不能自己做,因爲它是MTA配置。 – MrCode