2015-05-06 65 views
0

我知道這看起來這是一個重複的,但請先閱讀:不工作PHP的電子郵件功能正常

我有下面的PHP代碼:

<?php 

$to = '[email protected]'; 

$name = $_POST['name']; 
$email = $_POST['email']; 
$message = $_POST['message']; 
$subject = $_POST['subject']; 
$headers = "From: ".$email." \r\n"; 
$headers .= "Reply-To: ".$email."\r\n"; 

mail($to, $subject, $message, $headers); 

?> 

我認爲這是標準的電子郵件發送腳本。但是,我面對一個有趣的錯誤。我的網站是florin-pop.com和電子郵件只發送時,在電子郵件輸入字段我把這樣的東西:[email protected][email protected]或任何之前@ florin-pop.com

如果我試圖放一些不同的東西,如[email protected]甚至是一個真正的雅虎電子郵件地址,我沒有收到電子郵件。爲什麼?我的代碼有問題嗎?它可能來自託管公司? (我使用hostgator)。

編輯:

如果我改變了答覆要到那麼域的電子郵件地址是工作,但它仍然沒有做到這一點的最佳方式。如果按下回覆按鈕,忘記了這個竅門,你會發郵件給自己。

代碼:

<?php 

$to = '[email protected]'; 
$my_domain_email = '[email protected]'; 

$name = $_POST['name']; 
$email = $_POST['email']; 
$message = $_POST['message']; 
$subject = $_POST['subject']; 
$headers = "From: ".$email." \r\n"; 
$headers .= "Reply-To: ".$my_domain_email."\r\n"; 

mail($to, $subject, $message, $headers); 

?> 
+0

聽起來像是從服務器發送電子郵件時最可能有意的限制。首先要做的就是問問他們這是他們正在做的事情。 :p – neminem

+0

我能做些什麼來解決它? –

+0

問題是,用於發送電子郵件的服務器不受信任,所以您將a)永遠不會收到電子郵件b)幾周後收到電子郵件c)檢查您的垃圾郵件文件夾 – Augwa

回答

1

在這種情況下,傳送失敗可以通過雅虎通過Domain-based Message Authentication, Reporting, and Conformance (DMARC) policy引起的。

這意味着所有DMARC兼容的郵件接收器(包括雅虎,Hotmail的 和Gmail)現在被退回發送爲未通過雅虎服務器發送「@ yahoo.com」 地址的郵件。 [Yahoo]

的Twitter,Facebook,Linked In上,貝寶,AOL,Comcast和其他人也採用了這一政策。 [Venture Beat]

解決方案:將「發件人」標題更改爲您從中發送電子郵件的服務器的地址。這(正確)表示郵件是從您的服務器發送的,而不是來自Yahoo。您仍然可以在「回覆」標題中使用用戶提交的地址,以便收件人可以回覆發件人。

最佳做法是,你應該......使用您在控制域......「發件人:」頭 ... [例如]站點訪問者的名字顯示在「From:」標題的描述性部分和「Reply-To:」標題設置爲網站訪問者的地址,但「From:」標題中使用的實際地址清楚地表明您的網站是消息的來源。 [DMARC]

+0

我已將 '$ headers =「從:」。$ email。「\ r \ n」;'更改爲服務器的電子郵件,但我仍然無法將電子郵件發送到yahoo。 –

+0

如果我更改回復,那麼它工作正常。但是這仍然不是很好,因爲如果我按下回覆按鈕,它會再次發送我自己的電子郵件,我不會回覆用戶。我必須手動做到這一點。 –

+0

當您更改「回覆」時,它會起作用,但當您更改「發件人」時不起作用?如果這是一個DMARC問題,您應該可以設置「答覆」,但不管你喜歡什麼;它是需要設置到發送服務器的「發件人」標題。 – showdev