2009-09-13 132 views
0

我已經成功地使用PHP的mail()函數發送郵件,並且爲了我的密碼重置通知電子郵件,我複製了我在其他地方使用的語法,但是我想我搞砸了,因爲它沒有到達目的地。這裏是我使用的代碼:PHP郵件沒有發送 - 標頭設置不正確?

$headers = 'To:'.$email."\r\n"; 
$headers .= 'From: [email protected]'."\r\n"; 
$to = $email."\r\n"; 
$subject = 'AromaClear Password Reset Notification'. "\r\n"; 
$msg = 'From: AromaClear'."\r\n"; 
$msg .='Subject: Your New Password'. "\r\n"; 
$msg .= 'Message: Your new password is '.$newpass."\r\n"; 
$msg.= 'If you have received this e-mail in error, please ignore it.'. "\r\n"; 

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

有什麼想法?

回答

3

試着看看你的服務器的郵件日誌,看看它爲什麼沒有得到轉發。例如,這個服務器的sendmail可能需要From頭的-f標誌,而不是在頭文本中指定它。

mail($to, $subject, $msg, $headers, "-f $from"); 

此外,你似乎做了很多額外的/奇怪的工作。這很容易:

$subject = "AromaClear Password Reset Notification"; 
$headers = "From: [email protected]"; 
$msg = "Your new password is $newpass\r\nIf you have received this e-mail in error, please ignore it.\r\n."; 

if(mail($email, $subject, $msg, $headers)) 
{ 
    //handle success 
} 
else 
{ 
    //handle failure 
} 

改變你的喜好的風格。

+0

我改變了代碼,並添加了一個不同的鍵值對查詢字符串取決於成功或失敗,它似乎已通過(我也加入了可選的-f參數),但我仍然不收到電子郵件。已經檢查過數據庫,電子郵件地址和用戶名是正確的,因爲他們已經進行了數週的測試)。依然沒有。奇怪。 – user97410 2009-09-13 18:54:58

+0

然後我的猜測是堆棧裏的東西越來越低。你真的需要看看你的系統的郵件日誌(通常是/ var/log/mail),看看郵件是否被推送。如果你沒有看到你的郵件出現,那麼PHP可能被錯誤地配置爲sendmail(而不是指向sendmail所在的位置?)。也許你的sendmail配置錯誤?也許你的ISP阻止SMTP中繼? – 2009-09-13 19:04:53

+0

我已經從同一臺服務器成功發送郵件,這是什麼讓這特別奇怪。事實上,我今天早些時候發過一些郵件,而且我還有另一個腳本可以工作,發送一個大的HTML編碼郵件和我在這裏發佈的原始語法(除了$ msg只是一個巨大的CSS和HTML字符串)。 – user97410 2009-09-13 19:06:21

1

這看起來好像沒什麼問題,也許做

if (mail($to_email,$subject,$message, $headers)) 
    echo 'Success'; 
else 
    echo 'Error'; 
} 

這可能讓你知道,如果它試圖在所有發送。

2

你檢查了mail()的返回值嗎?如果它不是FALSE,那麼它被接受用於交付,並且代碼很好,但是其他地方出現了一些問題。

1

只是不要在任何地方添加「\ r \ n」,只能用它來分隔標題。 在消息中,您只能使用\ n,它將起作用。 在主題和接收者的結尾處,不需要「\ r \ n」。