2011-08-18 27 views
6

Tôi có kịch bản này:Có gì sai với tập lệnh PHP này để gửi thư bằng 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>"); 
    } 

tôi đến với lỗi này:

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

Bất kỳ ý tưởng làm thế nào để sửa lỗi này? Pear Mail được cài đặt trên máy chủ.

+0

Có vẻ chính xác. Bạn có chắc chắn thư viện Pear Mail của bạn đang được đưa vào đúng không? – labue

Trả lời

11

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

Đây là một không gây tử vong thông báo đến từ PHP vì PEAR Mail là thời tiền sử và chưa được cập nhật để sử dụng từ khóa static được giới thiệu năm năm trước trong PHP5.

Sau reviewing the documentation, cuộc gọi của bạn tới Mail::factorytrông hoàn toàn chính xác và bình thường.

Bạn không thể cho chúng tôi biết nếu cuộc gọi đến send thành công hay không thành công. Nếu thành công, nhưng thư không bao giờ được gửi, vui lòng kiểm tra nhật ký máy chủ SMTP. Nếu nó không thành công, thông báo lỗi thực sự là gì? Tài liệu Mail::send bao gồm danh sách lỗi đầy đủ.

Bạn có thể muốn xem xét sử dụng thêm thư viện gửi thư hiện đại, như Swiftmailer.

+0

Ah ... rất thú vị. Việc gửi dường như không thành công. Tôi sẽ thử dùng swiftmailer, bởi vì tôi chắc chắn muốn có một thư viện hiện đại hơn. Cảm ơn. – chromedude

-2

có lẽ nó phải thực hiện với dấu và ký hiệu bị thiếu?

Tôi nhận thấy trong các ví dụ tài liệu, việc sử dụng nhà máy trông như thế này:

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

Lưu ý assigment sử dụng = &

+1

-1, không còn cần phải vượt qua các đối tượng bằng cách tham chiếu trong PHP5. Cú pháp đó chỉ dành cho PHP4. – Charles

-2

đã thêm trước một @ cho tất cả các cuộc gọi lê/thư. đôi khi bạn có thể kết thúc với Mail :: factory() không nên được gọi là lỗi tĩnh

Các vấn đề liên quan