2010-11-18 59 views
0

在下面的代碼中,我可以通過phpMyAdmin運行sql,它會返回結果。它不會在瀏覽器上拋出任何PHP錯誤。我似乎無法讓它發送電子郵件。PHP - 從MySQL和電子郵件中提取數據

<?php 
ini_set('display_errors',1); 
error_reporting(E_ALL); 
include('database.inc.php'); // Our database connectivity file 
?> 
<?php 
$reminder_date = "t1.`reminder_date`"; 
$email = "t1.`reminder_email`"; 
$reminder_name = "t1.`reminder_name`"; 
$reminder_details = "t1.`reminder_desc`"; 
$server = "[email protected]"; 

$sql = "SELECT t1.`reminder_id` , t1.`reminder_name` , t1.`reminder_desc` , t1.`reminder_date` , t1.`reminder_email` , lp4.`email` AS `lp_reminder_email` 
FROM `reminder_events` AS t1 
LEFT OUTER JOIN `authorize` AS lp4 ON (t1.`reminder_email` = lp4.`email`) 
WHERE reminder_date <= NOW() 
ORDER BY `reminder_date` ASC"; 

$result = mysql_query($sql) or die(mysql_error()); 

while($row = mysql_fetch_array($result)) 
?> 
<?php 
$to = "$email"; 
$from = "$server"; 
$headers = "$from"; 
$subject = "$reminder_name"; 
$body = "$reminder_details"; 


{ 
$send = mail($to, $subject, $body, $headers); 
} 

?> 

有人告訴我我做錯了什麼嗎? 謝謝。

+1

從底部的郵件功能中刪除@並重試。 「@」是錯誤抑制運算符,任何以此爲前綴的函數都不會拋出錯誤,無論錯誤報告狀態如何。 – castis 2010-11-18 18:29:06

+0

我做到了,仍然沒有收到電子郵件。不要拋出任何錯誤。謝謝。 – KAH 2010-11-18 18:52:21

+0

是否會首先阻止您正在運行的整個區塊? – castis 2010-11-18 18:56:28

回答

0

你沒有正確地獲取你的查詢結果。 mysql_fetch_array()只是將結果行作爲數組返回,其中$ row [0]是結果中的第一列,$ row 1是第二列等...

同樣,您構建了獲取循環不當,所以你永遠不會正確地檢索一行。實質上,您的電子郵件正在發送到「t1 ` .reminder_email」。您的$標題也是無效的。你的代碼應該是這個樣子:

<?php 
    include('database.inc.php'); // Our database connectivity file 
    $server = "[email protected]"; 

$sql = <<<EOL 
SELECT t1.reminder_id AS reminder_id, t1.reminder_name AS reminder_name, 
    t1.reminder_desc AS reminder_desc, t1.reminder_date AS reminder_date, 
    t1.reminder_email AS reminder_email, lp4.email AS lp_reminder_email 
FROM reminder_events AS t1 
LEFT OUTER JOIN authorize AS lp4 ON (t1.reminder_email = lp4.email) 
WHERE reminder_date <= NOW() 
ORDER BY reminder_date ASC; 
EOL; 

$result = mysql_query($sql) or die(mysql_error()); 

while($row = mysql_fetch_assoc($result)) { 
    $to = $row['reminder_email']; 
    $subject = $row['reminder_name']; 
    $body = $row['reminder_desc']; 

    mail($to, $subject, $body); 
} 

如果需要惹的郵件標題,那麼我建議您使用合適的郵件包,如PHPMailerSwiftMailer,可適當設置它們爲你而不必處理細節的細節。

在代碼中,你有:

while($row = mysql_fetch_array($result)) 
?> 
<?php 
$to = "$email"; 

,它解析爲以下內容:

while($row = mysql_fetch_array($result)) { 
    $to = $email; 
} 

因爲錯位的大括號({}),整個結果集正在上無用的消耗循環的$to = $email,永遠不會發送郵件,直到所有行被浪費後。這使您的$ email保留了上面設置的原始字段名稱,因此您試圖將郵件發送給名爲「t1.reminder_mail」的用戶,這在郵件服務器中無疑不存在。

+0

工作。它現在發送電子郵件。上帝祝福你。謝謝。 – KAH 2010-11-18 19:40:17

+0

不客氣。如果這一切都適合你,你可以接受這個答案。 – 2010-11-18 21:08:07

相關問題