2011-08-18 62 views
6

我有這樣的腳本:這個PHP腳本使用Pear Mail發送郵件有什麼問題?

require_once "Mail.php"; 

$from = "Stephen <[email protected]>";//Google apps domain 
$to = "[email protected]"; 
$subject = "Hi!"; 
$body = "Hi,\n\nHow are you?"; 

$host = "mail.nvrforget.com"; 
$username = "[email protected]"; 
$password = "password"; 

$headers = array ('From' => $from, 
    'To' => $to, 
    'Subject' => $subject); 
$smtp = Mail::factory('smtp', 
    array ('host' => $host, 
    'auth' => true, 
    'username' => $username, 
    'password' => $password)); 

$mail = $smtp->send($to, $headers, $body); 

if (PEAR::isError($mail)) { 
    echo("<p>" . $mail->getMessage() . "</p>"); 
    } else { 
    echo("<p>Message successfully sent!</p>"); 
    } 

我來了這個錯誤:

Non-static method Mail::factory() should not be called statically 

任何想法如何解決這一問題? Pear Mail安裝在服務器上。

+0

看起來正確。你確定你的Pear Mail資料庫已被正確包含嗎? – labue

回答

11

Non-static method Mail::factory() should not be called statically

這是一個非致命通知從PHP來因爲PEAR郵件是史前並且尚未更新爲使用五年前在PHP5中引入的static關鍵字。

經過reviewing the documentation後,您的電話Mail::factory看起來完全正確和正常。

你沒有告訴我們,如果send的電話成功或失敗。如果成功,但郵件永遠不會發送,請檢查SMTP服務器日誌。如果失敗,那麼實際的錯誤信息是什麼? Mail::send文檔包含全面的錯誤列表。

您可能要考慮使用更多現代郵件發送庫,如Swiftmailer

+0

啊......非常有趣。發送似乎不成功。我會嘗試swiftmailer,因爲我肯定會更喜歡有一個更現代化的圖書館。謝謝。 – chromedude

-2

也許這與失落的&符號有關?

我的文檔例子注意到,工廠的使用情況是這樣的:

// Create the mail object using the Mail::factory method 
$mail_object =& Mail::factory('sendmail', $params); 

注意使用分配新建分配FY = &

+1

-1,不再需要在PHP5中通過引用傳遞對象。該語法僅適用於PHP4。 – Charles

-2

在所有梨子/郵件調用前加@。有時候最終可能會以Mail :: factory()結尾,因此不應將其稱爲靜態錯誤